在逆向分析APP的过程中,经常会遇到native函数调用,有些是可以通过正常的IDA动态调试分析其函数逻辑算法等,但有些函数由于多线程造成调试不便,甚至由于ollvm等混淆造成逆向困难就需要自行调用native函数实现想要的结果。
通过导出函数调用native函数
一般普通的native函数都是有导出函数的,因此只要找到导出函数名即可调用该native函数。
寻找导出函数
首先在java层找到native函数的调用
接下来在so中导出函数中该native函数
编写Android APP
自己写一个带按钮的APP,调用该函数
|
|
模拟原APP调用类调用native函数
|
|
jni配置
将libAes.so及其依赖库libstlport.shared.so放入jni目录,并编写mk文件配置。
Android.mk
|
|
Application.mk
|
|
my_objectname.app
里面写#include
最后将APP安装到手机上运行即可输出调用结果
通过函数地址调用native函数
在逆向过程中还会遇到很多APP动态注册native函数,甚至是将导出函数隐藏的,就无法使用上述的调用方案了,本方案是通过函数地址来调用native函数,理论上只要找得到native函数在so中的地址就可以实现调用。
寻找native函数地址
在java层找到native函数,确定其传入参数类型及个数
kxtmp函数是动态注册函数,现在字符串中搜索函数名,之后通过回溯找到函数注册地址
编写调用so
本方案主要是通过自己编写的so调用native函数所在的so,自己的so名为hookso
|
|
jni配置
Android.mk
|
|
Application.mk
|
|
hookso.cpp
|
|