Android 程序反编译

本文详细介绍了Android应用程序的反编译过程,包括Apk文件的结构、反编译工具的使用,如AXMLPrinter2.jar、dex2jar和JD-GUI。通过这些工具,可以解密AndroidManifest.xml、反编译classes.dex为Java源码,以及处理资源文件,为理解和学习Android应用提供了可能。
摘要由CSDN通过智能技术生成

Apk文件的格式

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

apk文件实际是一个zip压缩包,可以通过解压缩工具解开。可以用zip解开*.apk文件,下面是一个hellowordapk示例文件。

|– AndroidManifest.xml

|– META-INF

| |– CERT.RSA

| |– CERT.SF

| `– MANIFEST.MF

|– classes.dex

|– res

| |– drawable

| | `– icon.png

| `– layout

| `– main.xml

`– resources.arsc

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

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

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

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

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

XML文件的反编译

apk中的xml文件是经过压缩的,可以通过AXMLPrinter2工具解开,具体命令为:

java -jar AXMLPrinter2.jar AndroidManifest.xml

HelloAndroid程序中Manifest文件的实例:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:Android="http://schemas.android.com/apk/res/android

    package="name.feisky.Android.test

    Android:versionCode="1

    Android:versionName="1.0" >

    <application

        Android:icon="@7F020000

        Android:label="@7F040001" >

        <activity

            Android:name=".HelloAndroid

            Android:label="@7F040001" >

            <intent-filter>

                <action Android:name="android.intent.action.MAIN" >

                </action>

一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工 具,可以直接查看Jar包的源代码。 以下是下载地址: dex2jar:http://laichao.googlecode.com/files /dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:http://laichao.googlecode.com/files/jdgui.zip 具体步骤: 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的; 解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex 生成classes.dex.dex2jar.jar 运行JD-GUI,打开上面生成的jar包,即可看到源代码了。 二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件 如果是只是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool,下载地址: http://code.google.com/p/android-apktool/,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。 具体步骤: 将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar; 在命令行下定位到apktool.bat文件夹,输入以下命令: apktool d C:\***.apk C:\***文件夹 命令行解释:apktool d [要反编译的apk文件 ] [输出文件夹],特别注意:你要反编译的文件一定要放在C盘的根目录里; 将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhwadezh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值