Как ограничить поиск в программе angr
Скажем, у меня есть программа, которая пытается взломать флаг, как эта в Python, использующая angr:
#!/usr/bin/env python
import angr
import claripy
FLAG_LEN = 15
STDIN_FD = 0
find_addr = 0x001016af
avoid_addr = 0x00100fab
base_addr = 0x00100000
proj = angr.Project("./runnable", main_opts={'base_addr': base_addr})
flag_chars = [claripy.BVS('flag_%d' % i, 8) for i in range(FLAG_LEN)]
flag = claripy.Concat( *flag_chars + [claripy.BVV(b'\n')])
state = proj.factory.full_init_state(
args=['./runnable'],
add_options=angr.options.unicorn,
stdin=flag,
)
simgr = proj.factory.simulation_manager(state)
simgr.explore(find=find_addr, avoid=avoid_addr)
if (len(simgr.found) > 0):
for found in simgr.found:
print(found.posix.dumps(STDIN_FD))
Мои коды в настоящее время ничего не возвращают, но я знаю, что строка имеет длину 16, и я знаю, какие первые 6 символов секретной строки. Как я могу ограничить поиск этой секретной строки чем-то, что начинается с 6 знаков, которые я знаю?