早上与兄弟聊天,谈到他现在公司的android产品,心血来潮,反编了一下,之前接触反编的时候就发现网上很多资料写的非常混乱,正好趁着今天整理一下,保存备用。
APK反编译---------------------------------------------------------------------------------------------------------------------------------------------------------------
apk反编是比较简单的,网上资料很多,但是其中良莠不齐,具体来讲,apk反编分为两个部分,一个部分是反编得到java代码的,另一部分是反编得到配置与布局文件的。
首先总结下怎样获得java代码:
这里我们需要两个工具分别是dex2jar,还有jd-gui。这两个工具网上下载的地方很多,在这里就不给地址了。
1、将apk文件直接解压,压缩工具就不用我来推荐了吧。
2、找到解压后的classes.dex文件,把它放到dex2jar的解压目录下,然后到cmd命令行cd到dex2jar的解压目录下,运行 dex2jar classes.dex
然后我们会看到"this cmd is deprecated, use the d2j-dex2jar if possible"的警告信息,无视它吧。当出现done的时候说明已经反编完成了。
能看到,jar文件是会比dex文件稍大一点的。
3、相信这个时候很多人都知道要怎么做了,直接使用jd-gui打开jar文件就OK了。打开之后如果发现类名、方法名以及变量名都是什么a、b、c....这种的说明是混淆了的。
然后我们来看下怎样获得配置文件:
这里,我们需要一个谷歌提供的工具apktool,这里我要提下,有很多文章里面提到apktool的时候,我们会发现其中有不同之处,有的是只有一个apktoo.jar,
有的则有aapt.exe,apktool.jar,apktool.bat。让人觉得很混乱,这里我就解释下,核心的东西就是apktool.jar,有这个我门才能完成解包、打包等功能,aapt.exe是打包时候需要用到的工具,在这里我们就不谈它了,而apktool.bat是一个方便大家使用apktool.jar来解包的一个批处理程序,他的内容如下
1 @echo off 2 set PATH=%CD%;%PATH%; 3 java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
这样讲完后,大家对apktool就有了一个更深入的了解,解包我们只要有apktool.jar和apktool.bat就够了,没有apktool.bat咱们照着上面写一个也行,这样就不至于看着网上的各种版本不知道用哪个了。
这个工具怎么用呢,简单,还是打开cmd命令行,cd到apktool.jar与apktool.bat所在的文件夹
运行
apktool d <file.apk> <dir>
<file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\abc.apk
<dir>代表了反编译后的文件的存储位置,比如C:\AAA
如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>
这样就会强行覆盖已经存在的文件。
这就是解包后的效果,清单文件、布局文件随便看。
代码混淆------------------------------------------------------------------------------------------------------------------------------------------------------------------
时间不多了,我就简略的说下
2.3.3后,google提供了proguard.cfg文件来作为代码混淆的配置文件,网上的教程也大多基于此,但是4.0发生了一些小小的改变
http://my.eoe.cn/zgjxxjkon/archive/14791.html
这篇博客介绍的比较详细,我就不赘述敷衍了。