学习宙斯 2.X

逆向工程 拆卸 视窗 ollydbg 恶意软件
2021-06-23 22:06:29

我正在对 Zeus 2.x 进行一些研究,试图了解它的工作原理。通过使用此代码我已经构建了自己的构建器来在我的测试环境中工作。

知道我想做一件非常具体的事情,那就是从内存中提取 webinjects 配置。我做的第一个实验是附加到 IExplorer 并监视对我知道 Zeus 挂钩的函数的调用,例如HttpSendRequest*. 我期待在逐步执行这些执行时的某个时候,我会看到注入配置加载到内存中。我尝试在调用此函数时自动设置断点并使用 OllyDbg 的 Memory Watch 插件,该插件会转储遇到的每个字符串。

所以现在我想精确定位并理解我应该在哪里查看内存中的解密配置。

到目前为止我的假设:

  • 我看不到任何奇怪的东西,因为HttpSendRequestX我设置断点函数实际上是原始的,与 Wininet 没有变化;
  • 转储机器的内存并离线分析它是不够的,因为保存 webinjects (BinStorage) 的结构在需要时被加载到内存中,然后被丢弃 (free'd)

在这一点上,我正在考虑监视VirtualAlloc对那些新分配区域的内存写入的调用并放置一个断点(在某些时候,Zeus 必须将加密的配置放在那里,然后对其进行解密)。

但这仍然是一个远景。有任何想法吗?此外,我通过附加在 上来完成大部分工作IExplore.exe,我应该explorer.exe改为吗?

任何提示表示赞赏!

1个回答

回答我自己的问题以供进一步参考:

Zeus 和许多其他支持 MiTB 的木马使用 API 挂钩作为首选方法,在网页被受害者呈现之前将恶意代码注入到网页中。API hooking 有点像对系统调用进行 MiTM,机器人拦截调用,取得所有权和控制权,执行一些恶意操作,然后将控制权返回给原始函数。就像是:

电话network_function

JMP XYZ ----> JMPs to malicious code 
..                |
..                |
...           <---- returns to the original function

因此,在这种情况下,为了提取网络注入,最好的办法是了解木马的逻辑。也就是说,当用户在浏览器中打开一个 URL 后,该 URL 将与包含要注入哪些 URL 的配置的列表进行匹配。这必将对Wininet函数,如执行HttpSendRequestHttpOpenRequest等等。如果我们在主要的过程,函数断点IExplore.exe(在被感染的计算机),我们将看到第一个指令是JMP我们已经讨论过的指令。如果我们继续进入,我们将使用结构 BinStorage 和其他结构访问实际指令,所有这些都与 Zeus 相关。由于仍然有很多代码需要通过,并且感兴趣的是检索 webinjects,一种方法是监视解密/解码指令(Zeus 的配置是加密存储的;只有当我们监视负责此的指令时才有意义操作将引导我们到实际的解密内容)。

在这种情况下搜索字节序列

 MOV ANY, ANY
 XOR ANY, ANY
 INC EAX
 DEC ESI

如果我们在最后一条指令之后断点,然后检查MOV/XOR操作中目标操作数指向的内存地址的内容,我们很可能会找到解密的有效负载(即我们的动态配置部分)。