Hex-Rays 和 IDA Python 插件加载顺序

逆向工程 蟒蛇 idapro插件 六线谱
2021-06-16 21:49:04

我制作了一个需要 Hex-Rays 插件的插件(使用 IDA Python)。

根据hexrays_sdk文件夹中的说明,我将我的插件命名hexrays_为以确保它在 Hex-Rays 加载完成后加载。然而,IDA决定提前载入我的插件,因此,它永远不会是能够得到Trueidaapi.init_hexrays_plugin()

我已经尝试以多种方式重命名我的插件,但似乎仍然无法在 Hex-Rays 之后加载插件。

顺便说一句,我认为这个问题可能与我将插件存储在其中%IDAUSR%/plugins而不是%IDADIR%/plugins因为我不想修改%IDADIR%.

是否有任何解决方法可以让插件稍后加载?或者我可以强制 IDA 提前加载 Hex-Rays 吗?

2个回答

加载插件时,IDA 按字母顺序遍历它们,并尝试加载所有插件。加载插件时,加载器会检查插件标志(idaapi.PLUGIN_PROCidaapi.PLUGIN_FIX等)以确定是否应在当前加载插件。如果要加载,init则调用方法。插件可以返回PLUGIN_KEEP以保持加载状态,或PLUGIN_SKIP避免加载。只要插件不在内存中(尚未加载或已卸载),IDA 就会一次又一次地尝试加载它。这就是我的插件加载器的工作方式。

因此,您需要确定的第一件事是标记您的插件idaapi.PLUGIN_PROC,因为这是在 Hex-Rays 加载时(仅当处理器模块处于活动状态时)。希望这会解决它。如果没有 - 您可以使用idaapi.load_plugin('hexrays')显式加载 Hex-Rays 插件。同样,这只能在处理器模块处于活动状态时完成,因此请务必使用PLUGIN_PROC.

def init():
    if not idaapi.init_hexrays_plugin():
        return idaapi.PLUGIN_SKIP