Как добавить строковый ввод в начало программы Angr?

Извините за возможно-нубический вопрос. Я новичок в 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 'the tid string'" вместо просто "./mybinary"?

Пожалуйста, и спасибо за помощь!

1 ответ

Вот как вы должны создать экземпляр состояния в соответствии со своими потребностями:

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

Согласно документации:

Если вы выполняете в среде, которая может принимать аргументы командной строки или среду, вы можете передать список аргументов через args и словарь переменных среды через env в entry_state и full_init_state.

Кроме того, не похоже, что вам нужно full_init_state в твоем случае; entry_stateдолжно хватить (та же документация):

.entry_state() создает состояние, готовое к выполнению в точке входа основного двоичного файла.

Другие вопросы по тегам