[一问一答][Android]如何反编译一个APK文件

本文详细介绍了Android APP反编译的过程和工具使用,包括APKTool、dex2jar和JD-JUI,并提供了反编译的实例和注意事项,旨在帮助开发者更好地理解和利用反编译技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        作为一个Android应用程序开发者,不仅要在开发自己的APP时不断积累知识和经验,同时最好也可以借鉴其他的APP来提高自己。但目前大部分APP不是开源的,也不可能开源,所以如何来查看别人的APP源码?这里就要用到android的反编译技术。

        首先反编译不是一个新技术,也不是很NB的技术,其实对于大多数的java APP都可以反编译,而android就是用java编写的,所以对android进行反编译也是很简单的事情。那么反编译是对谁进行操作的呢?是的,对apk文件,因为我们只能得到apk文件。 实际上这个APK本质上就是一个压缩包,类似于.zip/.rar等。这里就以一个实例来演示下相关的步骤,参考 http://blog.youkuaiyun.com/zzp_403184692/article/details/7959131

        本文只用了3个tool (apktool/dex2jar/jd-jui),上面的链接里介绍了其他的,各位可以试下。测试环境:winxp

1.  APKTool

    通常用于生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。这里讲到了汉化,现在很多的APP市场里都有很多汉化APP,就是一些无聊的人把国外的一些好的应用拿来自己汉化下,有的甚至拿来赚钱,很无耻!其实这种汉化的技术也很简单。                      

安装步骤
1) 安装JAVA环境(官方推荐jdk 1.6);
2) 下载apktool.jar:http://code.google.com/p/android-apktool/downloads/list
     点击下载apktool1.5.2.tar.bz2  和apktool-install-windows-r05-ibot.tar.bz2 (不一定是这个,但最好选最新版本)
3)  解压apktool1.5.2.tar.bz2得到apktool.jar;
      解压apktool-install-windows.zip到任意文件夹,将apktool.jar拷入此文件夹中(也有人说是直接全部拷入C:/Windows,一样的);
     (目前此文件夹中有三个文件:apktool.jar/apktool.bat/aapt.exe
4) cmd命令行进入到解压apktool-install-windows-r05-ibot.tar.bz2所得的文件夹,输入apktool测试是否安装成功;
安装成功后,下面开始反编译过程:
1) apktool d (要反编译的文件) (输出文件夹)注意:不是-d
如:
apktool d XXX.apk (目标文件夹)      反编译 geek.apk到文件夹test
2) apktool b (目标文件夹)             
从目标文件夹中重建APK,生成的APK在"目标文件夹"\dist文件夹里,叫out.apk。
这个out.apk是没有签名的,所以不能直接装到手机里。签名工具和方法见http://www.hiapk.com/bbs/thread-21261-1-1.html,这里就不说了。签名后得到的APK,就是可以装到手机里的了

注:这里可以得到4个文件夹和2个文件:

a) assets:对应APP的目录assets

b) lib:对应APP使用的lib库,基本上是.so文件了

c) res:对应APP使用的所有资源

d) smali:里面存放着所有反编译出的smali 文件,这些文件会根据程序包的层次结构生成相应的目录,程序中所有的类都会在相应的目录下生成独立的smali 文件。详见http://book.2cto.com/201212/12468.html

e) AndroidMenifest.xml:对应APP使用的AndroidMenifest.xml,基本上可以完美反编译出来

f)  apktool.yml:YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。

2. dex2jar

顾名思义,是把dex转化为jar,那么dex是什么?请参考 https://source.android.com/devices/tech/dalvik/dex-format.html,

dex2jar的下载地址:http://code.google.com/p/dex2jar/downloads/list
方法:
1.首先找到Android 安装包中的classes.dex (将apk解压后会看到有一个classes.dex文件)
它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
2.把classes.dex拷贝到dex2jar.bat所在目录。
在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex
,生成classes-dex2jar.jar,注意还有classes_dex2jar.jar,这个文件用下面的tool查看不了,所以以classes-dex2jar.jar为准。

3. JD-JUI

该工具用来查看jar,浏览里面的source文件。

官方下载地址打不开了,所以可以自己搜索一个下载。

解压下载的zip包,得到类似jd-gui-0.3.3.windows目录,双击里面的jd-jui.exe可以打开UI操作界面。这里既可以直接查看source file,也可以把这些source file保存到某个目录,得到一个类似于classes-dex2jar.src.zip的压缩包,我们需要解压这个包来获取里面的java文件。

总结

 通过上述3个工具,基本上可以得到所有的源代码了,对于resource来说,大部分能够得到。对于java文档,有一些app在生成apk的时候使用了混淆器来打乱里面的代码,是反编译后的代码可读性很差,所以需要我们更认真的来rebuild里面的代码逻辑。这个过程往往很费事也很难。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值