暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何手工执行IDA插件

青衣十三楼飞花堂 2018-05-02
579

有天因故问了hume一个问题,重新执行eh_parse.dll、eh_parse64.dll,这个动作怎么完成?hume当时的回答是:

这个插件只能用RunPlugin()之类的函数重新执行,"Edit->Plugins"里没有它。但是还得看插件的run函数怎么写的,如果是Hook到一些IDA事件上,就得看能不能想办法触发这些事件,所以得逆向插件看了才能找到办法。

本文介绍如何逆向eh_parse64.dll,找出run函数所在,进而确定手工执行方案。

参看

SDK tryblks.hpp
python\ida_tryblks.py
plugins\eh_parse.dll
plugins\eh_parse64.dll

关于run_plugin(),参看

python\ida_loader.py
    load_and_run_plugin()
    run_plugin()
python\idc.py
    load_and_run_plugin()
python\idc_bc695.py
    RunPlugin()

从未写过C版本的IDA插件。下面只是简单地记录一下我是如何在完全无知的情况下定位eh_parse64.dll的run函数的。

翻了一下SDK,找到:

plugins\hello\hello.cpp

内容很简单,两个函数,一个结构:



看过hello.cpp,假设所有的插件都有一个PLUGIN结构,其第一个4字节成员都是接口版本,就目前的测试环境,该值等于0x000002BC。

用IDA反汇编eh_parse64.dll,在"Hex View-1"中搜索"BC 02",果然只找到一处,那肯定是PLUGIN所在:



注意到该位置已有符号PLUGIN,最后确认这是导出符号,因此没有必要搜"BC 02"。其第2个成员,在loader.hpp中查到:



由于PLUGIN_HIDE置位,所以"Edit->Plugins"里没有它。



尽管init()中确有Hook动作,但从run()的流程判断,可以直接执行:

load_and_run_plugin("eh_parse64",0)

对于熟悉C版IDA插件编写的人来说,前面的都是废话,我就是讲讲一无所知的情况下我是怎么做的

文章转载自青衣十三楼飞花堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论