我有一个二进制文件,它 scanfs 然后做一些检查并返回 FAIL 或 SUCCESS,其中有多个输入的 SUCCESS。虽然只有一个输入只有可打印的字符。如何限制 angr 仅使用输入到 scanf 中的可打印字符?
import angr
def main():
proj = angr.Project('a.out')
init_state = proj.factory.entry_state()
simulation = proj.factory.simgr(init_state)
simulation.explore(find=lambda s: b"SUCCESS\n" in s.posix.dumps(1))
for solution in simulation.found:
print(solution.posix.dumps(0), solution.posix.dumps(1))
if __name__ == '__main__':
main()
这给了我一个包含很多不可打印的 \xDD 的输出,其中 DD 是一个十六进制数。我可以限制 angr 在探索时只使用可打印的字符吗?或者如何防止 angr 在找到一种解决方案以获取 SUCCESS 消息后停止。目前虽然有多种解决方案,但它只能找到一种。