Android在mac osx下混淆打包和反编译

   android代码一直有一个安全的问题,android2.2之后自带的proguard进行的混淆打包可以比较方便的解决这个问题,那么就先来说说混淆打包的方式吧。

系统环境

mac os x 10.9.4

android sdk版本   

android4.2.2


一、混淆打包

1、混淆打包概念

Java代码编译成二进制class 文件,这个class 文件可以被反编译成源代码,proguard混淆工具就是把方法,字段,包和类这些java 元素的名称改成无意义的名称,这样代码结构没有变化,还可以运行,但是想弄懂代码的架构却很难。 它还有其他两个功能,删除无效代码(Shrinking 收缩),和代码进行优化 (Optimization Options)。

在android项目中可以看到proguard-project.txt文档,它可以进行混淆的配置。

2、混淆打包步骤

(1)修改项目中的project.properties文件,在新一行添加

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

老版本可以改为添加proguard.config=proguard.cfg

 (2)按照正常流程导出apk即可

二、反编译

1、工具下载

(1)apktool下载最新版本apktool1.5.2.tar.bz2和apktool-install-macosx-r05-ibot.tar.bz2即可,apktool主要是为了获得AndroidManifest.xml和res,不过直接将jar包改后缀名为zip解压也可以得到。

(2)dex2jar为了将dex文件反编译成jar包,得到class代码字节码。

(3)jd-gui则是可以反编译字节码,查看源码的可视化工具。

2、步骤

(1)打开mac 命令行输入命令

echo $PATH

该地址类似windows的系统变量中的path路径,查看是否有/usr/local/bin,如果没有则创建一个,然后将apktool下载的两个tar.bz2解压,可以看到里面有3个文件apktool.jar,aapt,apktool,全部拷贝到/usr/local/bin路径下,需要使用到sudo,这个时候就能不用填写路径就能使用到它们了;

(2)下面开始反编译apk

a、命令行cd到所需反编译的apk文件的目录下,

b、调用命令

apktool d xxx.apk

其中xxx.apk即是你的apk文件名,这个时候会得到文件夹xxx,里面既有所需的AndroidManifest.xml和res;

c、将apk后缀名改成zip,并解压

d、进入该解压文件夹,可以看到class.dex文件,命令行输入

sh 你下载的dex2jar-0.0.9.15的路径/dex2jar.sh classes.dex

这个时候可以看到class.dex所在目录生成新文件classes_dex2jar.jar文件即是我们所需要的代码字节码jar包;

e、打开jd-gui,使用它打开classes_dex2jar.jar就可以看到相应的源码了。

三、混淆打包与常规打包反编译后的效果

常规打包反编译后可以看到删除注释的源码,findViewById函数的参数被值替代,但是也相对容易阅读;混淆打包后,大部分类名和包名等变成了a,b,c等特殊字符,较难解读。所以混淆打包在安全性上的提高还是不错的。


你可能感兴趣的:(Android在mac osx下混淆打包和反编译)