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
posted @ 2024-07-04 09:42  ComputerPlayerJs  阅读(4)  评论(0编辑  收藏  举报