欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]一个典型的游戏盗号木马逆向分析(有样本)

[原创]一个典型的游戏盗号木马逆向分析(有样本)

兵法有云:知已知彼,百战不殆。攻克敌人从了解敌人开始。
小弟新作,一个老病毒,练手用,大鸟勿喷!IDB,样本,文档随后附上。  
------------------------------------------------------------
    病毒大小23KB左右,为游戏盗号木马,采用UPX加壳,开机自启动。运行期间监视游戏帐号和密码等信息的输入,发送到指定的URL,导致游戏帐号和密码的泄露。
一、感染环境
  Windows xp,windows 7能感染(其它环境没有测试)
二、感染特征
1、文件行为:

    在%systemroot%\system32下创建:91C7DF6D.dll和91C7DF6D.cfg,其中91C7DF6D.dll为木码盗号DLL,91C7DF6D.cfg为加密的URL内容。解密后为:
    http://www.y0uku1.com/cia/bike.asp
    在%Temp%目录下,创建前缀为live的临时文件。
    删除C:\WINDOWS\system32\VErCLSiD.exe文件。

2、进程行为:
    设置全局钩子,令91C7DF6D.dll注入所有进程。
    结束杀软进程,删除杀软托盘图标和结束游戏进程。

3、注册表行为:
    创建键值:
    hKey = HKEY_LOCAL_MACHINE
    Subkey =”Software\microsoft\windows\currentversion\Explorer\shellexecutehooks”
    Value name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
    hKey = HKEY_CLASSES_ROOT
    Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
    Value date=”91C7DF6D.dll”
    hKey = HKEY_CLASSES_ROOT
    Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
    Value name=”ThreadingModel”
    Value date=”Apartment” 

4、网络行为:
    访问URL:http://www.y0uku1.com/cia/bike.asp

三、执行流程图

四、过程分析
1、创建进程同步事件对象,然后创建新线程

    创建子线程是病毒核心功能,运行结束后,才释放事件对象。

2、创建91C7DF6D.cfg和写入数据
        在字符串"91C7DF6D-AEF5-4136-9252-AF030D7A5931”取出91C7DF6D,加上cfg拼成文件 名91C7DF6D.cfg,调用GetSystemDirectoryA得到系统目录,最后拼接成文件路径。%systemroot%\ststem32\91C7DF6D.cfg
        申请堆空间,加载源文件到堆空间,返回堆指针。如下图

        在源文件offset=9fc4处读出92字节大小的数据。去掉0D 0A得到数据如下:
    2DB2C93C09AD60F3BC9A2C35EDF1D148220000002200000072F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F572F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
        如果91C7DF6D.cfg文件存在,执行下一步;如果不存在在%systemroot%\ststem32\创建91C7DF6D.cfg文件,写入以上数据。

3、创建91C7DF6D.dll文件,然后写入数据
        在字符串"91C7DF6D-AEF5-4136-9252-AF030D7A5931”取出91C7DF6D,加上dll拼成文件 名91C7DF6D.dll,调用GetSystemDirectoryA得到系统目录,最后拼接成文件路径。%systemroot%\system32\91C7DF6D.dll
        申请堆空间,加载源文件到堆空间,返回堆指针。然后在%systemroot%\ststem32\91C7DF6D.dll创建文件,在文件offset=67C0h(脱壳后的)处,读出数据14336B大小数据写入文件。如下图:


4、加载91C7DF6D.dll,然后运行DLL的s200函数。
        调皮LoadLibraryA加载91C7DF6D.dll,然后用GetProcAddress得到S200函数,然后调用它。如下图:

5、修改注册表
    查看
HKEY_CLASSES_ROO\Software\microsoft\windows\currentversion\Explorer\shellexecutehooks\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}是否存在。如不存在,下面创建键值。如下图:

    通过CreateToolhelp32Snapshot,Process32First和Process32Next查找MD5为:AF 9C 01 04 86 7E D2 84 13 89 16 7E 77 5B 83 32 的进程,找到终止它,如下图。MD5的计算通过 CryptAcquireContextA,CryptCreateHash,CryptHashData和CryptGetHashParam等系列函数计算得到。

 删除%systemroot%\system32\verclsid.exe文件,防止自创建CLSID时verclsid.exe认证。
 调用RegOpenKeyEx,RegCreateKeyA和RegSetValueExA等API分别在注册表创建以下值:
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Valve data =”91C7DF6D.dll”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Valve Name=”ThreadingModel”
Valve date=”Apartment”
hKey = HKEY_LOCAL_MACHINE
Subkey = "Software\microsoft\windows\currentversion\Explorer\shellexecutehooks"
Valve Name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”


    设置访问权限为“SeBackupPrivilege”,创建前缀为live_开头的临时文件,调用RegSavaKeyA保存Software\microsoft\windows\currentversion\Explorer\信息。然后设置访问权限为“SeRestorePrivilege”,调用RegRestoreKeyA从临时文件中恢复注册表信息。调用RegFlushKey将修改的注册表信息实际写入磁盘,删除临时文件。重复一次相同操作,确定修改注册表成功。如下图:



6、调用QueryRegKey查看
Software\microsoft\windows\currentversion\Explorer\shellexecutehooks\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}是否已存在。如不存在再次调用LoadLibraryA加载91C7DF6D.dll,运行S200函数。
7、调用GetTickCount查看系统历经时间,如果小于30分钟,继续返回第6步,直到重复三次,每次Sleep 3秒钟。为了确保dll加载运行。
8、退出子线程
9、自删除
    GetModuleFileName和GetShortPathNameA得到源文件的短形式路径,通过GetEnvironmentVariableA得到CMD.exe路径,用cmd.exe运行命令,"/c del [短路径] >> NUL"实现自删除。
91C7DF6D.dll的行为:
10、终止杀软进程
通过GetModuleFileNameA得到寄主路径,最后得到程序名32位MD5值,与下列MD5值对比:
  04D1C083134C2EBECA57A9724B0855D4  (360tray.exe)
  AE33A1F2459A12A09EC75D71D14B5E89  
  3ABD7CD8928FE1F3EB563F43B913CA4B
  B9E9786EAC82378D3A6E05FCC1E15D2C  (smartup.exe)
  D7DB952BB0FA044F2B9A22FEADB37973
  1C085B8E02B137AA4EAFBE38CCF3D199
如果匹配成功,调用TerminateProcess中止它。如下图

    MD5的计算用CryptAcquireContextA,CryptCreateHash等一系列函数。如下图

11、删除杀软托盘图标和进程注入
创建无限循环子线程:
    通过CreateToolhelp32Snapshot创建快照,寻找进程名MD5为下列值的进程。然后把访问权限设为SeDebug特权,通过一套函数FindWindowA,FindWindowExA,GetWindowThreadProcessId和SendMessage等来删除托盘。
    通过GetProcAddress,WriteProcessMemory,CreateRemoteThread等系列函数,把DLL注入到游戏主进程。如下图:

12、设立全局钩子
        调用SetWindowSHookExA设下WH_CBT类型全局钩子,如下图,目的是把自身(91C7DF6D.dll)注入所以进程中去,得以寄生,不易被终止。

13、注册表的修改
创建限循环子线程不断监视注册表:
    首先查找%systemroot%\system32\VErCLSiD.exe,存在的话就删除它,防止验证。用RegCreateKeyEx检测是否存在
HKEY_LOCAL_MACHINE\Software\microsoft\windows\currentversion\Explorer\shellexecutehoos\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}键值。如果不存在,接着创建如下键值(exe主程序一样的做法):
hKey = HKEY_LOCAL_MACHINE
Subkey =“Software\microsoft\windows\currentversion\Explorer\shellexecutehooks”
Value name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value date=”91C7DF6D.dll”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value name=”ThreadingModel”
Value date=”Apartment”

14、查找游戏进程,记录信息然后发送帐号与密码信息。
    查看寄主MD5值是否为:AF9C0104867ED2841389167E775B8332(猜测为游戏进程名MD5值,有谁帮我破解下),如果是就结束该游戏进程。然后通过过程,键盘,鼠标钩子监视输入的游戏帐号与密码。
    然后读取%systemroot%\system32\91C7DF6D.cfg的数据如下:
2DB2C93C09AD60F3BC9A2C35EDF1D148220000002200000072F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F572F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
    分成两段:Key()=2DB2C93C09AD60F3BC9A (共10个字节)
    C()=72F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
    解密过程(如下图):
    设i=1;
    C(i)=Key( i%10 )  Xor  C(i)
    C(i)= C(i)  Xor  37h
    i++继续第2步,直到C()解密结束

最后得到明文:P()=http://www.y0uku1.com/cia/bike.asp

通过调用InternetOpen等API以
Re=&s=&A=&P=&MB=&wwwww=v&H=&PIN=&R=&RG=-1&M=-1&M1=-1&mac=&RG1=-1&Z=:格式发送记录到的信息。
五、手动查杀方法
1、在安全模式下或PE环境里,删除%system32%\system32\91C7DF6D.dll和91C7DF6D.cfg
2、删除键值:
hKey = HKEY_LOCAL_MACHINE
Subkey =“Software\microsoft\windows\currentversion\Explorer\shellexecutehooks”
Value name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value date=”91C7DF6D.dll”
hKey = HKEY_CLASSES_ROOT
Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value name=”ThreadingModel”
Value date=”Apartment”


附件.zip

上传的附件 2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png
11.png
12.png
13.png
14.png
15.png
16.png
17.png
18.png
1.png
附件.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功