前不久IDA7.0发布,这次相较之前来说有很多的改动,首先整个IDA是x86 64位架构,而之前却一直是i386 32位,因此插件同样为64位的dylib。不仅这样,SDK上某些接口也发生了改变,导致很多优秀的插件不得不重新改动源码,很多在IDA7上编译也存在问题。下面我将以IDA的官方插件findcrypt2来说明IDA7的插件编译细节。编译IDA插件是个麻烦事,主要在于网上相关的资料很少,唯一的几篇也是年代久远,Makefile里面很多编译参数都有变化,目前来说,没有一个完整的文章来介绍如何在Mac平台下编译IDA插件的指南。希望这篇文章能够对有这需求的人有所帮助。
在Mac上完全可以用xcode来帮助我们编译IDA插件,其实更常见的是用Makefile编译,但原理一样,所以这里就以xcode来介绍。
我们知道IDA的插件的文件格式为dylib动态库,因此在创建xcode项目时在Framework&Libarry中选择Libarry
然后再选择为Dynamic动态库,并导入C++标准库
接下来项目中自动会生成两个文件。暂时不用管,我们把findcrypt2的源码放入该项目,最后如下图所示
这时你的项目中像ida.hpp这类的头文件肯定会提示找不到,还需要进一步设置。
这里我们将设置头文件和库的搜索路径等等。
首先设置目标架构为x86_64
然后设置头文件和库的搜索路径,依据你IDA及sdk路径改成对应路径
经过上面的设置,此时xcode应该能找到头文件了,这时还需要设置连接的静态库
这里连接的库为-lida64,表示我们编译的是解析64位的插件,若要编译解析32位的插件,这里为-lida即可。
最后我们还需要设置编译参数
其中__EA64__在编译64位插件时才有。
__EA64__
这时候build一下,如果一切顺利,应该就不会报错了。
IDA7相以前版本而言,插件的后缀名统一为dylib格式,之前32位为pmc,64位为pmc64。这里将编译好的插件改为findcrypt264.dylib表示为64位插件,则对应的32位插件名为findcryt.dylib
下面测试下效果,我们打开IDA去解析一个含有md4加密的macho文件,运行插件测试能否识别出其中的加密算法。
上图我们可以看到这里成功找到一处md4加密,反汇编窗口中正是md4加密中用到的常量数组。我顺便为插件注册了Ctrl-Alt-z的快捷键,若没有快捷键,可以在插件的导航栏里点击对应的插件即可。
附上该插件,完。
findcrypt264.dylib_for_ida7_made_by_x1a0
3a4K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3&6W2N6%4y4G2k6Y4c8Q4x3X3c8@1k6h3y4Z5i4K6u0W2k6X3q4U0k6h3u0G2L8$3E0Q4x3X3g2U0L8$3#2Q4x3V1j5J5x3o6p5@1i4K6u0r3x3o6g2Q4x3V1k6K6k6i4c8@1K9h3&6Y4i4K6u0V1N6i4m8Q4x3X3c8A6k6r3q4Q4x3X3c8K6k6r3E0Q4x3X3b7$3y4g2)9J5k6r3!0F1i4K6u0V1L8h3q4U0i4K6u0V1L8%4y4Q4x3X3c8^5i4K6u0V1x3e0l9&6i4K6u0W2K9s2c8E0L8l9`.`.
722K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3R3@1j5$3E0Q4x3X3g2G2M7X3N6Q4x3X3g2U0L8W2)9J5c8U0t1H3x3e0c8Q4x3V1j5H3z5g2)9J5c8X3#2S2j5#2)9J5k6r3W2V1j5g2)9J5k6s2m8J5L8#2)9J5k6q4)9J5y4f1f1$3i4K6t1#2z5p5k6Q4x3U0f1&6x3W2)9J5y4f1f1@1i4K6t1#2b7V1u0Q4x3U0g2n7y4W2)9J5y4f1f1%4i4K6t1#2b7V1y4Q4x3U0f1&6y4W2)9J5y4f1f1#2i4K6t1#2z5o6k6Q4x3U0f1&6z5g2)9J5y4f1f1$3i4K6t1#2z5p5y4Q4x3U0f1^5y4#2)9J5y4f1f1#2i4K6t1#2z5p5c8Q4x3U0f1&6y4#2)9J5k6s2j5I4i4K6u0V1x3q4)9J5c8R3`.`.
[培训]科锐逆向工程师培训第53期2025年7月8日开班!