【文章标题】Trojan.PSW.Win32.GameOL.sng分析
【文章作者】MichaelHc
【分析工具】SoftSnoop红尘岁月版、PEiD、AoRE,所有工具都来自看雪,请自己搜索下载。
【分析平台】VMware下的XP SP2
【中文名称】线上游戏窃取者
【病毒样本】见附件,解压密码virus,样本来自反病毒爱好者论坛,该论坛上有一篇关于这个病毒的文章http://avfbbs.80port.net/read-htm-tid-22244.html
【病毒简介】Trojan.PSW.Win32.GameOL的一个变种,Trojan.PSW.Win32.GameOL是各大安全公司公认的08年病毒/木马之首。详情请google“08年10大病毒”。
【作者声明】只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【Thanks To】红尘岁月
【详细过程】
启动虚拟机,记着启动后先创建快照,并断开与主机的网络连接,以免造成损失,所有操作均在虚拟机下进行。PEiD分析,发现是UPX壳,使用AoRE脱壳成功,脱壳后再用PEiD载入可以看到病毒是用VC++6.0写的(不脱壳也可以直接分析)。接下来使用SoftSnoop分析如下:
首先,病毒在C:\WINDOWS\system32\目录创建文件kandoftt.dll。
返回地址: 00401689 函数名称: GetSystemDirectoryA(KERNEL32.dll)
GetSystemDirectoryA: 取得Windows系统目录(System目录)的完整路径名
lpBuffer=0x0101FEA8
nBufferSize=0x00000104
存入缓冲区中的数据: "C:\WINDOWS\system32"
GetSystemDirectoryA返回值: 0x00000013
返回地址: 0040169D 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1="C:\WINDOWS\system32"
String2="\"
lstrcat返回值: 0x0101FEA8 ("C:\WINDOWS\system32\")
返回地址: 004016AB 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1="C:\WINDOWS\system32\"
String2="kandoftt.dll"
lstrcat返回值: 0x0101FEA8 ("C:\WINDOWS\system32\kandoftt.dll")
返回地址: 00401608 函数名称: CreateFileA(KERNEL32.dll)
CreateFileA: 打开和创建文件、管道及控制台等
lpFileName="C:\WINDOWS\system32\kandoftt.dll"
dwDesiredAccess=0x40000000
dwShareMode=0x00000000
lpSecurityAttributes=0x00000000
dwCreationDistribution=0x00000002 (CREATE_ALWAYS)
dwFlagsAndAttributes=0x00000000
hTemplateFile=0x00000000
CreateFileA返回值: 0x00000050(文件句柄)
返回地址: 0040161E 函数名称: WriteFile(KERNEL32.dll)
WriteFile: 将数据写入一个文件
hFile=0x00000050
lpBuffer=0x00404060
nNumberOfBytesToWrite=0x00007000
lpNumberOfBytesWritten=0x0101FE84
lpOverlapped=0x00000000
存入缓冲区中的数据: "MZ?
WriteFile返回值: 0x00000001(BOOL类型)
返回地址: 00401625 函数名称: CloseHandle(KERNEL32.dll)
CloseHandle: 关闭一个句柄(包括文件、文件映射、进程、线程、安全和同步对象等)
hObject=0x00000050
CloseHandle返回值: 0x00000001(NULL表示失败)
返回地址: 00401631 函数名称: FreeResource(KERNEL32.dll)
FreeResource: 释放资源
HretResource=0x00404060
FreeResource返回值: 0x00000000(释放资源)
接着,病毒在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs,写入kandoftt.dll。
返回地址: 0040145C 函数名称: RegOpenKeyExA(ADVAPI32.dll)
RegOpenKeyExA: 打开注册表中一个现有的项
hKey=0x80000002 (HKEY_LOCAL_MACHINE)
lpSubKey="SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows"
ulOptions=0x00000000
samDesired=0x000F003F (KEY_ALL_ACCESS)
phkResult=0x0101FE98
RegOpenKeyExA返回值: 0x00000000(NULL表示成功)
返回地址: 00401292 函数名称: RegQueryValueExA(ADVAPI32.dll)
RegQueryValueExA: 获取注册表一个项的设置值
hKey=0x00000050
lpValueName="AppInit_DLLs"
lpReserved=NULL
lpType=0x0101FE90
lpBuffer=0x0101EE3C
nBuffer=0xFE94
存入缓冲区中的数据: ""
RegQueryValueExA返回值: 0x00000000(NULL表示成功)
返回地址: 004014DE 函数名称: lstrcpy(KERNEL32.dll)
lstrcpy: 复制字符串,复制lpString2到lpString1
lpString1=0x0101EE3C
lpString2="kandoftt.dll"
lstrcpy返回值: 0x0101EE3C ("kandoftt.dll")
返回地址: 0040155F 函数名称: lstrlen(KERNEL32.dll)
lstrlen: 获取字符串的长度
lpString="kandoftt.dll"
lstrlen返回值: 0x0000000C(字符串长度)
返回地址: 00401577 函数名称: RegSetValueExA(ADVAPI32.dll)
RegSetValueExA: 设置指定项的值
hKey=0x00000050
lpValueName=0x0101FE7C
Reserved=0x00000000
dwType=0x00000001
lpData=0x0101EE3C
cbData=0x0000000D
RegSetValueExA返回值: 0x00000000
返回地址: 00401586 函数名称: RegCloseKey(ADVAPI32.dll)
RegCloseKey: 关闭系统注册表中的一个项或键
hKey=0x00000050
RegCloseKey返回值: 0x00000000(NULL表示成功)
再接着,把自身复制到C:\WINDOWS\system32\kandofttk.exe
返回地址: 00401B77 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1="C:\WINDOWS\system32\kandoftt"
String2="k.exe"
lstrcat返回值: 0x0012FE10 ("C:\WINDOWS\system32\kandofttk.exe")
返回地址: 00401B8D 函数名称: CopyFileA(KERNEL32.dll)
CopyFileA: 复制文件
lpExistingFileName="C:\Documents and Settings\Administrator\桌面\dumped.exe"
lpNewFileName="C:\WINDOWS\system32\kandofttk.exe"
bFailIfExists=0x00000000
CopyFileA返回值: 0x00000001(复制文件)
接下来执行病毒程序,“C:\WINDOWS\system32\kandofttk.exe ” 中的乱码是病毒的参数?
返回地址: 00401B9B 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1="C:\WINDOWS\system32\kandofttk.exe"
String2=" "
lstrcat返回值: 0x0012FE10 ("C:\WINDOWS\system32\kandofttk.exe ")
返回地址: 00401BAA 函数名称: WinExec(KERNEL32.dll)
WinExec: 运行指定的程序
lpCmdLine=0x0012FE10
uCmdShow=0x00000000
TID: 00000738h:
模块被导入...appHelp.dll Base: 76D70000h
WinExec返回值: 0x00000021(UINT类型)
最后,创建批处理文件dumped.exe.bat删除自身,因为这里我先脱壳了,默认脱壳后的文件名为dumped.exe,如果是没脱壳的病毒的话会创建kandofttk.exe.bat
返回地址: 0040172F 函数名称: GetModuleFileNameA(KERNEL32.dll)
GetModuleFileNameA: 获取一个已装载模板的完整路径名称
hModule=0x00400000
lpBuffer=0x0012FB50
nBufferSize=0x00000104
存入缓冲区中的数据: "C:\Documents and Settings\Administrator\桌面\dumped.exe"
GetModuleFileNameA返回值: 0x00000037(文本长度)
返回地址: 00401745 函数名称: lstrcpy(KERNEL32.dll)
lstrcpy: 复制字符串,复制lpString2到lpString1
lpString1=0x0012FA4C
lpString2="C:\Documents and Settings\Administrator\桌面\dumped.exe"
lstrcpy返回值: 0x0012FA4C ("C:\Documents and Settings\Administrator\桌面\dumped.exe")
返回地址: 0040176D 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1="C:\Documents and Settings\Administrator\桌面\dumped.exe"
String2=".bat"
lstrcat返回值: 0x0012FB50 ("C:\Documents and Settings\Administrator\桌面\dumped.exe.bat")
返回地址: 0040178A 函数名称: CreateFileA(KERNEL32.dll)
CreateFileA: 打开和创建文件、管道及控制台等
lpFileName="C:\Documents and Settings\Administrator\桌面\dumped.exe.bat"
dwDesiredAccess=0x40000000
dwShareMode=0x00000001 (FILE_SHARE_READ)
lpSecurityAttributes=0x00000000
dwCreationDistribution=0x00000002 (CREATE_ALWAYS)
dwFlagsAndAttributes=0x00000080 (FILE_ATTRIBUTE_NORMAL)
hTemplateFile=0x00000000
CreateFileA返回值: 0x00000064(文件句柄)
返回地址: 00401853 函数名称: lstrcpy(KERNEL32.dll)
lstrcpy: 复制字符串,复制lpString2到lpString1
lpString1=0x0012F64C
lpString2=":try
del ""
lstrcpy返回值: 0x0012F64C (":try
del "")
返回地址: 00401863 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1=":try
del ""
String2="C:\Documents and Settings\Administrator\桌面\dumped.exe"
lstrcat返回值: 0x0012F64C (":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe")
返回地址: 00401870 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1=":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
String2=""
if exist ""
lstrcat返回值: 0x0012F64C (":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
if exist "")
返回地址: 00401880 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1=":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
if exist ""
String2="C:\Documents and Settings\Administrator\桌面\dumped.exe"
lstrcat返回值: 0x0012F64C (":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
if exist "C:\Documents and Set")
返回地址: 0040188D 函数名称: lstrcat(KERNEL32.dll)
lstrcat: 把string2连接到string1后面
String1=":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
if exist "C:\Documents and Set"
String2="" goto try
del %0"
lstrcat返回值: 0x0012F64C (":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
if exist "C:\Documents and Set")
返回地址: 0040189F 函数名称: lstrlen(KERNEL32.dll)
lstrlen: 获取字符串的长度
lpString=":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
if exist "C:\Documents and Set"
lstrlen返回值: 0x00000098(字符串长度)
返回地址: 004018B0 函数名称: WriteFile(KERNEL32.dll)
WriteFile: 将数据写入一个文件
hFile=0x00000064
lpBuffer=0x0012F64C
nNumberOfBytesToWrite=0x00000098
lpNumberOfBytesWritten=0x0012FCF0
lpOverlapped=0x00000000
存入缓冲区中的数据: ":try
del "C:\Documents and Settings\Administrator\桌面\dumped.exe"
if exist "C:\Documents and Set"
异常: 非法访问地址 100B5469h
进程已被SoftSnoop终止
到这里出现了异常,没法调试下去了,打开任务管理器,可以看到进程kandofttk.exe,另外,桌面上有两个文件dumped.exe、dumped.exe.bat,其中dumped.exe.bat的内容为:
:try
del "C:\Documents and Settings\Administrator\桌面\kandofttk.exe"
if exist "C:\Documents and Settings\Administrator\桌面\kandofttk.exe" goto try
del %0
原来创建批处理文件之后还没来得及执行就出现了异常,这个批处理文件显然是用来删除dumped.exe、dumped.exe.bat这两个文件的。
有了以上的信息,清除这个病毒就不是难事了:
结束进程:
kandofttk.exe
删除文件:
C:\WINDOWS\system32\kandoftt.dll
C:\WINDOWS\system32\kandofttk.exe
清理下边这个注册表值为空:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs;
为了验证清除方法,我把虚拟机恢复成之前创建的快照,这次直接运行样本kandofttk.exe(桌面上没有留下两个文件了,真正的中毒了),然后按照刚才的步骤手工清除病毒,居然很顺利的搞定了。不免有点怀疑08年十大病毒榜首的Trojan.PSW.Win32.GameOL就这么容易杀么?另外有关病毒的功能模块(写这个病毒的人到底想搞什么破坏呢?)也还没有分析,有空再研究研究。
- 标 题: Trojan.PSW.Win32.GameOL.sng分析
- 作 者:MichaelHc
- 时 间:2009-05-16 12:59
- 链 接:http://bbs.pediy.com/showthread.php?t=88996