1

我有一些二进制文件,每个文件都包含一个函数的指令,(最后可能会多一点)。文件的开头也是函数的起点。

该文件是从 ELF 文件中提取的。平台是 arm64。

那么,如何使用 angr 加载和分析这个文件呢?


目标:

每个函数都有一个“switch case语句”,目标是获取case表达式的所有整数。

示例(C 代码):

void func1(int cmd){
    switch (cmd) {
    case 1:
        xxxx
        break;
    case 10:
        yyyy;
        break;
    }
}

结果:1,10

4

1 回答 1

1

我的建议是在这种情况下不要使用 angr,因为您可以以更简单的方式提取所有情况,例如使用 r2pipe。我为您创建了一个简单的示例,希望对您有所帮助。

C代码

int main(int argc, char* argv[]) {

    switch(argc) {
        case 1:
            break;
        case 2:
            break;
        default:
            break;
    }

}

蟒蛇脚本

import r2pipe

r2 = r2pipe.open("switch")

r2.cmd("aa")

r2.cmdj('s main')
instructions = r2.cmdj('pdfj')

for instruction in instructions['ops']:
    if ( instruction["type"] == "cmp" ):
        print instruction["ptr"]

输出:

r2pipe.cmdj.Error: No JSON object could be decoded
1
2

我不确定在输出的开头我有什么错误消息。

高温高压

于 2017-07-31T09:11:58.967 回答