angr解题

on under 二进制
1 minute read

0x00 About

1.kali linux安装angr

apt-get install python-dev libffi-dev build-essential virtualenvwrapper
mkvirtualenv angr && pip install angr

2.必读link

1)用法小结

2)api文档

3)进阶文档

0x01 注意

1.获取程序的输出的值的方法为ex.found[0].posix.dumps(1)

2.如果程序不能从开头执行(如:开头损坏),则可用state = p.factory.blank_state(addr=xxx),从开头运行则可用 p.factory.entry_state,更多的state运行方法参考这里

3.目前的理解是find是到哪里停,avoid是不能经过哪,在解题时,avoid可没有,find必需有,但是最好两者都有,这样可减少符号执 行的计算量

4.通过字符串设置find方法:pg.explore(find=lambda s:"it is my secret" ins.posix.dumps(1))

5.claripy的BVS函数可以创建一个指定长度的抽象数据,如下,要注意的是:BVS的第2个参数的大小是位数,不是字节数,claripy的 功能与z3相当

import claripy
a = claripy.BVS("sym_val", 32)
b = claripy.RotateLeft(a, 8)
c = b + 4
s = claripy.Solver()
s.add(c == 0x41424344)
assert s.eval(c, 1)[0] == 0x41424344
assert s.eval(a, 1)[0] == 0x40414243

0x02 解题

0xa 命令行参数

从命令行提供程序参数:

p = angr.Project('./ais3_crackme')
arg1=claripy.BVS('arg1',30*8)
state=p.factory.entry_state(args=[p.filename,arg1])

最后获取命令行参数值:

arg1=ex.found[0].solver.eval(arg1,cast_to = str)

题目地址

解法:

import angr
import claripy
find = 0x400602
avoid = [0x40060e]

p = angr.Project('./ais3_crackme')
arg1 = claripy.BVS('arg1', 30 * 8)
state = p.factory.entry_state(args=[p.filename, arg1])

ex = p.factory.simgr(state)
ex.explore(find=find, avoid=avoid)

arg1 = ex.found[0].solver.eval(arg1, cast_to=str)
print(arg1)

0xb 标准输入

从标准输入中提供程序参数:

state.posix.files[0].read_from(30)
或
for _ in xrange(5):  
    k = state.posix.files[0].read_from(1)
    state.se.add(k!=10)

最后获取标准输入值:

inp = ex.found[0].posix.files[0].all_bytes()  
print ex.found[0].solver.eval(inp,cast_to = str)

题目地址

解法:

import angr
find = (0x8048697,)
avoid = (0x804869e,)

p = angr.Project('./ppp')
state = p.factory.entry_state()
state.posix.files[0].read_from(50)

pg = p.factory.simgr(state, threads=8)
ex = pg.explore(find=find, avoid=avoid)

output = ex.found[0].posix.dumps(1)
print(output)
inp = ex.found[0].posix.files[0].all_bytes()
print ex.found[0].solver.eval(inp, cast_to=str)

0xc 文件输入

从文件中提供程序’参数’

题目地址

解法:

to be continue…

angr, 符号执行
home
github
archive
category