安全技术 · 2021年9月29日

如何提取LokiBot的Shellcode

使用 LokiBot 的一个在野样本进行分析。

OLEDUMP

使用 oledump 工具可以看到 EncryptedPackage内有很多数据:

在这种情况下,一般意味着工作簿中一个或多个 Sheet 被加密锁定保护。

可以使用 msoffcrypto-crack.py处理该文档:

我们可以使用 msoffcrypto-crack.py 破解密码并新建一个没有密码保护的同名文件:

也可以直接提取内容通过管道传递给 oledump.py。但在其中并未发现宏代码,而是发现了 eQUaTiON naTIvE:

将对象的 eQUaTiON naTIvE部分转存到另一个文件中,以便可以对其进行处理:

可以使用 XORSearch.exe在二进制文件中搜索 32 位 Shellcode 各种签名。可以看到在两处匹配到了 GetIP:

scDbg.exe

接着使用 Shellcode 模拟器 scDbg.exe 加载转存的二进制文件,并填入偏移位置以查看是否出现某种解码的 Shellcode:

深入查看转存的 oledump.unpack 文件的 402438 处,如下所示。使用工具 cut-bytes.py查看 oledump.unpack 可以发现字符串如 LoadLibraryWExpandEnvironmentStringsWAPPDATA\vbc.exehttp://frndgreen等:

再次使用 scDbg.exe 剪切必要的部分:

使用 scDbg.exe 直接处理 oledump-cut.unpack 会遇到问题,除了 ExpandEnvironmentStringsW 什么都发现不了:

文章阐述了如何处理该问题。事实证明,scDbg.exe 不会 Hook 函数 ExpandEnvironmentStringsW,但是会 Hook 函数 ExpandEnvironmentStringsA。可以尝试使用 ExpandEnvironmentStringsA代替 ExpandEnvironmentStringsW,在保存更改后再使用 scDbg.exe 运行:

另一个选择是直接通过命令行覆写该字符。通过查看上面的十六进制,可以发现需要修改的位置在 0x77 处,可以用如下方式将其添加到 scDbg.exe 的起始点

这样我们就得到了很清晰的 ShellCode 内容。

参考来源

ClickAllTheThings