学习如何优化angr脚本,题目defcamp_r100
指定入口地址
这种方法可以避免angr反复执行程序初始化操作,让程序从main开始运行
1 | state=p.factory.blank_state(addr=0x4007E8) |
改写库函数
载入程序时,阻止angr自动载入依赖的库函数
1 | p = angr.Project("r100",auto_load_libs=False) |
auto_load_libs默认为True,但angr对libc库做了优化,不需要再加载。
输出函数对算法的分析没有影响,可以让其直接返回。
1 | p.hook_symbol('printf',angr.SIM_PROCEDURES['stubs']['ReturnUnconstrained'](),replace=True) |
hook掉printf使之返回[‘stubs’][‘ReturnUnconstrained’](一个无约束的符号)
本题中,输入的flag长度为12,可以直接hook掉fgets函数在应该指向的内存地址放置12字节的输入。
1 | class my_fgets(angr.SimProcedure): |