凌厉星光 发表于 2019-8-2 10:05

游戏盗号木马分析

本帖最后由 凌厉星光 于 2019-8-2 11:05 编辑

一、基本信息
样本来源:未知
样本类型:游戏盗号木马
样本文件和大小:s1.exe(40.0KB)/ 91C7DF6D.dll(44.2 KB)
加壳类型:UPX
样本文件MD5 值:s1.exe      MD5:5488DE3DF644F391CFDA120DEA6126E5
               91C7DF6D.dllMD5:D022CD4BA70A105B81E31AE30D21F979

二、简介
   此程序为盗号木马,开机自启动,母体运行后会释放木马dll文件然后注入到目标进程中,然后捕获游戏界面输入的帐号密码发送到指定的URL,实现盗号功能,由于采用dll注入方式同时母体会被删除,其行为比较隐秘不易发现。

1、文件系统变化
木马释放文件:
C:\WINDOWS\system32\91C7DF6D.cfg
C:\WINDOWS\system32\91C7DF6D.dll
%temp%目录下创建前缀是live的临时文件
木马删除文件:
C:\WINDOWS\system32\VErCLSiD.exe

2、注册表变化
创建键值:
hKey = HKEY_CURRENT_USER
Subkey = "CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32"
Value date=”C:\WINDOWS\system32\91C7DF6D.dll”

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”

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

三、技术分析
【母体分析】
1、创建进程同步事件对象和线程

创建的子线程是病毒核心功能,在线程退出时释放事件对象。
2、创建91C7DF6D.cfg文件并且写入数据
    构造“C:\WINDOWS\system32\91C7DF6D.cfg”字符串,然后创建91C7DF6D.cfg文件,申请堆内存空间,读取母体文件内容写入生成的配置文件中,在源文件offset=9fc4处读出92B大小的数据,定位到最末两字节0D 0A相减指针得到数据大小,去掉0D 0A得到数据如下:
2DB2C93C09AD60F3BC9A2C35EDF1D148220000002200000072F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F572F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
3、创建91C7DF6D.dll文件并且写入数据
   构造“C:\WINDOWS\system32\91C7DF6D.dll”字符串,申请堆内存并把母体文件读入其中,创建91C7DF6D.dll文件并且首先写入offset=67c0处3800大小的数据,接着写入offset=9fc4处90大小的数据,计算如下:
FileEnd = (DWORD)((char *)FileStart + NumberOfBytesRead);
size1 = (DWORD)((char *)FileStart + NumberOfBytesRead - 4);
size2 = (DWORD)((char *)FileStart + NumberOfBytesRead - 8);
CreateNewFile(lpFileNameOfDll, (FileEnd - *(_DWORD *)size1 - 4), *(_DWORD *)size1 - *(_DWORD *)size2 - 8);//第一部分内容
CreateNewFile(lpFileNameOfDll, (FileEnd - *(_DWORD *)size2 - 8), *(_DWORD *)size2 + 4);//第二部分内容
如下图:

4、加载91C7DF6D.dll并且调用s200函数
   调用LoadLibrary函数获得dll文件句柄,然后调用GetProcAddress函数获得s200函数地址,最后调用此函数。如下图:

5、查找指定注册表键值并且结束指定进程
   检索HKLM\Software\microsoft\windows\currentversion\Explorer\ShellExecuteHooks\键下
Value name={91C7DF6D-AEF5-4136-9252-AF030D7A5931}的键是否存在,如不存在,下面创建键值。如下图:

通过CreateToolhelp32Snapshot,Process32First和Process32Next查找哈希值为:AF9C01 04867ED2841389167E775B8332的进程,找到终止它,如下图。哈希值的计算通过 CryptAcquireContextA,CryptCreateHash,CryptHashData和CryptGetHashParam等系列函数计算得到。

6、删除文件和创建注册表键值
删除文件C:\WINDOWS\system32\VErCLSiD.exe,防止自创建CLSID时verclsid.exe认证。创建键值:
1)
HKCR\CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32
Valve Name=””
Valve data= “C:\WINDOWS\system32\91C7DF6D.dll”
Valve Name=”ThreadingModel”
Valve data=”Apartment”
2)
HKLM\Software\microsoft\windows\currentversion\Explorer\ShellExecuteHooks\SOFTWARE
Valve Name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
Valve data=“”。
设置访问权限为“SeBackupPrivilege”,创建前缀为live_开头的临时文件,调用RegSavaKeyA保存Software\microsoft\windows\currentversion\Explorer\信息。然后设置访问权限为“SeRestorePrivilege”,调用RegRestoreKeyA从临时文件中恢复注册表信息。调用RegFlushKey将修改的注册表信息实际写入磁盘,删除临时文件。重复一次相同操作,确定修改注册表成功。如下图:


7、线程监视注册表
   调用QueryRegKey查看HKLM\Software\microsoft\windows\currentversion\Explorer\
ShellExecuteHooks   Value name={91C7DF6D-AEF5-4136-9252-AF030D7A5931}是否已存在,如不存在再次调用LoadLibraryA加载91C7DF6D.dll,运行S200函数。
生成计数器count=0,当count大于等于3退出线程;调用GetTickCount查看系统历经时间,如果小于30分钟,继续返回第6步,直到count等于3,每次Sleep 3秒钟。为了确保dll加载运行。如下图:


8、退出线程和自删除
   调用ExitThread(0)退出子线程;构造“C:\WINDOWS\system32\cmd.exe /c del [程序短路径] >>NULL”字符串 ,使用ShellExecuteA函数删除母体。其中命令如下:"C:\WINDOWS\system32\cmd.exe /c del C:\DOCUME~1\ADMINI~1\Desktop\s1.exe >> NUL"。如下图:








【91C7DF6D.dll分析】
1、结束特定MD5的程序路径(杀软进程)
   调用 GetModuleFileNameA函数获得宿主进程路径,然后把得到的路径字母转换成小写,去掉路径盘符后计算MD5,跟下列MD5进行比较:
5AC71A9F43720CA7377C7EC543FBFFFA
04D1C083134C2EBECA57A9724B0855D4(360tray.exe)
AE33A1F2459A12A09EC75D71D14B5E89
3ABD7CD8928FE1F3EB563F43B913CA4B
B9E9786EAC82378D3A6E05FCC1E15D2C(smartup.exe)
D7DB952BB0FA044F2B9A22FEADB37973
1C085B8E02B137AA4EAFBE38CCF3D199
找到就调用GetCurrentProcessId、OpenProcess和TerminateProcess函数结束掉这个进程。如下图:

2、判断是否是指定进程MD5
   计算宿主进程路径MD5,与CDEO98CEF5FDE1E2EAC52C0F93362B79比较,如果是调用s200函数。
3、s200函数分析
   1)提权并创建两个线程
       程序提权为SeDebugPrivilege,创建线程1和线程2,线程1注册为无限循环线程如下:


   2)线程1 删除杀软托盘图标和进程注入
      通过CreateToolhelp32Snapshot创建快照,寻找进程名MD5为上面列举值的进程。然后把访问权限设为SeDebug特权,通过一套函数FindWindowA,FindWindowExA,GetWindowThreadProcessId和SendMessage等来删除托盘。
      通过GetProcAddress,WriteProcessMemory,CreateRemoteThread等系列函数,把DLL注入到进程MD5是AF9C0104867ED2841389167E775B8332(应该是游戏)。如下图:

3)线程2创建全局钩子和监视注册表与文件
调用SetWindowSHookExA设下WH_CBT类型全局钩子,如下图,目的是把自身(91C7DF6D.dll)注入所有进程中去,得以寄生,不易被终止。

然后查找%systemroot%\system32\VErCLSiD.exe存在的话就删除它。用RegCreateKeyEx检测是否存在HKEY_LOCAL_MACHINE\Software\microsoft\windows\currentversion\
Explorer\shellexecutehoos\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}键值。如果不存在,接着创建如下键值(exe主程序一样的做法):
a)
HKCR\CLsID\{91C7DF6D-AEF5-4136-9252-AF030D7A5931}\InprocServer32
Valve Name=””
Valve data= “C:\WINDOWS\system32\91C7DF6D.dll”
Valve Name=”ThreadingModel”
Valve data=”Apartment”
b)
HKLM\Software\microsoft\windows\currentversion\Explorer\ShellExecuteHooks\SOFTWARE
Valve Name=”{91C7DF6D-AEF5-4136-9252-AF030D7A5931}”
Valve data=“”。
4.查找游戏进程,记录信息然后发送帐号与密码信息。
      查看寄主MD5值是否为:AF9C0104867ED2841389167E775B8332(应该为游戏进程名MD5值),如是就结束该游戏进程。然后通过过程、键盘和鼠标钩子监视输入的游戏帐号与密码。
      然后读取%systemroot%\system32\91C7DF6D.cfg的数据如下:
2DB2C93C09AD60F3BC9A2C35EDF1D148220000002200000072F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F572F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
分成两段:Key()=2DB2C93C09AD60F3BC9A 共10个字节
C()=72F18A7B04B578B3FCDA357BEAB38D0A2BAB9D6453B534ADEA82796BB1A3C81E69F5
解密过程:
1)      设i=1;
2)      C(i)=Key( i%10 )XorC(i)
      C(i)= C(i)Xor37h
3)      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=:格式发送记录到的信息。如下两图。





四、手动查杀方法
在安全模式下或PE环境里,删除%system32%\system32\91C7DF6D.dll和91C7DF6D.cfg
删除键值:
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”

sber 发表于 2021-1-19 23:09

非和谐之物 发表于 2019-10-21 17:39
事实上现在的验证机制都是手机或者令牌等,光靠账号密码解决不了太多。

有强迫验证机制,修改安全中心登录验证即可,表示网络真神奇。

ahov 发表于 2022-2-27 11:53

根据病毒C&C服务器(http://www.y0uku1.com/cia/bike.asp)查下来貌似是个老毒了,有样本吗

战言灬永不败 发表于 2019-8-2 18:15

真·大佬,支持一下

RSASS 发表于 2019-8-2 19:18

学到了,感谢指导

跌落的尘埃 发表于 2019-8-2 20:00

谢谢科普

flowtcw 发表于 2019-8-2 20:25

感谢分享!

弦歌知雅意c 发表于 2019-8-3 07:08

感谢大佬科普

xiaofengzi 发表于 2019-8-5 14:02

学习了,感谢楼主分享

奶狗爱阔耐 发表于 2019-8-6 16:00

大佬膜拜,厉害了

yudetao 发表于 2019-8-6 16:53

大佬,这个的防范机制怎么搞

xukang1119 发表于 2019-8-10 17:03

支持一下
页: [1] 2 3 4
查看完整版本: 游戏盗号木马分析