Angr学习 03_angr_symbolic_registers
1. IDA
- 还是一如既往
- 但是本题和之前有一点不一样
- 我们看一下get_user_input()
- 这个获取用户输入时要提供三个变量
- 虽然现在angr已经可以处理这样的问题
- 但我们这次仍然用老办法解决
2. 思路
- 跳过get_user_input()这个函数
- 直接从下面开始执行
3. exp
import angr
import claripy
filename = "03_angr_symbolic_registers"
p = angr.Project(filename)
startAddr = 0x08048980
init_state = p.factory.blank_state(addr=startAddr)
pass1 = claripy.BVS('pass1', 32)
pass2 = claripy.BVS('pass2', 32)
pass3 = claripy.BVS('pass3', 32)
init_state.regs.eax = pass1
init_state.regs.ebx = pass2
init_state.regs.edx = pass3
sm = p.factory.simulation_manager(init_state)
def is_good(state):
return b'Good Job' in state.posix.dumps(1)
def is_bad(state):
return b'Try again' in state.posix.dumps(1)
sm.explore(find=is_good, avoid=is_bad)
if sm.found:
found_state = sm.found[0]
passwodr1 = found_state.solver.eval(pass1)
passwodr2 = found_state.solver.eval(pass2)
passwodr3 = found_state.solver.eval(pass3)
print("Solution:",hex(passwodr1), hex(passwodr2), hex(passwodr3))
else:
raise Exception("No solution found!")
4. 执行结果