char * key = "NMTIzNDU2Nzg5MGFiY2RlZg";//这里是key被做过处理存储在这里的,实际上真实的key是:"1234567890abcdef"
a.先配置local.properties中ndk.dir 要求使用ndk版本必须11-13b,新版本ndk没有测试过,或许不能编译通过。
b.集成到项目中请修改类名方法名,不要暴露加密算法,自行修改key存储到代码里的方案.
c.生成和修改签名.
c.1.生成
//再当前目录下
$ mkdir keystore
$ cd keystore/
$ keytool -genkey -alias client1 -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore ./androidyuan.keystore
...
...
...
c.2.取得当前keystore的hash值,并修改native代码中的包名和hash
目前似乎没有好的办法,我只能用java取,**getSignature(Context context)**打log取出之后,然后写入到C文件中,重新build项目。
集成到自己项目中请先修改keystore hashcode和包名,防止反编译时拿到so文件,进行二次打包使用。
Base64 算法 来自:https://github.com/willemt/pearldb
AES128 算法 来自:https://github.com/kokke/tiny-AES128-C
Native代码混淆器:obfuscation-o-llvm-ndk
https://github.com/larry19840909
https://github.com/baoyongzhang

对比: 混淆后的so是混淆前的三倍大小。
因为需要做签名校验,所以无法提供jcenter依赖了,望见谅!!
不管代码安全性多高,我依旧反对key存到代码里。
想要编译出混淆过native代码的so需要修改aesjni/build.gradle文件中的externalNativeBuild,并配置NDK下的Obfuscator-LLVM。
这是我的NDK配置混淆器教程:Obfuscator-LLVM-4.0-BUILD-NDK
有问题及时提:new issues
$ claude mcp add AESJniEncrypt \
-- python -m otcore.mcp_server <graph>