当前位置: 代码迷 >> Android >> android反编译集锦
  详细解决方案

android反编译集锦

热度:67   发布时间:2016-05-01 13:57:39.0
android反编译汇总
考虑到现在国内从事android开发工作的公司很少,因此导致开发人员也少,都是一些android爱好者在自己写,因此如果想要系统的学习android,并且掌握android的开发不是件容易的事情,至此,我尝试了若干种方式来进行android项目的反编译,这样可以学习、借鉴别人已经专业从事android开发者的成果,可以去看一下别人的一些Android优秀的应用程序是怎样写的,这样也是一种学习的过程,学习学习,仅仅也只是学习,没有盗版的意思,同时也反映出一个问题,目前来说Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似Sun JavaMe的Jar压缩格式一样,不过Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。
以下是我尝试过的反编译经历,经历如下:
?1. ?第一种反编译的方法主要是利用模拟器自带的一个dexdump。

?? ? ? 具体如下面的介绍:

?? ? ? 反编译一个.apk文件,需要做以下几步:1) 找到.apk安装文件 ? 2)找到安装软件的*.dex文件 ? ?3)dump dex文件 ??? ??4)分析dex文件获取想要的代码

?

(提醒:如果adb命令如法使用,请配置环境变量)

?? ? ? 一、找到apk安装文件这个比较容易,把手机或者模似器安装好后,可以在eclipse的DDMS中的File Explorer下找到安装程序的apk译文件,也可以通过adb命令找到:

查找目录方式:路径为/data/app/下的apk文件?? 命令方式:通过adb命令?? adb shell--->cd /data/app---->ls?

上述两种方式可以看到相关apk文件???????

?????? 二、找到安装软件的*.dex文件运行安装软件后,会在android文件系统下生成一个*.dex文件,可以在eclipse的DDMS中的File Explorer下找到安装程序的.dex文件,也可以通过adb命令找到:
查找目录方式:路径为/data/dalvik-cache下的dex文件??? 命令方式:通过adb命令???adb shell--->cd /data/dalvik-cache---> ls
上述两种方式可以看到相关dex文件??
?三、找到你想编译的dex文件,通过以下指令:
??????????????????????????????? 指令参数解释:-d : disassemble code sections

??????????????????????????????????? -f : display summary information from file header

??????????????????????????????????? -h : display file header details

??????????????????????????????????? -C : decode (demangle) low-level symbol names

??????????????????????????????????? -S : compute sizes only

如下图所示:
这执行完了后,大家应该可以在dalcik-cache文件夹下找到yale.txt文件。如果没有的话,可以重新启动虚拟器。?之后我们可以将该txt文件导出到桌面上进行相关操作。(File Explorer中的按钮)
如下图:
四、?获取需要的代码:打开刚才得到的编译出来的text文件,会看到形如以下的代码:??????
总体来看,这种反编译的效果不太理想。
?第二种是:通过dex2jar工具进行反编译。(dex2jar:http://code.google.com/p/dex2jar/downloads/list??? 查看Jar包的GUI工具:http://java.decompiler.free.fr/?q=jdgui
?反编译步骤:
??? 1、下载一个.apk程序安装包,将其文件名*.apk改为*.rar后进行解压。
???2、?把其中的xxx.dex拷贝到dex2jar.bat所在目录。运行dex2jar.bat???xxx.dex,将会在其文件夹下生成 xxx.dex.dex2jar.jar。
?3、可以将jar文件重新命名后拷贝到GUI文件夹下,运行JD-GUI工具(它是绿色无须安装的),打开上面的jar文件,即可看到源代码。
与第一种方法相比较,该方法生成的文件全面,代码整齐,虽然有些中文会出现乱码,id等全部是数字代替,但整体结构很完整,不错。

?

以上是对android中dex中的文件进行反编译,但是android项目中xml文件如何进行反编译呢?如果不进行反编译,那么项目中的xml(布局文件、资源文件)文件都是乱码,当然也有针对性解决该问题的方法。

需要工具AXMLPrinter2.jarhttp://code.google.com/p/android4me/downloads/list)。具体的使用方法,与上面的差不多,将它放到android-sdk\tools文件夹中,然后运行cmd,进入tools目录,运行java -jar AXMLPrinter2.jar main.xml > main.txt;

这样android项目中相关的文件基本上都经过了反编译操作,可能有些人用jd-gui来反编译时候是在jd-gui软件中进行代码查看的,当然,用eclipse做过java开发的人员都知道如果在eclipse中直接打开.class文件,这里我也介绍几种方式,便于android开发者使用,方法如下:
1.从http://www.kpdus.com/jad.html#download地址下载最新的jad;
2.从http://nchc.dl.sourceforge.net/s ... jadclipse.jar地址下载jadclipse.jar,拷贝到eclipse的plugins目录下;
3.启动或重起eclipse,修改window -> Preferences -> Java -> JadClipse 下的 Path to decompiler???? jad目录\jad.exe;
4.Windows -> Perference -> General -> Editors -> File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”
之后在java类里按住ctrl点击类就可以看到它jad反编译后的源带码了;
如果发现安装了没有效果,可以删除eclipse主目录下的\configuration\org.eclipse.update后,再执行eclipse -clean试试

?

当然,还有一个开源的android软件可以提供android中所有文件的反编译,就是以下这种,

?

Android apktool?

?

?Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片、XML配置、语言资源等文件,也可以添加新的功能到APK文件中。用该工具来汉化Android软件然后重新打包发布是相当简单的。
项目地址:http://code.google.com/p/android-apktool/
点击下载apktoolXXX.tar.bz2? 和apktool-install-windows-XXX.tar.bz2,解压apktool1.3.2.tar.bz2得到apktool.jar,解压apktool-install-windows.zip到任意文件夹,将apktool.jar拷入此文件夹中(目前此文件夹中有三个文件:apktool.jar/apktool.bat/aapt.exe)
4.cmd命令行进入到解压该文件夹,输入apktool测试是否安装成功;

安装成功后,下面开始反编译过程:
apktool d (要反编译的文件) (输出文件夹) 如:apktool d XXX.apk (目标文件夹,不能重名)?反编译 my.apk到文件夹myapk,这样apk文件转换成一个android的工程了,但是该工具主要的缺陷是反编译的class文件内容不是太完整,xml文件以、图片、汉化等功能到是挺不错的。

工程编译成apk文件
apktool b (目标文件夹)??从目标文件夹中重建APK,生成的APK在"目标文件夹"\dist文件夹里,叫out.apk。
?这个out.apk是没有签名的,所以不能直接装到手机里。签名工具和方法见http://www.hiapk.com/bbs/thread-21261-1-1.html,这里就不说了。签名后得到的APK,就是可以装到手机里的了。

1 楼 zhaodp 2012-06-30  
http://code.google.com/p/anti-droid
2 楼 zhaodp 2012-06-30  
看看这个工具,apktool的GUI
  相关解决方案