提高SO库安全性可以采用Android混淆框架编译,详情参见博文 WIN10 x64搭建OLLVM4.0 android NDK 编译环境跨坑指南
本文描述编译SO库时最大限度地隐藏内部符号表,使得IDA pro等反编译工具看到的大部分函数都是一些无意义的名称,从而加大逆向分析难度。
具体做法如下:
- 在build.gradle中添加
cppFlags "-fvisibility=hidden"
参见 -fvisibility=hidden的用法
android {
defaultConfig {
externalNativeBuild {
cmake {
cppFlags "-mllvm -fla -mllvm -sub -mllvm -bcf -mllvm -sobf"
cppFlags "-fvisibility=hidden"
}
}
}
}
或者在 CMakeList.txt 添加:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mllvm -fla -mllvm -sub -mllvm -bcf -mllvm -sobf")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
- 不使用javah工具生成的头文件,而采用
JNI_OnLoad
+jniRegisterNativeMethods
方式注册native接口,例如
java文件:
package com.test.api;
class Api {
public native void test_api1(int a);
public native void test_api2(String a);
public native