我如何清理/简化在运行时生成的字符串?我一直在手动转换字符以尝试解释形成的字符串。

.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


评论

您不能在字符串生成器函数之后放置一个断点吗?

我可以设置一个断点,但我正在尝试简化所有情况下的断点,而不仅仅是一次。

“骇客”的方法可能是在构建完所有字符串之后中断,并在备忘录转储上运行“ strings”命令。

#1 楼

使用IDAPython查找字节字符串

ASERT MindshaRE可解决此问题。不必实际运行并非总是可能的代码。

有效地,该脚本将逐条指令进行操作,以查找将ASCII字符移入内存位置。它很有趣,并使用QT创建了一个交互式表,但是您可以删除该部分,并在要使用的指令上添加注释。

评论


抱歉,添加了说明

– jbh
2014年1月25日,下午3:43

脚本看起来很整洁,但显然在x64上失败。会尝试打补丁:)

– Konrads
15年2月16日在16:46

是的,我注意到该脚本的一件事是它严重依赖于等效字符串。 (它正在寻找“ mov”和“ [e”))因此,它肯定只能在x86上运行。我针对不同的体系结构重新实现了它,但是放错了位置。

– jbh
2015年2月17日在3:59

我开始对其进行修补-使它与x64一起使用是将[e更改为[(e | r)]的问题,但是它假设第一个mov将为mov [rsp],'x' mov [rsp + 138h + var_118],“ x”。返回修补程序...

– Konrads
15年2月17日在17:11

#2 楼

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

但是,如果您想要更自动化的方式,则需要编写IDA脚本或插件。

评论


不要忘记IDA与Bochs的集成;)

– 0xC0000022L♦
13年11月19日在16:14

#3 楼

最终为我工作的是FireEye / Flare的“ stackstrings”插件