IDA7.7 使用IDAPython搜索指定模式的二进制数据方法
新版的ida弃用了idc.find_binary推荐使用ida_bytes.bin_search方法。
ida_bytes.bin_search需要和ida_bytes.parse_binpat_str配合使用。
ida_bytes.parse_binpat_str的功能类似于对正则表达式进行编译。
ida_bytes.parse_binpat_str官方文档
import ida_bytes
import idaapi
import idc
def PatternSearch(start_address,end_address,pattern_str):
image_base = idaapi.get_imagebase()
pattern = ida_bytes.compiled_binpat_vec_t()
err = ida_bytes.parse_binpat_str(pattern, image_base, pattern_str, 16)
if err:
print(f"Failed to parse pattern:{err}")
return 0
found_address = ida_bytes.bin_search(start_address, end_address, pattern, ida_bytes.BIN_SEARCH_FORWARD)
if found_address != idc.BADADDR:
return found_address
return idc.BADADDR
使用方法:
将以上代码保存为python脚本然后在ida中load,之后在下方命令框中就可以调用方法了。
Python>address=PatternSearch(0x180001000,0x180012000,"e9 39 22 ?? ?? ?? ?? 77")
Python>address
0x180001234