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.
Metodoloji
Section titled “Metodoloji”-
Girdi kanalını belirle (stdin/argv/file).
-
Uygun state fabrikasını kur.
-
find/avoid veya stdout condition ile explore et.
-
Solution’ı verify için native binary’ye ver.
import angr,claripyp=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))File input
Section titled “File input”import angr,claripyp=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))Hook / skip
Section titled “Hook / skip”import angrp=angr.Project('./crackme',auto_load_libs=False)@p.hook(0x401000)def skip_sleep(state): state.regs.rip=0x401010sm=p.factory.simulation_manager()sm.explore(find=0x401234)print(sm.found[0].posix.dumps(0))Verify
Section titled “Verify”./crackme "$(python3 solve.py)"python3 solve.py | ./crackmeChecklist
Section titled “Checklist”[ ] girdi modeli doğru seçildi[ ] explore bulundu (found>0)[ ] native verify geçti