android反编译汇总(转)

原文地址:http://yale.iteye.com/blog/626303

 

 

考虑到现在国内从事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软件然后重新打包发布是相当简单的。
点击下载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,就是可以装到手机里的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值