Stringfog Github地址
一款自动对dex/aar/jar文件中的字符串进行加密Android插件工具,正如名字所言,给字符串加上一层雾霭,使人难以窥视其真面目。
- 支持app打包生成的apk加密。
- 支持aar和jar等库文件加密。
- 支持加解密算法的自主扩展。
- 支持配置可选代码加密。
- 完全Gradle自动化集成。
- 不支持InstantRun。
原理
![](https://img.haomeiwen.com/i8669504/e0de9222eecc1506.png)
在编译时,将字节码字符串加密,打到aar、jar中。在运行时,将字符串解密。
混淆
StringFog和混淆完全不冲突,也不需要配置反混淆,实际上StringFog配上混淆效果会更好!
接入步骤
- 在项目的根build.gradle设置:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.github.megatronking.stringfog:gradle-plugin:4.0.1'
classpath 'com.github.megatronking.stringfog:xor:4.0.1'
}
}
2.在接入stringfog的模块下添加配置:
plugins {
id 'stringfog' //引入stringfog插件
}
import com.github.megatronking.stringfog.plugin.kg.RandomKeyGenerator
stringfog {
enable true
// 指定加解密的具体实现类,可以用默认实现的xor库或者aes-cbc库,也可以自己定制实现,记得配置dependencies
implementation 'com.github.megatronking.stringfog.xor.StringFogImpl'
// 指定需加密的代码包路径,可配置多个,未指定将默认全部加密
fogPackages = ["com.xxx.networkmonitor"]
// 可选(3.0版本新增):指定密钥生成器,默认使用长度8的随机密钥(每个字符串均有不同随机密钥),
// 也可以指定一个固定的密钥:HardCodeKeyGenerator("This is a key")
kg new RandomKeyGenerator()
// 可选(4.0版本新增):用于控制字符串加密后在字节码中的存在形式, 默认为base64,
// 也可以使用text或者bytes
mode base64
}
dependencies {
...
// 这里要和上面选用的加解密算法库一致,用于运行时解密。
api 'com.github.megatronking.stringfog:xor:4.0.1'
}
配置好以上,编译后就会自动进行加密,无需在初始化或者调用方法了。
在demo的module中打出aar包,并对aar包进行反编译,进行对比:
原代码:
![](https://img.haomeiwen.com/i8669504/19b82479e39b8b64.png)
字符串加密后的代码:
![](https://img.haomeiwen.com/i8669504/782349d76fe7518f.png)
将原有的明文字符串,转为了StringFog.decrypt(xxxx,xxxxxx)
加解密的字符串明文和暗文会自动生成mapping映射文件,位于outputs/mapping/stringfog.txt。
![](https://img.haomeiwen.com/i8669504/63d1d6c398e0e684.png)
网友评论