用例源码以及二进制文件链接:https://github.com/angr/angr-doc/tree/master/examples/CSCI-4968-MBE/challenges
本次用例代码压轴的crackme0x05非常棒,前面比较简单可以跳过去。
crackme0x00a
这个就是一贯的套路了,确定start_addr,find_addr, avoid_addr,然后创建simulation_manager,explore所有满足路径,求解就可以了。
不过,不过啊。这个用例代码比以前要简单多了,它并没跳过scanf函数,所以说angr是可以执行scanf函数的?那以前为什么还有跳过啊?这点把我搞蒙了。
而且它根本不需要创建什么符号变量,也不需要找start_addr,直接利用sm就可以执行。最后输出满足约束的程序输入。
(看来以前的代码是有可以改进的点的,可以将前面几个用例代码也改写为这样的方式,看能够得到正确结果。不过,一道题肯定有多种解法,它给出这么多解决fangs,主要还是为了让大家深入了解各个方法。)
用例源码:
import angr
FIND_ADDR = 0x08048533 # mov dword [esp], str.Congrats_ ; [0x8048654:4]=0x676e6f43 LEA str.Congrats_ ; "Congrats!" @ 0x8048654
AVOID_ADDR