angr速刷
grand前言
速刷一下angr 学习一下较为浅薄层面的angr应用
基础脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import angr import sys def Go(): path_to_binary = "angr2" project = angr.Project(path_to_binary, auto_load_libs=False)#创建实例 initial_state = project.factory.entry_state()#得到程序的入口 simulation = project.factory.simgr(initial_state)#创建仿真模拟器负责管理程序运行的路径 print(project.arch)#输出框架 print(hex(project.entry))#入口 print(project.filename)#路径
def is_successful(initial_state): stdout_output = initial_state.posix.dumps(sys.stdout.fileno())#这里改1也行 获取程序的标准输出 if b'Good Job.' in stdout_output: return True else: return False
def should_abort(initial_state): stdout_output = initial_state.posix.dumps(sys.stdout.fileno()) if b'Try again.' in stdout_output: return True else: return False
simulation.explore(find=is_successful, avoid=should_abort)#这里的参数也可以是Boolean类型 没绷住
if simulation.found:#查询到了正确的路径 solution_state = simulation.found[0] solution = solution_state.posix.dumps(1)#0是标准输入 1标准输出 2标准错误 print(format(solution.decode("utf-8"))) else: raise Exception('Could not find the solution')
if __name__ == "__main__": Go()
|
00_angr_find

简单的修改 套以上脚本即可

01_angr_avoid01_angr_avoid


相较于上面的避免输出 这次选择地址可以更快的梭哈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import angr import sys def Go(): path_to_binary = "01_angr_avoid" project = angr.Project(path_to_binary, auto_load_libs=False)#创建实例 initial_state = project.factory.entry_state()#得到程序的入口 simulation = project.factory.simgr(initial_state)#创建仿真模拟器负责管理程序运行的路径 print(project.arch)#输出框架 print(hex(project.entry))#入口 print(project.filename)#路径
def is_successful(initial_state): stdout_output = initial_state.posix.dumps(sys.stdout.fileno())#这里改1也行 获取程序的标准输出 if b'Good Job.' in stdout_output: return True else: return False
def should_abort(initial_state): stdout_output = initial_state.posix.dumps(sys.stdout.fileno()) if b'Try again.' in stdout_output: return True else: return False
simulation.explore(find=is_successful, avoid=0x80485A8)#这里的参数也可以是Boolean类型 没绷住
if simulation.found:#查询到了正确的路径 solution_state = simulation.found[0] solution = solution_state.posix.dumps(1)#0是标准输入 1标准输出 2标准错误 print(format(solution.decode("utf-8"))) else: raise Exception('Could not find the solution')
if __name__ == "__main__": Go()
|
02_angr_find_condition


基础脚本速通
03_angr_symbolic_registers



无伤大雅 依旧一把梭
04_angr_symbolic_stack

依旧
05_angr_symbolic_memory

06_angr_symbolic_dynamic_memory
