无论如何,我可以迭代 IDA-Pro 中的所有 C 级语句吗?

逆向工程 艾达 二元分析 idapro插件 蟒蛇 静态分析
2021-07-07 00:46:52

我正在尝试statement在 IDA-Pro 恢复的汇编程序中迭代所有 C (可能非常粗粒度,这很好)。

假设我只考虑这些陈述:

State :: =
  | if-else cond;
  | loop;
  | assignment;
  | function call
  | return
  | {s1; s2; s3 ...}

经过一些快速搜索,我知道有一些(第三方)插件可以帮助识别一些C控制流结构,我在下面列出了其中的一些:

if-else 条件:不适用

循环:链接1 链接2 LINK3

所以我的问题是:

  1. 有没有可以恢复if/else语句的插件?它看起来比循环更容易,但我找不到一种完善的方法来恢复语句。

  2. 无论如何/api/scripts 是否可以在 IDA-Pro 中迭代 C 语句?还是我必须自己实现?

理想情况下它应该看起来像这样,因为这主要用于源代码分析......(对不起这个伪代码,我只是想澄清一下)

let aux s =
    match s with
    | If e1 b1 b2 -> analyze e1 b1 b2
    | Loop e1 e2 e3 b1 -> analyze e1 e2 e3 b1
    | Assign v1 v2 -> analyze v1 v2 
    | States sl -> List.iter analyze sl
    | ...  in
List.iter aux statement_list
...
1个回答
  1. 有没有可以恢复if/else语句的插件?它看起来比循环更容易,但我找不到一种完善的方法来恢复语句。

是的,Hex-Rays 反编译器可以恢复 if/else 语句。

  1. 无论如何/api/scripts 是否可以在 IDA-Pro 中迭代 C 语句?还是我必须自己实现?

是的,Hex-Rays SDK允许您迭代反编译树中的项目(包括 if-else 语句)。