原文链接 d77K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6N6h3&6F1K9h3N6#2i4K6u0W2k6s2u0G2M7s2y4W2j5#2)9J5k6i4S2&6P5W2)9J5c8U0t1H3x3U0m8Q4x3V1j5H3y4q4)9J5c8U0t1&6i4K6u0r3b7h3&6V1M7X3!0A6k6q4)9J5y4f1f1#2i4K6t1#2b7V1y4Q4x3U0g2n7b7g2)9J5y4f1f1^5i4K6t1#2b7U0m8Q4x3U0f1^5x3$3&6S2N6r3W2$3k6g2)9J5y4f1f1#2i4K6t1#2z5o6N6Q4x3U0g2n7c8q4)9J5y4f1f1$3i4K6t1#2z5e0g2Q4x3U0g2n7x3q4)9J5y4f1f1%4i4K6t1#2z5f1q4Q4x3U0f1^5y4q4)9J5y4f1f1@1i4K6t1#2b7U0S2Q4x3U0g2m8y4q4)9J5y4f1f1%4i4K6t1#2b7e0N6Q4x3U0f1^5c8q4)9J5y4f1f1$3i4K6t1#2z5e0k6Q4x3U0g2n7z5g2)9J5y4f1f1$3i4K6t1#2b7U0y4Q4x3U0f1&6y4g2)9J5c8W2)9J5x3$3#2G2M7X3f1`.
在逆向分析APP的过程中,经常会遇到native函数调用,有些是可以通过正常的IDA动态调试分析其函数逻辑算法等,但有些函数由于多线程造成调试不便,甚至由于ollvm等混淆造成逆向困难就需要自行调用native函数实现想要的结果。
一般普通的native函数都是有导出函数的,因此只要找到导出函数名即可调用该native函数。
首先在java层找到native函数的调用
接下来在so中导出函数中该native函数
自己写一个带按钮的APP,调用该函数
模拟原APP调用类调用native函数
将libAes.so及其依赖库libstlport.shared.so放入jni目录,并编写mk文件配置。
里面写#include<jni.h>即可
最后将APP安装到手机上运行即可输出调用结果
在逆向过程中还会遇到很多APP动态注册native函数,甚至是将导出函数隐藏的,就无法使用上述的调用方案了,本方案是通过函数地址来调用native函数,理论上只要找得到native函数在so中的地址就可以实现调用。
在java层找到native函数,确定其传入参数类型及个数
kxtmp函数是动态注册函数,现在字符串中搜索函数名,之后通过回溯找到函数注册地址
本方案主要是通过自己编写的so调用native函数所在的so,自己的so名为hookso
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
总结的很好~
编辑掉~
哈哈哈,是朋友们出来吹捧一下,开玩笑
Night_elf 哈哈哈,是朋友们出来吹捧一下,开玩笑