对一款游戏木马的不完全分析
样本链接:http://pan.baidu.com/s/1hqo96C0 密码:t7se
一、基本信息
样本名:Sample20150923.v
MD5 :3EAE9CEB85B48804955EB5FF673C2D0C
SHA1 :B0FAA74DD49CACCD365F0A69C0E076C2C1A56980
CRC32:715A63D9
样本发现日期:--
样本类型:“梦幻西游”盗号木马
样本文件大小:28672 bytes
壳信息:UPX壳
脱壳后文件: " 2.exe " 大小: 83456 bytes 占用空间:86016bytes
影响的系统:Win XP
二、简介
“Sample20150923.v ”是一个针对“梦幻西游”用户,通过感染dsound.dll来窃取用户信息的盗号木马。
三、受感染的系统和环境说明
WinXP
四、文件系统变化
创建文件:
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\kb******.sve (*为随机数字)
C:\Program Files\Common Files\System\kb******.bwb(隐藏)
C:\WINDOWS\system32\dsound.dll.dat.XXXX(重命名原dsound.dll,X为随机大写字符)
C:\WINDOWS\system32\dsound.dll.dat(替换dsound.dll)
C:\WINDOWS\system32\DllCache\dsound.dll
C:\WINDOWS\system32\DllCache\ dsound.dll.dat.XXXX
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\tempVidio.bat
感染文件:
C:\WINDOWS\system32\dsound.dll
感染前大小:367616 bytes 占用空间:368640 bytes
感染后大小:369664 bytes 占用空间:372736 bytes
删除文件:
exe文件本身
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\tempVidio.bat
五、注册表变化
2.EXE:1220
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = 1D 0C 55 4F 5D D4 10 39 ...
explorer.exe:1960
HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache\C:\Documents and Settings\Administrator\桌面\2.EXE = "2"
2.EXE:1220
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = E2 DC A1 FF 0C 9F B4 D5 ...
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = 3D 94 43 1C B2 12 AC 03 ...
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = 9B 7A 8E 9F 8D E6 A3 E1 ...
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = 94 EB EF E8 79 14 F5 20 ...
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = 47 92 6C 21 57 DA 1C 86 ...
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = 03 C9 4E 15 49 3D 6B 15 ...
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = 75 10 4B 7C B9 49 F2 B4 ...
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Personal = "C:\Documents and Settings\Administrator\My Documents"
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\{acb37fdd-2971-11e5-bcaf-806d6172696f}\\BaseClass = "Drive"
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\{acb37fdb-2971-11e5-bcaf-806d6172696f}\\BaseClass = "Drive"
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\{acb37fda-2971-11e5-bcaf-806d6172696f}\\BaseClass = "Drive"
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Documents = "C:\Documents and Settings\All Users\Documents"
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Desktop = "C:\Documents and Settings\Administrator\桌面"
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop = "C:\Documents and Settings\All Users\桌面"
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\\ProxyBypass = 2(次) 0x1
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\\IntranetName = 2(次) 0x1
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\\UNCAsIntranet = 2(次) 0x1
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache = "C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files"
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cookies = "C:\Documents and Settings\Administrator\Cookies"
HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache\C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\tempVidio.bat = "tempVidio"
cmd.exe:2340
HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed = FF 14 24 59 BE 63 95 7D ...
六、网络症状
构造了HTTP协议(post/get)包,一旦“my.exe”(梦幻西游)运行,则设置的钩子生效,向目标地址发送账号信息。(图a)
环境关系暂时还没有分析具体的流量行为,时间允许的条件下应该搭好环境再分析样本更完善。
图 (a)
七、详细分析/功能介绍
1.脱壳
PEID加载样本,可发现样本加了UPX壳(图1.1)。 OD加载样本, F8单步运行, 注意观察ESP变化,当ESP变为0012ffa4时,下断点 hr 0012FFa4。F9运行,从程序断下来的地方开始单步跟踪,附近找到OEP,样本OEP为00404794处(图1.2),在此保存为“2.exe”。
图 1.1
图 1.2
2.采用IDA静态分析和OD动态分析结合的方式对样本进行分析。
IDA加载脱壳后的样本,进入WinMain函数,在OD里找到WinMain函数——2.00403703(图2.1),对应IDA里的函数调试。
图 2.1
3.sub_402A66()函数分析
主要行为:为当前进程提权。
- 拼字符串“my.exe”、"SeDebugPrivilege"、"Advapi32.dll"、“OpenProcessToken”、“ LookupPrivilegeValueA”、"AdjustTokenPrivileges"等
- 获得当前进程的伪句柄,打开与进程相关联的访问令牌。查看系统权限值,为程序提权(图 3.1)
- 为进程创建进程快照
图 3.1
4.sub_402B14()函数分析
n 首先分配了一个大小为260的内存空间,接着调用sub_402B14()函数,向该内存空间写文件"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\kb******.sve"。在函数sub_402B14()里,程序主要做了以下操作:
获取temp目录,
- 写文件"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\kb******.sve",文 件内容来自内存[00407070],文件名为“kb”+ 6位随机数字 +“.sve”。(图4.1.1 图4.1.2 图4.1.3)
图 4.1.1
图 4.1.2
图 4.1.3
- 向文件"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\kb******.sve"添加字节:随机字节(9段)+固定字节(3段)(函数sub_402894中实现)。代码如下:
v18=9 do // 向"%TEMP%\kb******.sve"填充随机数,循环填充9次 { v14[0] = 0; memset(&v14[1], 0, 0x270Cu); *(_WORD *)&v14[9997] = 0; v14[9999] = 0; v4 = rand(); v22 = 0; v25 = 0; v5 = 1000 * (v4 % 10 + 1); if ( (signed int)v5 > 0 ) { do { v6 = rand(); v7 = v25; v8 = v22 + v6; v25 += 4; ++v22; *(_DWORD *)&v14[v7] = v8; } while ( v25 < (signed int)v5 ); } WriteFile(v20, v14, v5, &NumberOfBytesRead, 0);// 填充随机数(个数随机) --v18; } while ( v18 ); v9 = v20; WriteFile(v20, lpBuffer, Buffer - 8, &NumberOfBytesRead, 0); WriteFile(v9, &Buffer, 4u, &NumberOfBytesRead, 0); WriteFile(v9, &v16, 4u, &NumberOfBytesRead, 0);
- 通过注册表检测主机上是否安装了“梦幻西游”(my.exe)游戏,如果安装了,找到安装目录:
int __cdecl sub_401E53(char *Str, int a2, int a3, int a4, char *SubStr) // [arg.1] = buffer // [arg.2] = 0x80000002 = -2147483646. // [arg.3] = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\梦幻西游_is1" // [arg.4] = "InstallLocation" // [arg.5] = "\my.exe"
- 复制文件:
"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\kb******.sve" -—〉 "C:\Program Files\Common Files\system\\kb******.bwb"
- 修改.bwb文件属性为隐藏文件。
- 利用“C:\Program Files\Common Files\system\\kb******.bwb”感染“dsound.dll”,感染后的文件为“dsound.dll.dat”
- 重命名文件”dsound.dll”为"dsound.dll.XXXX"
- 重命名"dsound.dll.dat"为“dsound.dll”(感染之后)
5.sub_40333C()函数分析
%temp%下创建批处理文件tempVidio.bat,利用该文件删除下面两个文件:
- C:\DOCUME~1\ADMINI~1\桌面\2.EXE,
- 该批处理文件tempVidio.bat
tempVidio.bat内容为:
@echo off :try del C:\DOCUME~1\ADMINI~1\桌面\2.EXE if exist C:\DOCUME~1\ADMINI~1\桌面\2.EXE goto try del C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\tempVidio.bat
6.“C:\Program Files\Common Files\System\kb******.bwb”分析
a) 脱壳
这是一个UPX加壳的dll文件,首先contrl+s ,查找下面的命令:
xchg ah,al rol eax,10 xchg ah,al add eax,esi
找到在106617F6处,在其上面两处下断点,这里实在重定位表的RVA,重定位完后106617EC处跳转(图 6.1),在10661810处下断,F8单步观察大跳的jump,不久找到OEP(10004F3E)。在此用OD脱壳,保存为dumpedkbX.bwb.dll。(图 6.3)
图 6.1
图 6.2
图 6.3
b) ImportREC修复IAT数据
- 运行Impoert REConstructor,选中Ollydbg的loaddll.exe的进程,然后点“选取DLL”,选择“kb******.bwb”。
- 填写程序真正OEP,“IAT AutoSearch”让其自动检测。
- “Get Import”分析IAT结构得到基本信息。
- 修复所有dll,显示“valid:YES”。
- 选择“Add new section”为完全dump出的文件加一个section。
- “Fix Dump”,选择刚刚OD脱壳的文件“dumpedkbX.bwb.dll”,程序将自动创建“dumpedkbX.bwb_.dll”
c) 分析“dumpedkbX.bwb_.dll”
IDA加载该dll文件,ctrl+E查找程序入口函数,发现入口函数有三个(图 6.4):
图 6.4
其中DllEntryPoint里面首先判断该dll由什么程序加载,将调用程序先后与“ctfmon.exe”、“my.exe”、“QQLogin.exe”、“DNF.exe”进行对比,当调用程序为“my.exe”时创建一个线程,即在检测到调用该dll的程序为“梦幻西游”时创建了这个线程,在线程里面实现盗取了用户的登陆密码。(图 6.5)(具体细节还没有弄得特别清楚,暂且不写入文档,搞清楚了再更新)
其中LoadDll里面设置了WH_GETMESSAGE类型的全局钩子,与所有线程关联,在目标出程序之前获得控制权,监视从GetMessage or PeekMessage函数返回的消息,以此监视鼠标和键盘输入,以及其他发送到消息队列中的消息。(图 6.6)
在CancelDll里面UnhookWindowsHookEx。(图 6.7)
图 6.5
图 6.6
图 6.7
7.分析感染后的dsound.dll
加载了“C:\Program Files\Common Files\System\kb******.bwb”(图 7.1、图7.2)
图 7.1
图7.2
八、总结
a) 先用自动化工具跑一遍程序,观察调用了哪些敏感的API,这些地方在后面分析的时候要多加注意。
b) 当有释放文件的时候,一定要想文件从哪里释放来的,释放这个文件的目的是什么,对释放和受到感染的文件也要仔细分析。
c) 初次修复数据,感觉还挺好玩的~~
d) 待改进的:
- 对注册表掌握不到位,至于知道程序在访问或修改注册表,但并不清楚修改的注册表对应的意义。
- 当样本通过释放的dll感染dsound.dll的时候,是在原文件的基础上做了修改,添加了数据,但由于堆栈和PE内存结构掌握不够熟练,为什么修改某个内存的数据,为什么把恶意代码添加到某个内存,这一部分还没有理解透彻。
- 分析样本释放的dll的时候没考虑到dll可能有多个入口参数,因此一开始没找到钩子。
- 对钩子这部分不熟悉,理解不到位。
- 对样本构造发送数据包部分没有分析很清楚,在没有安装环境的机器上跑样本还无法进行正确的动态分析和流量分析,时间允许的情况下应该在搭好环境之后分析样本才分析更完善。
-Vi 大师见笑,欢迎指正.