-
-
[原创][原创]小米学安卓逆向一 - NDK开发(1)
-
-
[原创][原创]小米学安卓逆向一 - NDK开发(1)
纯小白一枚,所思皆所写,一点点记录所学。
简单来说,JNI是允许java代码和其他语言进行交互的一种规范,它不是android平台特有,但凡有JVM的地方都支持。

那么JNI的出现背景是什么呢?
于是JNI应运而生。
但是需要注意的是,NDK开发的so不再具有跨平台性,基于不同架构的平台,需要编译不同平台支持的二进制接口ABI(Application Binary Interface)
JNI是不限于平台的,只要运行JVM就可以,而NDK是android工具包,开发的so也不支持全平台。




build生成apk,我们对apk进行提取(一般是将.apk修改为.zip然后unzip进行解压),打开lib目录,会发现有4个不同架构的目录和so文件,我们把其中arm下的so拖入ida,对照项目函数进行分析。



即可看到在native-lib.cpp中的函数。
在C++中,为了支持重载,在对程序进行编译和链接的过程中,会进行"命名粉碎"的过程,demo中有增加了extern "C"和未加的函数,在IDA中能看出来,经过命名粉碎的函数名和代码中出现的就完全不一样,加了extern "C"的函数名和代码中一致。


在调用第三方C/C++类库时,应当注意引用时,加入extern "C",不然会出现"命名粉碎"的情况,有可能会导致找不到调用函数名的情况

在CMakeLists.txt中也要记得添加所要引用库的head文件。

代码详情见附件。
链接: 3ecK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3j5h3&6Q4x3X3g2T1j5h3W2V1N6g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Q4x3V1j5I4k6K6k6T1b7$3u0w2N6@1u0$3f1s2y4t1K9h3b7H3j5%4W2@1g2f1#2I4f1b7`.`. 密码: m1n3
纯小白一枚,所思皆所写,一点点记录所学。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!