Как добавить строковый ввод в начало программы 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()
создает состояние, готовое к выполнению в точке входа основного двоичного файла.