这里使用的开发环境是vs2010,不过几乎所有的设置在早期版本的vs中基本是一致的。启动vs之后关闭其他的项目和解决方案,然后按照下面的流程创作工程即可。
- 执行菜单的File->New->Project… (Ctrl-Shift-N)打开新建工程窗口。
- 展开左侧的Visual C++项目模板分支,然后选择右侧的Win32 Project条目,输入工程名称,然后点击确定。
- 在Win32Application Wizard先到出现之后,点击左侧的Application Settings连接,在设置界面勾选Windows Application选项,然后选择Empty Project,点击完成按钮退出向导。
- 在左侧的解决方案浏览器中,点击源文件,执行添加,新建项添加新的源文件。
- 选择C++文件模板,输入文件名称然后点击添加按钮添加此文件,重复此操作知道添加完所有文件。
- 按照下面的格式修改项目属性。
在左上方的配置下拉框中选择Release;
修改属性->常规,将配置类型修改为动态库DLL,目标文件扩展名修改为.plw
C/C++->常规,附加包含目录添加ida sdk include目录,例如C:\IDA\SDK\Include
C/C++->预处理器,添加__NT__;__IDP__字段到预处理器定义中。
C/C++->代码生成,关闭缓冲区安全检查,将基本运行时检查设为默认,将运行库设置为多线程(MT)
C/C++->高级,将调用约定修改为__stdcall (/Gz)
连接器->常规,将输出文件修改为你的ida插件目录,例如E:\IDA 6.2\plugins
连接器->输入,将ida.lib添加到附加依赖项中。
连接器->调试,生成调试信息设置为否
连接器->命令行添加/EXPORT:PLUGIN
生成事件->后期生成事件,将ida添加到命令行中一边每次生成之后启动加载插件运行(可以不设置)
所有配置完成时候点击保存然后关闭设置窗口,在顶部的配置栏中选择release,即可。
下面就可以开始写代码和进行测试了,这里有一个简单的插件模板,再次基础上完善即可创建一个新的插件:
#include
#include
#include
int IDAP_init(void)
{
// Do checks here to ensure your plug-in is being used within
// an environment it was written for. Return PLUGIN_SKIP if the
// checks fail, otherwise return PLUGIN_KEEP.
return PLUGIN_KEEP;
}
void IDAP_term(void)
{
// Stuff to do when exiting, generally you'd put any sort
// of clean-up jobs here.
return;
}
// The plugin can be passed an integer argument from the plugins.cfg
// file. This can be useful when you want the one plug-in to do
// something different depending on the hot-key pressed or menu
// item selected.
void IDAP_run(int arg)
{
// The "meat" of your plug-in
msg("Hello world By obaby!\n");
msg("This is My first IDA Plugin!\n");
msg("Plugin templete Created by Steve Micallef!\n");
msg("Thx for his Great Works!\n");
return;
}
// There isn't much use for these yet, but I set them anyway.
char IDAP_comment[] = "This is my test plug-in";
char IDAP_help[] = "My plugin";
// The name of the plug-in displayed in the Edit->Plugins menu. It can
// be overridden in the user's plugins.cfg file.
char IDAP_name[] = "My plugin";
// The hot-key the user can use to run your plug-in.
char IDAP_hotkey[] = "Alt-X";
// The all-important exported PLUGIN object
plugin_t PLUGIN =
{
IDP_INTERFACE_VERSION, // IDA version plug-in is written for
0, // Flags (see below)
IDAP_init, // Initialisation function
IDAP_term, // Clean-up function
IDAP_run, // Main plug-in body
IDAP_comment, // Comment �unused
IDAP_help, // As above �unused
IDAP_name, // Plug-in name shown in
// Edit->Plugins menu
IDAP_hotkey // Hot key to run the plug-in
};
最后是一张效果图,至于其他的东西,以后可以继续写点东西。
14 comments
8) 哇塞,太强悍了.
一边学习,一边写点东西。呵呵
那么你有IDA6.2吗,可否共享一下,谢谢。
大哥你这写的跟VS2010 的环境有关系吗
一般来说和环境关系不大。请参考另外一个回复。
我的编程是按照您上面的步骤做的但是,我的一直编译不通过,
“VCMessage”任务意外失败。
System.FormatException: 索引(从零开始)必须大于或等于零,且小于参数列表的大小。
在 System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
等等这些错误,麻烦求解?
这个是和VS的环境配置有关还是要安装IDA pro的插件等?
如果不好配置的话试试我做的这个向导工具吧,http://www.h4ck.org.cn/2012/04/ida-plugin-wizard-for-vs2010/ 。不用那么麻烦每次都要配置这些东西,如果用vs2013的话可以用这个http://www.h4ck.org.cn/2014/08/ida-pro-plugin-wizard-for-vs2013/。 简单方便
您好,请问这个方法适用于IDA6.8吗?或者您有针对于IDA6.8的好的环境配置的方法吗?不胜感激!
更换下sdk就可以了,本质上并没有什么区别
您好,我的IDA pro版本是6.8绿色版,用的sdk也是6.8,编译器用的是vs2015,按着您的图解配置,成功在plugins目录下生成了”test.plw”。但是在运行时,edit-Plugins菜单中看不见自己写的插件,同时vs错误有3个,都是像这样的:”int (*)()” 类型的值不能用于初始化 “int (__stdcall *)()” 类型的实体,位置分别在IDAP_init、IDAP_term、IDAP_run,我感觉是后面的括号问题。
有的插件并不是在ida启动的时候加载的,是在分析文件之后才加载的。尝试分析一个32位应用之后再看看菜单有没有这个选项。
IDA6.8版本以后好像插件都是.dll动态链接库,不再是.plw后缀了,plw后缀的插件不会被加载.
现在用的IDA7.0,好像没有32位的.
按照你文中的配置,预处理定义改成了__X64__;__NT__;__IDP__
lib路径改成\IDASDK70\lib\x64_win_vc_64\ida.lib
使用VS2015编译出来的dll插件,IDA一加载就会报错IDA:Fatal error befor kernel init
求大神帮忙解决下7.0版本插件的配置问题
IDA7.0以后插件格式为.dll动态链接库,不再是.plw后缀.
安装文中配置编译的.dll,IDA一加载就报错
求大佬解决一下
那个太旧了,参考http://www.h4ck.org.cn/2014/08/ida-pro-plugin-wizard-for-vs2013/ 另外一个需要注意的问题是,流传出来的idapro7 存在一些bug, 参考这个 http://www.h4ck.org.cn/2018/01/commentview-plugin-for-idapro7-0/ 推荐使用python进行插件开发。