混淆用于让apk被反编译后获取的代码难理解,加固用于让apk难于被反编译。两种操作都是对项目的安全措施,两个操作是不冲突的,可以选择其一,也可以两个操作都做。
混淆:
针对项目代码,代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无意义的名字,使得阅读的人无法通过名称猜测其用途,增大反编译者的理解难度。
虽然代码混淆可以提高反编译的门槛,但是对开发者本身也增大了调试除错的难度。开发人员通常需要保留原始未混淆代码用于调试。
操作时机:项目打包时
操作方法:Android Studio中找到你的项目module的build.gradle,将minifyEnabled设置为true
加固: 针对apk,加固是多维度的安全防护方案,包括反破解、反逆向、防篡改等,可以防止应用被各类常见破解工具逆向,安全性要远大于单纯的代码混淆。 操作时机:项目打包成的apk文件
操作方法:使用360加固或者梆梆助手、 key.store文件取Android Studio下生成的 此加固工具还可以设置多渠道打包标识
反编译工具:
三大神器:apktool 、dex2jar-2.0、jd-gui
一、apktool篇
1、apktool:在文件目录下敲cmd,进入控制台,然后输入 apktool d XXX.APK (要反编译的apk)
2、会在目录下生成对应apk的文件目录
3、此目录下就可以对反编译的文件修改
可以修改图片和页面布局、通过 AndroidManifest.xml文件找到对应的activity入口
4、将包的内容修改为自己定义的后,重新打包生成新的apk
输入命令:apktool b [ 修改后的文件夹 ] -o [ 输出文件名 ]
以上 就通过反编译,修改得出一个新包
二、dex2jar-2.0篇
此工具可以将apk解析为jar包
1、将需要反编译的apk后缀修改为zip,然后解压
2、将解压后的文件夹,找到classes.dex文件。 在此工具目录下运行 d2j-dex2jar.bat classes.dex 得到classes-dex2jar.jar
3、得到jar包
4、对jar进行解析源码、 使用到下面的jd-gui工具
三、jd-gui篇
双击exe文件,将jar包拖进去就可以解析源码
以下为反编译的源码