使用 DnSpy 很棒,但是确定可执行文件的控制流非常尴尬。有没有人能够就显示控制流图的免费有用应用程序提供建议?
IDA Home 不适用于 .NET 程序集,遗憾的是 Radare2 也不适用于。
希望有人能告诉他们他们在做什么?
使用 DnSpy 很棒,但是确定可执行文件的控制流非常尴尬。有没有人能够就显示控制流图的免费有用应用程序提供建议?
IDA Home 不适用于 .NET 程序集,遗憾的是 Radare2 也不适用于。
希望有人能告诉他们他们在做什么?
所以我认为这将是一个不错的宠物项目,所以我开始构建一个 PoC 工具,它可以为 .NET 程序集中的给定方法生成 CFG。
PoC 用于Mono.Cecil检查二进制文件并以 DOT 语言生成图形,然后可以使用dot工具将其转换为图片并在 IL 级别工作。
一点技术信息。
首先,它通过检查操作码和检查控制流类型来确定领导者——将成为基本块 (BB) 中第一条指令的指令:
Return- 下一个(如果存在)将是领导者。Branch- 分支指令的目的地将是一个领导者Cond_Branch- 分支和下一条指令的目的地将是领导者。同样,我们可以在这些 BB 之间构造边,根据流的类型会有不同的输出边:
Return则不会有输出边缘Branch那么从当前指令的 BB 到分支的目标 BB 将有一个传出边Cond_Branch,则将从当前 BB 到 BB 的目的地Cond_Branch和到下一条指令的 BB 的传出边我们需要做的唯一一件事就是在 DOT 语言中生成一个图形定义。
通过以下方式调用该工具
./cfg.exe Mono.Cecil.dll Mono.Cecil.MetadataBuilder.AddCustomDebugInformations | dot -Tpng -o cfg.png
将为我们生成一个“漂亮”的 CFG 方法AddCustomDebugInformations。

对于一些奇怪的(或正常的)边缘情况,它可能会失败,当然还有很多需要改进的地方,但整体 CFG 是存在的;)
链接到 repo:https : //github.com/pawlos/cfg