使用符号化栈上的值

import angr
import claripy
def main():
path = "./04_angr_symbolic_stack"
project = angr.Project(path, auto_load_libs=False)
start_addr = 0x08048697
initial_state = project.factory.blank_state(addr=start_addr)
initial_state.regs.esp = initial_state.regs.ebp
initial_state.regs.esp -= 0x8
key0 = claripy.BVS('key0', 32)
key1 = claripy.BVS('key1', 32)
initial_state.stack_push(key0)
initial_state.stack_push(key1)
simulation = project.factory.simgr(initial_state)
def is_successful(state: angr.SimState):
output = state.posix.dumps(1)
if b"Good Job." in output:
return True
else:
return False
def should_abort(state: angr.SimState):
output = state.posix.dumps(1)
if b"Try again." in output:
return True
else:
return False
simulation.explore(find=is_successful, avoid=should_abort)
if simulation.found:
for i in simulation.found:
solution_state = i
s0 = solution_state.solver.eval(key0)
s1 = solution_state.solver.eval(key1)
print(s0, s1)
else:
raise Exception("could not find the solution")
if __name__ == '__main__':
main()```