简单的间谍木马分析
0.前言
此篇笔记记录一下分析实战样本11_1的样本,技术已经过时,只是为了了解一下间谍木马的特征和行为。
1.静态分析
- 由下图可知程序没有加壳是一个控制台程序。
- 查看导入表,可以看到对资源节操作的API,还有一些注册表相关的API
- 使用ResHack查看资源数据, 可以发现一段未经加密的PE数据, 后续会分析这段PE
IDA查看字符串,可以看到GinaDll,Windows的开机密码认证模块一般是由Gina DLL完成的。
2.火绒剑行为检测
查看行为,发现样本在同目录下释放了一个dll,经过对比发现,释放的dll就是资源中的PE数据(为什么),然后对注册表写入dll的路径,并且最后摧毁了自己的进程。
3.IDA分析
3.1 main分析
观察main函数代码, 可以发现程序首先通过
GetModuleFileNameA
获取自身程序的全路径, 在调用401080
后, 然后通过_strrchr
截取\
之前的内容, 与\\msgina32.dll
进行字符串拼接 然后将拼接后的字符串作为参数传入堆栈调用401000
接下来分析401080与401000
3.2 401080分析
可以明显看到资源节数据的操作,然后通过
VirtualAlloc
申请一段内存空间用于存放资源中的PE数据, 在将资源中的数据取出后, 通过一系列文件操作将PE数据保存到xx\msgina32.dll
文件中, xx的路径就是main函数中通过GetModuleFileNameA
取出的当前程序的运行路径。这里有个函数为401299
, 这个函数就是类似printf的打印输出函数,这里我们将这个函数重命名, 防止后面的分析中再次出现 , 可以节省时间。 到这里
401080
这个函数功能已经确定了, 取资源节数据并写入文件 , 文件名为msgina32.dll
, 路径为程序同路径。3.3 401000分析
该函数的参数是释放出的dll文件的全路径,可以看到一系列注册表操作, 函数功能是将dll全路径写入注册表路径为
SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
, 名为GinaDLL
的注册表项。3.4 exe总结
整个exe的功能就是为了持久化安装dll文件:将自身资源中的PE数据写入与自身路径相同, 文件名为
msgina32.dll
的dll文件;将dll文件写入注册表;程序结束。 所以说重要功能应该在dll里面,exe文件只是为了dll文件服务。
4.IDA分析dll
4.1 dllmain分析
将
dll
文件拖入IDA,查看dllmain
函数,首先是DisableThreadLibraryCalls
禁用指定的DLL的DLL_THREAD_ATTACH
和DLL_THREAD_DETACH
通知,这样可以减小某些程序的工作集大小。 通过
GetSystemDirectoryW
获取系统目录, 与\MSGina
拼接后获取正常的GinaDll , 然后通过LoadLibraryW
加载获取dll句柄, 存入全局变量hLibModule
, 然后dllmain函数执行结束根据前面exe的注册表操作可以知道,这是为了替换正常的GinalDll,
4.2 dll导出函数
查看dll导出函数,依次查看导出函数代码, 发现绝大多数导出函数都调用了
10001000
函数, 这个函数很明显用于导出函数的转发。DllRegister
与DllUnregister
也是很简单的函数, 对于注册表值的安装/卸载操作,通过查询百度相关文档信息, 我们知道WlxLoggedOutSAS
是在windows注销时会调用的函数,接下来看看它想在注销时做什么。4.3 WlxLoggedOutSAS分析
观察代码, 样本首先调用10001000进行正常功能的转发, 然后调用edi, 通过回溯寄存器(如何?), 我们知道了edi是正常的
WlxLoggedOutSAS
, 然后样本执行了10001570函数, 观察参数发现一个有趣的字符串UN %s DM %s PW %s OLD %s
, 这种携带占位符的字符串常用于输出, 替换, 拼接等, 接下来我们就需要看看10001570处的函数4.4 10001570分析
首先将传入的参数通过
_vsnwprintf
进行格式化, 然后打开文件msutil32.sys
, 接着格式化时间, 然后调用fwprintf
将数据写入流中, 通过寄存器回溯, 我们可以找到esi来源就是wfopen的返回值, 也就是代表文件msutil32.sys
然后调用
FormatMessageW
转化一些数据, 观察参数大致能猜出来是系统调用时传递的数据. 最后关闭文件,结束程序。4.5 总结
根据分析, 整个dll的作用就是劫持WlxLoggedOutSAS函数, 获取到函数参数后加入一些例如时间戳信息后写入文件
msutil32.sys
, 这也说明这个sys文件并不像它表现出的是个驱动文件, 而是一个简单的日志文件。 由于GinaDll在新系统中已经不再使用, 因此想要复现需要XP或者更旧的系统, 这样在点击注销后, 样本会记录用户的账户密码, 也就是个最简单的间谍木马