angr系列
00_angr_find
01_angr_avoid
02_angr_find_condition
03_angr_symbolic_registers
04_angr_symbolic_stack
05_angr_symbolic_memory
06_angr_symbolic_dynamic_memory
07_angr_symbolic_file
08_angr_constraints
09_angr_hooks
10_angr_simprocedures
13_angr_static_binary
文章目录
伪代码分析


这里利用函数名字来进行hook操作:
check_symbol='check_equals_ORSDDWXHZURJRBDH'
然后把相应的hook替换函数进行申明:
p.hook_symbol(check_symbol,mySimPro())
实现替换函数:
class mySimPro(angr.SimProcedure):
def run(self,user_input,user_input_length):
angr_bvs=self.state.memory.load(
user_input,
user_input_length
)
desired='ORSDDWXHZURJRBDH'
return claripy.If(
desired==angr_bvs,
claripy.BVV(1,32),
claripy.BVV(0,32)
)
脚本
import angr
import sys
import claripy
def main(argv):
bin_path=argv[1]
p=angr.Project(bin_path)
init_state=p.factory.entry_state()
class mySimPro(angr.SimProcedure):
def run(self,user_input,user_input_length):
angr_bvs=self.state.memory.load(
user_input,
user_input_length
)
desired='ORSDDWXHZURJRBDH'
return claripy.If(
desired==angr_bvs,
claripy.BVV(1,32),
claripy.BVV(0,32)
)
check_symbol='check_equals_ORSDDWXHZURJRBDH'
p.hook_symbol(check_symbol,mySimPro())
sm=p.factory.simgr(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]
password=found_state.posix.dumps(0)
print("Solution:{}".format(password.decode("utf-8")))
else:
raise Exception("Solution not found")
if __name__=='__main__':
main(sys.argv)

MSWKNJNAVTTOZMRY
验证

本文档介绍了如何运用angr库进行动态符号执行。通过hook特定函数`check_symbol`并自定义SimProcedure,实现了根据内存中用户输入与预设字符串比较的条件判断。在模拟执行过程中,利用`simgr`探索找到使得程序输出为'GoodJob.'的输入条件,并最终揭示了密码为'MSWKNJNAVTTOZMRY'。
1966

被折叠的 条评论
为什么被折叠?



