Angr—造轮子
from angr import * import claripy #装载一个项目,即进程不加载Lib p = Project("./Your_Process",auto_load_libs=False) #创建一个SimState对象,即程序状态 state=p.factory.entry_state() #创建一个100*8(bit)的符号argv1 argv1 = claripy.BVS("argv1",100*8) #创建一个程序状态参数输入为argv1 initial_state = p.factory.entry_state(args=["./Your_Process",argv1]) #为上面对象创建模拟器 sm=p.factory.simulation_manager(state) #利用explore求解,find为到达,avoid为避免达到 ##step()表示向下执行一个block(42bytes),step()函数产生active状态,表示该分支在执行中; ##run()表示运行到结束,run()函数产生deadended状态,表示分支结束; ##explore()可以对地址进行限制以减少符号执行遍历的路径,产生found状态. res=sm.explore(find=0x4005fb,avoid=[0x400607,0x400599]) #打印找到的结果,found[1]为第二个解 #res.found[0].posix.dumps(0)代表该状态执行路径的所有输入 #res.found[0].posix.dumps(1)代表该状态执行路径的所有输出 print len(res.found) if len(res.found) > 0: print res.found[0].posix.dumps(0)