700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 游走Android系列之APK文件的反编译 修改和重新编译打包

游走Android系列之APK文件的反编译 修改和重新编译打包

时间:2019-11-12 14:44:30

相关推荐

游走Android系列之APK文件的反编译 修改和重新编译打包

Android apk反编译、重新编译和签名

将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex文件(.dex),我们可以从.dex文件中得到.class,再将.class处理得到大家垂涎已久的java文件。

一、APK文件是什么?

Android application package文件。每个要安装到android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk,其中包含了应用的二进制代码、资源、配置文件等。

APK文件其实就是一个MIME为ZIP的压缩包,通过解压缩软件可以看到内部的文件结构,Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。

下面是一个BMI的apk示例文件 :

1、Manifest文件:AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。注意:在apk中的xml文件是经过压缩的,不可以直接打开。

2、Res文件:res文件夹下为所有的资源文件。

3、resources.arsc文件:为编译后的二进制资源文件,许多做汉化软件的人都是修改该文件内的资源以实现软件的汉化的。

4、META-INF目录:META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。而在OPhone平台上安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系 统的安全。

5、classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。

二、为什么要反编译android apk文件?

1、学习优秀的软件设计,解决封闭包特定的问题;

2、去除广告及吸费,修改别人的软件包名,重新打包发布;

3、 中文汉化;

三、反编译工具

android-apktool:(推荐)APKTool是GOOGLE提供的APK编译工具,能够反编译及回编译apk。通常用于生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。支持Linux 、Windows下工作,用该工具来汉化Android软件然后重新打包发布是相当简单的。下载地址:/p/android-apktool/downloads/list

dex2jar:(强烈推荐)把dex文件反编译为jar文件的工具。classes.dex是java源码编译后生成的java字节码文件,但Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。 下载地址:/p/dex2jar/downloads/list

jd-gui:(推荐)把jar反编译为java的工具,可以直接查看反编译后的jar包源代码。 下载地址:http://java.decompiler.free.fr/?q=jdgui

dexdump:Android模拟器中提供的一个dex文件的反编译工具。用法一:为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。用法二:可使用类似这样的命令将dex文件dump到txt文件中:D:\Program Files (x86)\Android\android-sdk\platform-tools\dexdump.exe -d classes.dex > spk.dump.txt。但是这样得到的结果,其可读性是极差的。

四、Apk反编译得到Java源代码

下载并解压dex2jar-0.0.9.14.zip文件,得到dex2jar-0.0.9.14文件夹,内含apk反编译成java源码工具,以及源码查看工具。

首先,将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的。在命令行下定位到dex2jar.bat所在目录,运行:dex2jar.batD:\Android\apk\Bmi\classes.dex

默认的输出路径同classes.dex,生成的文件名为classes.dex.dex2jar.jar。

然后,进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码了,必须使用apktool来进行反编译,jd-gui得到的是不可逆的代码,无法编译回去,如下图:

五、apk反编译生成程序的源代码和图片、XML配置、语言资源等文件

如果是汉化软件,这将特别有用。下载并解压apktool1.5.2.tar.bz2和apktool-install-windows-r05-ibot.tar.bz2文件,将两个文件夹下的文件合并到apktool-install-windows-r05-ibot文件夹下:aapt.exe,apktool.bat,apktool.jar。在命令行下定位到apktool.bat文件夹,输入以下命令:apktool.bat d -f D:\Android\decompile\input\Bmi.apk D:\Android\decompile\output,如下图:

上图中,apktool.bat 命令行解释:apktool.bat d -f [apk文件 ] [输出文件夹]

反编译的文件如下(AndroidManifest.xml为例),此时可以修改资源文件:

六、重新打包成apk

在命令行中输入:D:\Android\decompile\apktool\apktool-install-windows-r05-ibot>apktool.bat b D:\Android\decompile\output(你编译出来文件夹,里面的资源文件已经修改完成)即可,命令如下:

apktool.bat b xxx

其中b表示build,xxx表示解包出来的文件夹,我们可以对某一文件进行修改,重新打包。打包apk后的文件在D:\Android\decompile\output文件夹下,生成了两个文件夹:

build和dist其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,build存放该APK的具体组成信息。打包之前我们可以简单的替换资源也可以通过修改smali完成代码的修改。

七、用 KeyTool 产生证书文件

在命令行输入:C:\Users\hairui>keytool -genkey -keystore cmd.keystore -keyalg RSA -validity 10000 -alias cmd.keystore,按如下输入后在C:\Users\hairui目录下生成了cmd.keystore证书文件。

八、生成签名的APK文件

在命令行输入:C:\Users\hairui>jarsigner -verbose -keystore cmd.keystore -signedjar D:\Android\decompile\output\dist\nbmi.apk D:\Android\decompile\output\dist\Bmi.apk cmd.keystore,在D:\Android\decompile\output\dist文件夹下生成了经过签名的nbmi.apk文件。

九、安装并运行生成的apk

运行模拟器,在命令行输入:D:\Program Files (x86)\Android\android-sdk\platform-tools>adb install D:\Android\decompile\output\dist\nbmi.apk,如下提示说明安装成功:

运行新安装的应用如下:

红色圈中是我们修改添加上去的。到此,我们完成了APK文件的反编译、修改和重新编译、打包、运行的全过程。接下来还会介绍如何修改编译后的java源码,使用另一种工具来完成上述同样的过程。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。