Skip to content

Angr - Examples

reversing angr

Farklı girdi modelleri (stdin, argv, dosya) için hazır angr kalıpları. Adresleri kendi binary’ne göre değiştir.

  1. Girdi kanalını belirle (stdin/argv/file).

  2. Uygun state fabrikasını kur.

  3. find/avoid veya stdout condition ile explore et.

  4. Solution’ı verify için native binary’ye ver.

import angr,claripy
p=angr.Project('./crackme',auto_load_libs=False)
arg=claripy.BVS('arg',8*16)
st=p.factory.entry_state(args=['./crackme',arg])
for b in arg.chop(8):
st.solver.add(b>=0x20,b<=0x7e)
sm=p.factory.simulation_manager(st)
sm.explore(find=0x400000+0x1234)
print(sm.found[0].solver.eval(arg,cast_to=bytes))
import angr,claripy
p=angr.Project('./crackme',auto_load_libs=False)
data=claripy.BVS('f',8*64)
st=p.factory.entry_state()
fname=angr.SimFile('/tmp/in',content=data,size=64)
st.fs.insert('/tmp/in',fname)
sm=p.factory.simulation_manager(st)
sm.explore(find=0x401234)
print(sm.found[0].solver.eval(data,cast_to=bytes))
import angr
p=angr.Project('./crackme',auto_load_libs=False)
@p.hook(0x401000)
def skip_sleep(state):
state.regs.rip=0x401010
sm=p.factory.simulation_manager()
sm.explore(find=0x401234)
print(sm.found[0].posix.dumps(0))
Terminal window
./crackme "$(python3 solve.py)"
Terminal window
python3 solve.py | ./crackme
[ ] girdi modeli doğru seçildi
[ ] explore bulundu (found>0)
[ ] native verify geçti