第一次发帖,可能不规范,请斑竹见谅.我知道自己分析的很烂
请各位大虾能够过过目,指点小鸟一下,我目前的水平之能找找关键的API。
第一步,脱壳
放到PEID里一看,加壳了,Upack 0.3.9 beta2s -> Dwing [Overlay]
用ESP定律脱掉.F8,hr esp ,shift+f9,搞定.
第二步,现在就可以放进IDA里分析了
.Upack:00402B78 public start
.Upack:00402B78 start:
.Upack:00402B78 push ebp
.Upack:00402B79 mov ebp, esp
.Upack:00402B7B add esp, 0FFFFFFF0h
.Upack:00402B7E mov eax, offset dword_402B50
.Upack:00402B83 call sub_401038 ; 得到ExitProcess函数地址,一般程序都是这么做的
.Upack:00402B88 call GetCurrentProcessId ; 得到进程本身ID
.Upack:00402B8D push 1
.Upack:00402B8F push offset dword_404840
.Upack:00402B94 call RtlZeroMemory ; 初始化充0的操作,可以不用理
.Upack:00402B99 push offset aA ; "a"
.Upack:00402B9E push offset dword_404840
.Upack:00402BA3 call lstrcmpi ; 对于字符串的操作,我一般是忽略的
.Upack:00402BA8 call GetTickCount ; 想要看具体的结果,直接用OD跟出来
.Upack:00402BAD push 104h ; 这样比较省事吧
.Upack:00402BB2 push offset byte_404124
.Upack:00402BB7 call GetSystemDirectoryA ; 得到System32路径
.Upack:00402BBC push offset dword_402C54
.Upack:00402BC1 push offset byte_404124
.Upack:00402BC6 call lstrcat
.Upack:00402BCB call GetForegroundWindow ; 获得当前用户工作窗口句柄
.Upack:00402BD0 call sub_4029B4 ; 这个函数主要在拼接要释放文件路 径的字符串,
.Upack:00402BD0 ; 并且遍历自身进程模块,查找是否存在病毒的DLL。
.Upack:00402BD0 ; 这个DLL是后来病毒释放出来的。这算是一种保证病毒
.Upack:00402BD0 ; 只存在一个实例的方法吧。
.Upack:00402BD0 ;
.Upack:00402BD5 call sub_402900 ; 此函数主要功能是释放DLL文件。
.Upack:00402BD5 ; 这一块我自己是用OD跟,因为能够很方便的看到
.Upack:00402BD5 ; 字符串操作的结果,和释放DLL的路径
.Upack:00402BDA push offset NewFileName
.Upack:00402BDF push offset ExistingFileName
.Upack:00402BE4 call lstrcmpi
.Upack:00402BE9 test eax, eax
.Upack:00402BEB jz short loc_402C14
.Upack:00402BED call sub_4025E8 ; 这一块很迷茫
.Upack:00402BF2 call sub_4024D4 ; 这个函数很直观能看出来,写注册表项注入EXPLORER
.Upack:00402BF2 ; 让它加载起释放的DLL
.Upack:00402BF7 call sub_402470 ; 查找zeroOnline.exe游戏进程,将其结束
.Upack:00402BFC push 0
.Upack:00402BFE push offset NewFileName
.Upack:00402C03 call WinExec
.Upack:00402C08 mov eax, offset ExistingFileName
.Upack:00402C0D call sub_401814 ; 释放DLL
.Upack:00402C12 jmp short loc_402C49
.Upack:00402C14 ; ---------------------------------------------------------------------------
.Upack:00402C14
.Upack:00402C14 loc_402C14: ; CODE XREF: .Upack:00402BEBj
.Upack:00402C14 call sub_402404 ; 加载释放的DLL,调用其中的EnHookWindowB函数
.Upack:00402C19 push offset dword_40495C
.Upack:00402C1E push 0
.Upack:00402C20 push 0
.Upack:00402C22 push offset sub_402438 ; 循环调用EnHookWindowB函数
.Upack:00402C22 ; 还有个简单的反调试,呵呵
.Upack:00402C27 push 0
.Upack:00402C29 push 0
.Upack:00402C2B call CreateThread
.Upack:00402C30
.Upack:00402C30 loc_402C30: ; CODE XREF: .Upack:00402C47j
.Upack:00402C30 push 0
.Upack:00402C32 push 0
.Upack:00402C34 push 0
.Upack:00402C36 push offset dword_404940
.Upack:00402C3B call GetMessageA
.Upack:00402C40 push 1
.Upack:00402C42 call Sleep
.Upack:00402C47 jmp short loc_402C30
.Upack:00402C49 ; ----------------------------------------------------
以上就是这个病毒主函数的流程了。
第三步,就是在比较关键的地方,用OD去跟,可以看到动态的参数..
关于释放出来的DLL,通过设置键盘和鼠标钩子,让每一个窗口程序都加载它,在初始化函数中通过特征定位,修改游戏内存获取的用户帐号和密码..因为一直看到ReadProcessMemery,WriteProcessMemery..再仔细一点的小鸟我也看不出来了,所以没什么可加注释的地方,就不帖代码了。
放上病毒的样本和我自己分析的IDB文件吧....好紧张...
这个样本看了2个小时,平时我都是一个样本看一天的~~~
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!