Android开发之代码混淆

初级混淆 使用proGuard进行代码混淆
1.参考教程:Android开发者指南(9) —— ProGuard
2.混淆模板:Android proguard-rules.pro 混淆模板
3.[Android 代码混淆 选项说明(https://blog.csdn.net/jjwwmlp456/article/details/44977721)
几个可以增加混淆强度的命令:

#将所有类放到跟目录下 -flattenpackagehierarchy#使用唯一的类成员名称 -useuniqueclassmembernames

几个可以增加混淆强度的字典
1.https://github.com/ihbing/AndroidObfuseDictionary
几个使用时需要注意的命令:
1.-assumenosideeffects使用时一定不要加-dontoptimize才起作用
# 移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用 # 记得proguard-android.txt中一定不要加-dontoptimize才起作用 -assumenosideeffects class android.util.Log { public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); }

[注]
1.eclipse只有将项目导出时才会进行混淆
2.1 proguard.config=proguard-project.txt//采用相对路径配置,直接读取项目根目录下proguard-project.txt文件
2.2 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt//采用绝对路径
使用proGuard-GUI进行手动混淆 使用AndResGuard进行资源混淆
参考教程:AndResGuard集成笔记
增加7z压缩
参考教程:Android项目集成AndResGuard资源混淆两种方式
参考教程:https://github.com/shwenzhang/AndResGuard/blob/master/doc/how_to_work.zh-cn.md
注意点 1.如何打开Gradle中的Task任务?
Android开发之代码混淆
文章图片

进阶混淆 使用StringFog对字符串Base64加密
参考教程:https://github.com/MegatronKing/StringFog
将字符串混淆成byte字节码
如下图
Android开发之代码混淆
文章图片

参考教程:https://github.com/ihbing/obfuseSmaliText
高阶混淆 修改proGuard工具的混淆字符
[注]AndroidStudio的自身proGuard混淆工具目录D:\Program Files\Android\Android Studio\gradle\m2repository\net\sf\proguard\proguard-base\D:\Program Files\Android\Android Studio\gradle\m2repository\net\proguard-base\
用无效代码对抗jadx&jd-gui
//添加无效代码,对抗jadx & jd-gui boolean qwerty21345hjdnjd = false; while (qwerty21345hjdnjd) { switch (1) { case 1: while (qwerty21345hjdnjd) { try { Throwable throwable=new Throwable(); Throwable cause = throwable.getCause(); } catch (NullPointerException e) { } finally { } } break; } }

参考 【Android开发之代码混淆】1.Android资源混淆工具
2.proGuard混淆笔记
3.Android代码混淆技术总结(一)
4.apk在线反混淆

    推荐阅读