插件IDA_plugin_编写_中文版

plugin-container.exe  时间:2021-04-18  阅读:()

用C/C++编写IDA插件

版权®2005 Steve Mical lefsteve@binarypool .com

用C/C++编写IDA插件

第一章入门

1 . 1为什么会有这本手册?

花了大量时间在IDA SDK中来阅读那些头文件 以及学习别人的插件源代码后我觉得应该有一个更简单的方法来开始IDA插件编写。尽管这些头文件中的注释十分翔实但我发现这样浏览和搜索这些注释有点困难 因为我需要它们时并不想通过大劳动量的搜索。我想我该写这样一本手册来帮助那些希望开始学习插件开发的朋友。因此我决定用一个篇章来介绍如何配置开发环境让您能更快速地入门。

1 .2涵盖的内容

这本手册将引导您开始编写IDA插件首先将介绍SDK然后是介绍在多个平台下配置插件开发环境。您将得到如何使用各种类和结构的经验接下来是介绍一些作用广泛的SDK导出函数。最后我将介绍如何使用IDA API来完成基本的任务例如用循环来分析函数钩挂调试器和操作IDA数据库文件IDB文件 。当您读完后您应该能运用自己的知识来编写您自己的插件希望您能通过社区把您的插件公布出来。

1 .3不包括的内容

尽管IDA的标准版和高级版支持许多其他的平台但我主要关注于x86平台因为我在这平台上面有最多的经验。因此如果您需要全面掌握所有的IDA函数我建议您去看看其它的那些头文件。

这本手册主要介绍的是“只读(read only)”函数而不大介绍其它的函数如添加注释错误校验定义结构等等函数。 SDK资料中的种类很庞大不介绍这些函数是想让手册体积适中。

我开始想介绍netnodes的概念可是因为IDA SDK的结构和类的成员很复杂而且还有很多特殊原因您知道的手册不会包含一切。如果您确实需要这些知识请您写信告诉我可能会在下一个手册版本中来介绍这些如果没别的特殊原因的话。

1 .4前置知识

首先最重要的是您应该掌握如何使用IDA这样您就能够舒服地浏览反汇编代码 以及配置调试器。还有您应该准备C/C++语言的知识最好还有x86汇编语言。在这里 C++是非常重要的因为SDK有相当多的C++代码。如果您对C++不熟悉但很精通C您应该至少理解OOP的概念如类对象方法以及继承。

1 .5居家旅行必备良药

编写、运行IDA插件您需要IDA pro反汇编器4. 8版或4.9版还有IDA SDK 您可以从http://www.datarescue.com处获得但需要IDA授权许可 ,以及一个C/C++编译器象Visual Studio GCC平台 Borland系列或其他的。

1

用C/C++编写IDA插件

请注意 4.9版中所做的一些改变 已经被写进手册了。而且对于

4.9版 SDK是稳定的 4.9版的一些函数将不会再改变也就是说给4.9版写的插件通常是二进制形式也可以在以后的版本中正常工作。

1 .6 C/C++之外的选择

如果您对C也不感冒那么可以看看IDAPython 它是一个函数集用高级语言Python封装了所有C++ API。要获取更多详细资料请去http://d-home.net/idapython。还有一份使用IDApython的手册在http://dkbza.org/idapython_intro.html里面有很多详尽的介绍作者是Ero Carrera。

还有一份介绍使用VB6和C#编写IDA插件的文章请登陆http://www.openrce.org/articles/full_view/13。

1 . 7关于这本手册

如果您有任何问题、建议或您发现一些错误请您告诉我 SteveMicallef邮箱是steve@binarypool.com。如果您真的从手册中读到对您有帮助的内容我仍然会写信感谢您这么做是非常值得的。

因为SDK会不断“长胖” 所以这本手册也会适时的升级。您将从这里http://www.binarypool.com/idapluginwriting/处获得最新版本的手册拷贝。

1 .8致谢

我必须感谢下面列出的朋友他们对本手册提供了审校、鼓励以及反馈下列牛人排名不分顺序

Iifak Guilfanov Pierre Vandevenne  Eric Landuyt VitalyOsipov Sccott Madison Andrew Griffiths Thorsten Schneider和Pedram Amini。

1 .9其他资料

在手册的编写过程中参考了一份关于IDA插件的文档该文档介绍了如何使用4.9版的通用脱壳插件其中包括如何编写这种插件以及如何运行插件。它可以在http://www.datarescue.com/idabase/unpack_pe/unpacking.pdf处被找到。如果您对编写插件很积极您可以去Dataresuce的论坛去寻求帮助(http://www.dataresuce.com/cig-local/ultimatebb.cgi)  当没有官方支持的时候您可以向Datarescue的人或者IDA老手求助他们会乐意帮助您。

另一个非常棒的地方是http://www.openrce.org 在那儿您将不仅仅找到很多逆向工程方面的好文章还有工具插件以及文档。那儿还有牛人在论坛里他们将尽可能帮您解决IDA或者一般的逆向工程问题。

2

用C/C++编写IDA插件

第二章I DA SDK全局组织

IDA是一款非常好的反汇编器而且最近还发布了一个调试器。 IDA单独实现了很多了不起的功能可是有时候您可能需要实现一些IDA并没提供的功能 比如自动化或者做一些特殊的任务。另人欣慰的是发布IDA SDK的Dataresuce公司的那些哥们儿提供了一些接口供您自己扩展IDA的功能。

下面是您能够用IDA SDK编写的四种类型模块插件模块将是本手册的主题

上面的“插件(plug-in)”术语将代替“插件模块(plug-inmodule)”除非有特别说明。

IDA SDK包含了您需要编写IDA插件的所有头文件和库文件。还支持Linux和Win平台下很多的编译器而且还给出了一个插件例子的源代码用来示范一些简单的功能。

不管您是一位逆向工程师、漏洞研究员、病毒分析员或是身兼以上数职 SDK都提供了一个格外强大灵活的平台。您差不多都能用它编写您自己的调试器/反汇编器这当然是另人满意的。下面保守地列出了一些您能够用SDK做的事情

 自动分析和脱壳。

 自动搜索被使用的函数比如 LoadLibrary() , strcpy() 和

您想到的其他函数。

 分析程序数据流寻找您感兴趣的东西。

 二进制文件比对。

 编写一个反编译器。

 还有其他的功能„„

查看别的朋友用IDA SDK编写的插件代码请登陆IDA Palace网站地址是http://home.arcor.de/idapalace/。

3

用C/C++编写IDA插件

2. 1安装方法

很简单的。当您得到了SDK(一般都应该是. zip格式的文件) 解压缩它到您选择的目录。我通常是在IDA的安装目录下建立一个sdk目录把所有的玩意儿都放那儿但这不是很要紧的您也可以按您的想法办。

2.2 目录结构

我将探讨一些关于插件编写的内容 以及讨论它们的实质但不涉及所有SDK的内容。

XX表示32位或者64位这要看您所运行的平台架构。

2.3头文件介绍

在include 目录中的五十多个头文件中我发现很多常用于编写插件的头文件。如果您需要所有头文件中的说明信息可以看看SDK根目录下的readme. txt说明文档或者是头文件中自带的说明。下面这个列表只是简单描述了它们的大致功能更详细的介绍请参阅以后的章节。

用C/C++编写IDA插件

2.4使用SDK

大致来说头文件中的任何您能使用的函数都有一个前缀 ida_export而全局变量则冠以ida_export_data前缀。这点规矩是为了与底层函数(在头文件中也有定义)保持安全距离并且提供了一些封装好的高层函数。您还可以使用任何定义好的类、结构和枚举。

5

用C/C++编写IDA插件

第三章配置一个编译环境

开始编程之路前最好是有一个合适的环境 以使得开发过程简单容易。一般流行的环境都会被介绍如果您不是一般流行环境比如您是ENIAC的忠实用户那么我只能说抱歉了。如果您已经配置好了开发环境请从容地跳到下一章。

3. 1 Windows下使用Visual Studio

这里将用Visual Studio .NET 2003做示范一般也适用于这以后的版本可能也适应以前的版本。

一旦您的Visual Studio在运行请您关闭您可能打开的任何一个工程或方案我们需要一个完全干净的状态。

用C/C++编写IDA插件

3.2 Windows下使用GCC的Dev-C++和MinGW

您可以从http://www.bloodshed.net/dev/devcpp.html获取Dev-C++ GCC和MinGW的一个集合软件包。先安装并设置好现在假设一切都能正常工作。同上启动Dev-C++并确保没有其他的工程文件被打开我们需要一个纯净的状态。

3.3 Linux下使用GCC

Windows下的插件是.plw扩展名 Linux插件有所有不同是以.plx为扩展名。因此在示例中没有GUI IDE所以不再是一步步的配置过程我将只用Makefile来做示范下面的例子中可能并不是一个最纯净的Makefile但它应该能工作。

在这个示例中 IDA安装于/usr/local/idaadv SDK位于sdk子目录。把下面的Makefile放到您插件的源代码目录。

设置SRC为您的插件包含的源代码 以及OBJS为将要被编译的目标文件相同文件名仅仅是换了一个扩展名为.o

7

用C/C++编写IDA插件

SRC=file1.cpp file2.cpp

OBJS=file1.o file2.o

CC=g++

LD=g++

CFLAGS=-D__IDP__ -D__PLUGIN__ -c -D__LINUX__ \

-I/usr/local/idaadv/sdk/include $(SRC)

LDFLAGS=--shared $(OBJS) -L/usr/local/idaadv -lida \

--no-undefined -Wl,--version-script=./plugin. scriptall:

$(CC) $(CFLAGS)

$(LD) $(LDFLAGS) -o myplugin.plxcp myplugin.plx /usr/local/idaadv/plugins

要编译您的插件 make程序将完成这项任务再为您复制插件到IDA plugins目录。

3.4一份插件模板

IDA “钩挂(hooks in)”到您的插件是通过PLUGIN类来实现的而且一般来说是唯一需要被导出的一个对象因而能被IDA使用 。还有您应该通过#include预编译指令来包含一些基本的头文件例如 ida.hpp, idp.hpp和loader.hpp。

下面的模板可以作为您开始学习插件的一个开始。如果您将它粘贴到您的开发环境的一个文件里它应该能编译而且当在IDA里运行它的时候

Edit->Plugins->pluginname,或者直接按下定义的快键 它将在IDA的日志窗口中插入“Hello World”文本。

#include <ida.hpp>

#include <idp.hpp>

#include <loader.hpp>int IDAP_init(void)

{

//在这里做一些校验 以确保您的插件是被用在合适的环境里。

}void IDAP_term(void)

{

//当结束插件时一般您可以在此添加一点任务清理的代码。return;

}

//插件可以从plugins.cfg文件中被传进一个整型参数。

//当按下不同的热键或者菜单时您需要一个插件做不同

//的事情时这非常有用。void IDAP_run(int arg)

{

//插件的实体

8

易速互联月付299元,美国独立服务器促销,加州地区,BGP直连线路,10G防御

易速互联怎么样?易速互联是国人老牌主机商家,至今已经成立9年,商家销售虚拟主机、VPS及独立服务器,目前商家针对美国加州萨克拉门托RH数据中心进行促销,线路采用BGP直连线路,自带10G防御,美国加州地区,100M带宽不限流量,月付299元起,有需要美国不限流量独立服务器的朋友可以看看。点击进入:易速互联官方网站美国独立服务器优惠套餐:RH数据中心位于美国加州、配置丰富性价比高、10G DDOS免...

Sharktech鲨鱼服务器商提供洛杉矶独立服务器促销 不限流量月99美元

Sharktech(鲨鱼服务器商)我们还是比较懂的,有提供独立服务器和高防服务器,而且性价比都还算是不错,而且我们看到有一些主机商的服务器也是走这个商家渠道分销的。这不看到鲨鱼服务器商家洛杉矶独立服务器纷纷促销,不限制流量的独立服务器起步99美元,这个还未曾有过。第一、鲨鱼机房服务器方案洛杉矶机房,默认1Gbps带宽,不限流量,自带5个IPv4,免费60Gbps / 48Mpps DDoS防御。C...

易探云香港云服务器价格多少钱1个月/1年?

易探云怎么样?易探云是目前国内少数优质的香港云服务器服务商家,目前推出多个香港机房的香港云服务器,有新界、九龙、沙田、葵湾等机房,还提供CN2、BGP及CN2三网直连香港云服务器。近年来,许多企业外贸出海会选择香港云服务器来部署自己的外贸网站,使得越来越多的用户会选择易探云作为网站服务提供平台。今天,云服务器网(yuntue.com)小编来谈谈易探云和易探云服务器怎么样?具体香港云服务器多少钱1个...

plugin-container.exe为你推荐
pqqgraph技术参数及要求:经营策略iphoneIOJsios8重庆网通重庆联通网上营业厅手机版netbios端口怎么关闭8909端口!其他端口就不用了windows键是哪个windows 快捷键 大全iphone连不上wifi苹果手机为什么突然连不上家里的wifi?ipad上网为什么我的ipad 显示无法连接到网络x-router设置路由器是我的上网设置是x怎么弄
万网域名查询 根域名服务器 fc2新域名 网站域名备案 淘宝抢红包攻略 2019年感恩节 Vultr 私服服务器 香港机房托管 免费cdn加速 512m 大容量存储 国内php空间 网站在线扫描 四川电信商城 韩国代理ip 美国迈阿密 网站防护 汤博乐 腾讯云平台 更多