如何清理运行时构建的字符串?

逆向工程 艾达 蟒蛇
2021-06-28 09:55:38

如何清理/简化在运行时构建的字符串?

我已经看到了几次,并认为必须有一些更简单的方法。我一直在手动转换字符以尝试解释正在形成的字符串。

.text:0040166E C6 45 F0 5C   mov     [ebp+pszSubKey+2Ch], '\'
.text:00401672 C6 45 F1 57   mov     [ebp+pszSubKey+2Dh], 'W'
.text:00401676 C6 45 F2 69   mov     [ebp+pszSubKey+2Eh], 'i'
.text:0040167A C6 45 F3 6E   mov     [ebp+pszSubKey+2Fh], 'n'
.text:0040167E C6 45 F4 6C   mov     [ebp+pszSubKey+30h], 'l'
.text:00401682 C6 45 F5 6F   mov     [ebp+pszSubKey+31h], 6Fh
.text:00401686 C6 45 F6 67   mov     [ebp+pszSubKey+32h], 67h
.text:0040168A C6 45 F7 6F   mov     [ebp+pszSubKey+33h], 6Fh
.text:0040168E C6 45 F8 6E   mov     [ebp+pszSubKey+34h], 6Eh
.text:00401692 C6 45 F9 5C   mov     [ebp+pszSubKey+35h], 5Ch
3个回答

使用 IDAPython 查找字节字符串

ASERT MindshaRE 解决了这个问题。无需实际运行并非总是可行的代码。

实际上,该脚本将逐条指令查找 ASCII 字符到内存位置的移动。它变得很花哨,并使用 QT 来创建一个交互式表格,但是您可以删除该部分并让它在使用的指令上添加注释。

您可以使用ida-x86emu来模拟字符串的动态构造。

但是如果你想要更自动化的东西,那么你需要编写一个 IDA 脚本或插件。

最终对我有用的来自 FireEye/Flare 的stackstrings ”插件