【发布时间】:2014-02-02 10:00:10
【问题描述】:
我正在处理本机代码(例如 C/C++)中的源代码控制流混淆。我正在研究一些可以做到这一点的技术以及由此产生的意大利面条代码。
但我们想要评估编译后的文件并将原始文件与等效的混淆文件进行比较。有什么工具可以帮助我们吗?
有一些工具,例如Underestand,可以从源代码中提取CFG,但我们想从.exe 文件中提取CFG。
谢谢。
【问题讨论】:
-
你自己编译吗?在这种情况下,gcov 相关信息可能会有用。
-
是的,我编译它们(原始代码和混淆代码)。我想提取 CFG 并比较它们。
-
请注意,编译程序的 CFG 通常与源代码的 CFG 不同。例如,链接器将用它们的实际实现替换表示库调用的单个节点,这通常形成多个节点。
-
@MSalters 我知道编译程序中的基本块与源代码不同。没关系。我只是在寻找一种工具,它可以收集整个机器代码的分支,从而从中指定基本块。
-
@AliAdl:您将如何为虚拟通话提取 CFG?这是在运行时解决的,并且通常无法确定。控制流混淆的理想选择,在这里非常相关。同样,表驱动异常机制中的异常添加了不可见的代码路径。
标签: c++ reverse-engineering decompiling