/AESJniEncrypt

ndk实现AES加密,key存在native中,再做一层防止被二次打包的签名校验。

Primary LanguageC

AESJniEncrypt

  • ndk实现AES加密
  • 使用JniOnload 隐藏c函数
  • 再做一层防止被二次打包的签名校验
  • key存在符号表中,同时隐藏字符表
  • 使用OLLVM混淆C的代码

集成到自己的项目中,key 请自行修改。

static const uint8_t AES_KEY[]="1234567890abcdef";

keystore文件 校验

1.生成

//再当前目录下
$ mkdir  keystore
$ cd keystore/
$ keytool -genkey -alias client1 -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore ./androidyuan.keystore
输入密钥库口令:weizongwei
再次输入新口令:weizongwei
警告: PKCS12 密钥库不支持其他存储和密钥口令。正在忽略用户指定的-keypass值。
您的名字与姓氏是什么?
  [Unknown]:  weizongwei
您的组织单位名称是什么?
  [Unknown]:  androidyuan.com
您的组织名称是什么?
  [Unknown]:  androidyuan.com
您所在的城市或区域名称是什么?
  [Unknown]:  shanghai
您所在的省/市/自治区名称是什么?
  [Unknown]:  shanghai
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn
CN=weizongwei, OU=androidyuan.com, O=androidyuan.com, L=shanghai, ST=shanghai, C=cn是否正确?
  [否]:  y

//测试 keystore口令是否正确
$ keytool -exportcert -alias androiddebugkey -keystore   "androidyuan.keystore" | openssl sha1 -binary | openssl base64
  输入密钥库口令:  weizongwei
  8GUZG0hBFvUZ1I4kSq/3vowhE7Y=


2.取得当前打包的keystore的hash值

   目前似乎没有好的办法,我只能用java取,取出之后打log,然后写入到C文件中,重新build项目。

集成到自己项目中请先修改keystore hashcode和包名,防止反编译时拿到so文件,进行二次打包使用。

鸣谢

Base64 算法 来自:https://github.com/willemt/pearldb

AES128 算法 来自:https://github.com/kokke/tiny-AES128-C