此前的文章中,曾经提过“angr是一个基于Python开发的二进制程序分析(Binary analysis)框架,可以用于开展动态符号执行(Symbolic Execution)和多种静态分析”。事实上,Symbolic Execution也正是angr的一个代表性功能。本文将使用angr的符号执行功能来解几道具有代表性的CTF练习题(原始题目中的待分析二进制代码参见【1】)。
题目一:find_condition
把程序文件导入到IDA中,按“F5”可以看到其反汇编之后解析出来的伪代码(C-like style code),如下图所示:
程序的逻辑是比较清楚的。比较两个字符串s1和s2,如果它们满足条件,就成功(输出“Good Job.”),否则就失败(输出“Try again.”)。其中,s1是把用户输入的字符串经complex_function函数处理后的结果。也可以考察一下该函数的反汇编结果: