千家信息网

如何反编译Android部署程序

发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要为大家展示了"如何反编译Android部署程序",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何反编译Android部署程序"这篇文章吧。方法
千家信息网最后更新 2025年11月14日如何反编译Android部署程序

这篇文章主要为大家展示了"如何反编译Android部署程序",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何反编译Android部署程序"这篇文章吧。

方法一: apk—>dexàjaràjava (推荐)

1.下载dex2jar,下载地址(见附件):

http://code.google.com/p/dex2jar/downloads/list

2.下载class反编译工具jad,

下载地址(见附件):

http://www.119.xdowns.com/uploadFile/2010-8/jd-gui-0.3.3.osx.i686.zip 3.使用winrar解压缩.apk文件.我们可以看到classes.dex文件。这个就是Android虚拟机Dalvik支持的字节码文件。

4.在cmd下进入dex2jar.bat所在路径,输入dex2jar.bat D:\project\classes.dex 回车。其中D:\project\classes.dex就是你的classes.dex所在的目录。

5.然后在classes.dex同级目录下会生成一个classes.dex.dex2jar.jar文件

6.用jad工具将打开这个jar文件,你就可以看到这个jar文件里面的代码了。而且可以直接保存为java文件。

方法二:(推荐)

Apk->加密的XML->解密的XML

apk—>dexàsmali

此外,上面操作只能得到java代码,但是我们可能还需要一些XML文件,APK文件解压缩后,发现其中的XML文件都是经过处理过的,看不到源码。

下面利用Google提供的apktool来获取xml文件

1. 下载apktool,可以去Google的官方下载(见附件),

地址:http://code.google.com/p/android-apktool/

apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。

2.解压这两个下载到的文件到某个文件夹(例如E盘根目录)。 确保解压缩后得到的aapt.exe,apktool.bat,apktool.jar在同一个文件夹下。

3.将要破解的.apk文件也放入到这个文件夹中来

4.运行CMD,用cd命令转到这几个文件所在文件夹,输入apktool,假如列出一些帮助的话就成功了(解释d为加压 ***个路径为你的apk所在的位置。第二个是要输出的位置)
apktool d XXX.apk ABC 反编译XXX.apk到文件夹ABC (必须确保当前目录下没有ABC这个文件夹,否则会报错)

5. 解压后的文件夹中可以得到apk中的xml配置文件。

其实用这个方法会得到一个smali文件夹,进去看,用记事本打开其中的一个.smali文件,通过解读里面的信息,就可以一窥代码的全貌,就是有点费力。下面我们通过一个实例来对比一下.smali和.java源代码的对照吧:

ApkInstaller.smali文件:

.class public Lcom/tutor/apkinstaller/ApkInstaller;    .super Landroid/app/Activity;    .source "ApkInstaller.java"    # instance fields    .field private apkWeb:Landroid/webkit/WebView;    # direct methods    .method public constructor ()V        .registers 1        .prologue        .line 8        invoke-direct {p0}, Landroid/app/Activity;->()V        return-void    .end method    # virtual methods    .method public onCreate(Landroid/os/Bundle;)V        .registers 5        .parameter "savedInstanceState"        .prologue        .line 13        invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V        .line 14        const/high26 v2, 0x7f03        invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->setContentView(I)V        .line 15        const/high26 v2, 0x7f05        invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->findViewById(I)Landroid/view/View;        move-result-object v2        check-cast v2, Landroid/webkit/WebView;        iput-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;        .line 16        iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;        invoke-virtual {v2}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings;        move-result-object v1        .line 17        .local v1, webSettings:Landroid/webkit/WebSettings;        const/4 v2, 0x1        invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V        .line 19        const-string v0, "http://frankiewei.net/apk/demos/main/index.html#home"        .line 20        .local v0, apkUrl:Ljava/lang/String;        iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;        invoke-virtual {v2, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V        .line 21        return-void    .end method

ApkInstaller.java的源代码如下:

package com.tutor.apkinstaller;    import android.app.Activity;    import android.os.Bundle;    import android.webkit.WebSettings;    import android.webkit.WebView;    public class ApkInstaller extends Activity {        private WebView apkWeb;        @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.main);           apkWeb = (WebView)findViewById(R.id.apk_web);           WebSettings webSettings = apkWeb.getSettings();           webSettings.setJavaScriptEnabled(true);           String apkUrl = "http://frankiewei.net/apk/demos/main/index.html#home";         apkWeb.loadUrl(apkUrl);        }    }

通过两者的对比是不是有所感悟呢,的确有点麻烦。所以推荐大家采用方法一来得到java代码,用方法二来获取xml文件。这样就可以获取整个工程的代码了。

但有的时候方法一可能会出错,笔者就曾经遇到过这种情况,这个时候只能用方法二了。

此外介绍另外一种方式,这个方式得到的代码还不如方法二清晰,但是还是介绍一下吧。


方法三:apk—>dex->ddx

ddx文件虽然不能看到源代码,但是可以看出类的结构。有的时候用***种方法可能不一定能得到源代码,这个时候就用第二种方法来补救吧...

Dedexer 项目主页(见附件): http://dedexer.sourceforge.net/

下载地址也在这个网站上。下载后的文件为ddx1.11.jar(目前***版本为1.11)

1. 运行CMD 进入ddx1.11.jar的目录,输入如下命令: D:\WINDOWS\system32>java -jar ddx1.11.jar

2. 出现如下提示

Usage: java -jar ddx.jar -o -D -r -d

:指定生成的文件放置的目录

:dex源文件.

-D - 指定生成错误信息.

-o - 指定生成日志文件(dex.log).

3.仔细阅读上面的信息,根据:

java -jar ddx1.11.jar -o -D -r -d  

按此提示,输入:

java -jar ddx1.11.jar -o -D -r -d c:\dex\gen c:\dex\classes.dex 4.

运行成功,在gen 目录生成了ddx 文件.用文本编辑器打开,可看到类大致结构.

以上是"如何反编译Android部署程序"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

文件 方法 文件夹 目录 代码 编译 生成 地址 所在 时候 源代码 附件 输入 程序 信息 内容 就是 篇文章 帮助 推荐 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 金山区省电软件开发哪家便宜 数据库创建语句是什么 数据库写入是io密集型吗 cf网络出现异常与服务器断开连接 网络安全法27条规定怎么处罚 网络安全观后感300字 数据库创建表可以没有主键么 哈尔滨天成软件开发 路由5g 网络安全用什么模式 软件开发技术的发展状况 织梦网站换服务器 底层软件开发前景 桂林敦讯网络技术 法院开展网络安全宣传周活动 华为云服务器可视化 小迪网络安全资料 职业生涯规划软件开发专业 医院处方分析数据库有哪些 北京电力应急软件开发价钱 网络安全 高端市场 传统软件开发过程的测试方法 关于网络安全的电影完整版 一个软件开发两个系统可以吗 数据库管理系统的输入 全球网络安全小组组长 目前最新的网络安全技术 网络安全上市企业龙头 连接服务器后无法识别网络 mdb数据库密码读取工具 四川内江服务器管理
0