0

抱歉这个可能很愚蠢的问题。我是 Angr 的新手,遇到了一个小问题/问题。所以,假设我有一个二进制程序“mybinary”,我在其中输入一些内容,它会执行一些操作并检查它以找到一个标志。(正常的crackme风格。)

但是,程序第一次运行时需要一个字符串 tid 输入。我有 tid,它只是一个 32 位的字母和数字字符串。

因此,要运行它,而不是“./mybinary”,我必须执行“./mybinary 'tid string'”。

在将文件加载到 Angr 项目的上下文中,我该怎么做?

就像,如果我的 angr 代码类似于:

import angr
import claripy

#Whatever variables.

base_addr = #Whatever the base address is.

proj = angr.Project("./mybinary", main_opts={'base_addr': base_addr}) 

#Some code for defining flag characters.

state = proj.factory.full_init_state(
        args=['./mybinary'],
        add_options=angr.options.unicorn,
    stdin=flag,
)

#Some code to create and run simulation with success and failure.

我如何编辑它以使其运行“./mybinary 'tid string'” 而不仅仅是“./mybinary”?

请并感谢您的帮助!

4

1 回答 1

1

以下是您应该如何实例化状态以满足您的需求:

state = proj.factory.entry_state(
    args=['./mybinary', 'the tid string'],
    add_options=angr.options.unicorn,
    stdin=flag,
)

根据文档

如果您在可以接受命令行参数或环境的环境中执行,则可以通过 args 传递参数列表,并通过 env 将环境变量字典传递到entry_statefull_init_state.

此外,您的情况似乎不需要full_init_stateentry_state应该足够了(相同的文档):

.entry_state()构造一个准备在主二进制文件入口点执行的状态。

于 2020-10-20T22:30:44.080 回答