首页
社区
课程
招聘
[旧帖] [原创][交流]本鸟很菜,学习三个月,分析个病毒看看 0.00雪花
发表于: 2009-10-15 17:35 1670

[旧帖] [原创][交流]本鸟很菜,学习三个月,分析个病毒看看 0.00雪花

2009-10-15 17:35
1670
第一次发帖,可能不规范,请斑竹见谅.我知道自己分析的很烂
请各位大虾能够过过目,指点小鸟一下,我目前的水平之能找找关键的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个小时,平时我都是一个样本看一天的~~~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
  • 1.rar (128.51kb,2次下载)
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 113
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
楼主加油啊!!!
2009-10-15 17:40
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,继续加油!
2009-10-15 17:58
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错~
2009-10-15 20:43
0
游客
登录 | 注册 方可回帖
返回
//