插件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

RAKsmart:美国圣何塞服务器限量秒杀$30/月起;美国/韩国/日本站群服务器每月189美元起

RAKsmart怎么样?RAKsmart是一家由华人运营的国外主机商,提供的产品包括独立服务器租用和VPS等,可选数据中心包括美国加州圣何塞、洛杉矶、中国香港、韩国、日本、荷兰等国家和地区数据中心(部分自营),支持使用PayPal、支付宝等付款方式,网站可选中文网页,提供中文客服支持。本月商家继续提供每日限量秒杀服务器月付30.62美元起,除了常规服务器外,商家美国/韩国/日本站群服务器、1-10...

GreenCloudVPS$20/年,新加坡/美国/荷兰vps/1核/1GB/30GB,NVMe/1TB流量/10Gbps端口/KVM

greencloudvps怎么样?greencloudvps是一家国外主机商,VPS数据中心多,之前已经介绍过多次了。现在有几款10Gbps带宽的特价KVM VPS,Ryzen 3950x处理器,NVMe硬盘,性价比高。支持Paypal、支付宝、微信付款。GreenCloudVPS:新加坡/美国/荷兰vps,1核@Ryzen 3950x/1GB内存/30GB NVMe空间/1TB流量/10Gbps...

Hostodo(年付$34.99), 8TB月流量 3个机房可选

Hostodo 算是比较小众的海外主机商,这次九月份开学季有提供促销活动。不过如果我们有熟悉的朋友应该知道,这个服务商家也是比较时间久的,而且商家推进活动比较稳,每个月都有部分活动。目前有提供机房可选斯波坎、拉斯维加斯和迈阿密。从机房的地理位置和实际的速度,中文业务速度应该不是优化直连的,但是有需要海外业务的话一般有人选择。以前一直也持有他们家的年付12美元的机器,后来用不到就取消未续约。第一、开...

plugin-container.exe为你推荐
中國信託商業銀行计划ipad设备ipad支持ipad深圳市富满电子集团股份有限公司ipad如何上网如何用手机流量在IPAD上上网win7telnet怎样在win7下打开telnet 命令google中国地图谷歌中国地图用的是什么投影,什么坐标系360chrome使用360急速浏览器,360chrome进程结束不了micromediamacromedia FreeHand MX是干什么用的?
vps是什么 景安vps 电信测速器 l5520 512av iis安装教程 阿里云代金券 云主机51web 建站代码 网站被封 小米数据库 广州服务器 免费测手机号 搜索引擎提交入口 常州联通宽带 腾讯总部在哪 永久免费空间 hostease umax 数据湾 更多