Andriod APK 反编译 及 代码混编

来源:互联网 发布:pdf编辑mac版 编辑:程序博客网 时间:2024/05/18 15:05


1 APK反编译

Android应用编译出来的APK文件可以很容易的反编译出Java源码。反编译的过程需要用到两个软件,dex2jarJD-GUIdex2jar是将APK中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。这两个软件的下载地址如下:

http://dex2jar.googlecode.com/files/dex-translator-0.0.9.3.zip

http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip

       首先,将APK文件的后缀名改为zip,解压得到其中的classes.dex文件,即Dalvik Executable格式,它是由dx工具将Java字节码文件(.class)转换成Dalvik虚拟机的可执行文件(.dex)。解压下载的dex-translator-0.0.9.3.zip文件,将APK文件中的classes.dex复制到dex2jar.bat所在的目录。在命令行下定位到dex2jar.bat所在目录,运行命令:

dex2jar.bat  classes.dex

    生成classes_dex2jar.jar文件。

 

图片

    

    接着,解压下载的jd-gui-0.3.3.windows.zip文件,运行jd-gui.exe,打开上面生成的classes_dex2jar.jar文件,就可以看到Java源码了。与反编译之前的源码相比,可以发现其中的差别并不大。

代码混淆

       GoogleAndroid SDK2.3开始在android-sdk\tools\lib\目录下面添加了一个proguard.cfg文件。ProGuard是一个Java代码混淆工具,通过ProGuard混淆之后的代码,别人即使反编译APK文件,也只会看到一些让人较难读懂的代码,从而起到保护代码的作用。

       proguard.cfg起作用的方法很简单,在eclipse中打开Android项目,在包浏览器中打开project.properties文件,在文件末尾中加上一句“proguard.config=proguard.cfg”就可以了。

注意事项

       Android的编译环境中已默认集成了ProGuard,但在调试模式下不会启用代码混淆,那是因为混淆后的代码会使得调试变得更加复杂。当使用Keytool工具对Android项目进行数字签名时,才会启用代码混淆。使用ADTGUI界面可以制作签名文件来给APK签名,在eclipse的包浏览器中,鼠标右键单击项目的根节点,在弹出的菜单中选择“Android Tools”→“Export Signed Application Package…”。

    使用ProGuard需要注意,安装的Android SDK目录中不能有空格,也不能有中文字符,否则容易造成如下错误。

图片

 

    如果Android项目的SDK版本低于2.3,那么就把android-sdk\tools\lib\目录下面的proguard.cfg文件拷贝至Android项目的根目录。并且修改android-sdk\tools\proguard\bin下的proguard.bat文件,如果没有对该文件做修改,容易造成如下错误。

 

图片

 

用写字板打开proguard.bat文件,把

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

修改为

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

       即可避免上述错误。


0 0
原创粉丝点击