用例源码以及二进制文件链接:https://github.com/angr/angr-doc/tree/master/examples/codegate_2017-angrybird
这个二进制文件执行起来没反应,给参数也不可以。看了用例源码,才知道这个二进制文件很怪,加了“anti-run instructions”(嗯,反运行指令)。除非更改二进制文件,删除掉反运行指令或直接跳转到正确代码块才可以。
有了angr,我们就不用这么纠结了,直接查看字符串,确定有效输入和成功点,符号执行,然后求解就可以了。
还是先是IDA静态分析,识别一下数据位置和成功输出点。
结果发现main函数,简直有毒:
从main函数起始处分析:
1.首先构造一个GOT表,对应四个函数。
mov [rbp+var_70], offset off_606018
mov [rbp+var_68], offset off_606020
mov [rbp+var_60], offset off_606028
mov [rbp+var_58], offset off_606038
在后面的计算中有用到这四个函数。
2.输出 you should return 21 not 1 :( ;
3.栈检查;
4.和字符串hello比较;5.从标准输入接收数据,并将数据