IDA插件JNI-Helper适配
前言
今天打算把IDA搞得更智能一点,方便我这个懒人后面更快的进行分析工作。俗话说好事多磨,好工具的代码也需要多改才行。JNI_Helper这款插件,能满足我这个懒人自动修改JNI导出函数签名的目的,只是需要python2版本,并且存在代码还存在bug,另外自动化导出java native函数签名的方式也实在麻烦。为了满足我这个懒人刻薄的要求,那就只能自己动手改代码咯。项目地址:https://github.com/yougar0/AndroidReversePublicTools
JNI_Helper.py
这里先说下,我下载的版本是0.1,之所以使用这个版本是因为我看到这个版本的签名导出代码依赖jadx,因此这个版本最适合改造成gui形式的懒人插件。^-^
第一处是python3语法问题。
第二处代码存在判断上的问题,经过本地实验,如果没有加载过jni.h,那么该函数会返回None,因此这里直接返回即可。
第三处修改的地方如果没有加载过头文件,那就直接让IDA加载jni_headers目录下的jni.h文件,省心省事。
第四个是IDA7.4+的适配,这个参考文章最后给出的官方API适配文档。
原来的程序当中存在一处bug,这里需要将变量名改成fname。
最后是新增两处判断,原版程序由于这边没有判断用户点击取消不加载文件的结果,会出现代码异常的弹窗,导致用户体验不好,这里加上判断就不会有这些问题。
jadx函数签名导出插件
为了使逆向的体验更好,效率更高,这里参考jadx官方的插件代码写了一个将JNIHelper集成进去的插件。代码全部来自jni_helper原作者,我这里只是做了插件形式的改造。
首先在MainWindow中新增一个Action调用,然后放到界面上显示。
然后LazyJniAction的代码其实就是JniHelper的代码复制过去的,这个就不说了。
最后界面上就新增了一个插件了。
使用效果
安装使用插件很简单,IDA插件只需要将jni_headers和jni_helper.py都复制到plugins目录下就可以了。
Jadx插件的话,稍微需要注意的是需要自己手动从头编译下修改后的源码才行,麻烦虽麻烦点,但最终效果是很好的,我们在打开apk文件后,只需要点击jni signature导出插件,就可以在apk所在目录下生成一个apk名字_jni_sign.json的jni函数签名文件了。
最后使用ida中的jni_helper插件加载导出的函数签名json文件,就可以一键重命名jni导出函数了。
参考
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!