使用 angr 对 aarch64 二进制文件逆向工程命令行参数

逆向工程 愤怒 aarch64
2021-07-02 04:57:11

我正在尝试使用 angr 对 aarch64 二进制文件进行逆向工程,以找到所需的命令行参数以获得所需的结果。从二进制文件中,我能够提取所需的参数长度。我按照 angr 中前面的示例以字节为单位提取解决方案。每当我将结果限制为仅可打印字符时,angr 不会给出任何结果,但在删除约束后 angr 为该问题提供了一种可能的解决方案。angr的结果如下:

\xc7_\xb0\xb1>)9\x9f\x00\x82+\xe2ms\x90\x85\xbd\xdd\xebqyv1\x86\x82q]\xe9i\xc3\xed(\x1c\xdd\xfd\xf0\x9

根据我的理解,这并不意味着什么,也不是想要的答案。如果我遗漏了什么,请告诉我。下面是我正在使用的代码:

def get_possible_flags():
p = angr.Project("test", load_options={'main_opts': {'arch': 'aarch64'}})
key_bytes = [claripy.BVS("byte_%d" % i, 8) for i in range(39)]
arg1 = claripy.Concat(*key_bytes)
initial_state = p.factory.entry_state(args=["test", arg1], add_options={"BYPASS_UNSUPPORTED_SYSCALL"})
sm = p.factory.simulation_manager(initial_state)
sm.explore(find=lambda s: b"correct" in s.posix.dumps(1),avoid=lambda s: b"wrong" in s.posix.dumps(1))
s = sm.found[0]
print("Found.........................")
print(s.posix.dumps(1))
possible_values = [ s.solver.eval_upto(arg1, 100, cast_to=bytes)]
possibilities = tuple(itertools.product(*possible_values))
return possibilities
0个回答
没有发现任何回复~