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)

猜你喜欢

转载自www.cnblogs.com/0xHack/p/11588110.html