反编译Android部署程序

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

创新互联是一家专注于网站制作、成都网站建设与策划设计,柏乡网站建设哪家好?创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:柏乡等地区。柏乡做网站价格咨询:18982081108

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源代码的对照吧:

#p#

ApkInstaller.smali文件:

 
 
 
  1. .class public Lcom/tutor/apkinstaller/ApkInstaller;    
  2. .super Landroid/app/Activity;    
  3. .source "ApkInstaller.java"    
  4. # instance fields    
  5. .field private apkWeb:Landroid/webkit/WebView;    
  6. # direct methods    
  7. .method public constructor ()V    
  8.     .registers 1    
  9.     .prologue    
  10.     .line 8    
  11.     invoke-direct {p0}, Landroid/app/Activity;->()V    
  12.     return-void    
  13. .end method    
  14. # virtual methods    
  15. .method public onCreate(Landroid/os/Bundle;)V    
  16.     .registers 5    
  17.     .parameter "savedInstanceState"    
  18.     .prologue    
  19.     .line 13    
  20.     invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V    
  21.     .line 14    
  22.     const/high16 v2, 0x7f03    
  23.     invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->setContentView(I)V    
  24.     .line 15    
  25.     const/high16 v2, 0x7f05    
  26.     invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->findViewById(I)Landroid/view/View;    
  27.     move-result-object v2    
  28.     check-cast v2, Landroid/webkit/WebView;    
  29.     iput-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;    
  30.     .line 16    
  31.     iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;    
  32.     invoke-virtual {v2}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings;    
  33.     move-result-object v1    
  34.     .line 17    
  35.     .local v1, webSettings:Landroid/webkit/WebSettings;    
  36.     const/4 v2, 0x1    
  37.     invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V    
  38.     .line 19    
  39.     const-string v0, "http://frankiewei.net/apk/demos/main/index.html#home"    
  40.     .line 20    
  41.     .local v0, apkUrl:Ljava/lang/String;    
  42.     iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;    
  43.     invoke-virtual {v2, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V    
  44.     .line 21    
  45.     return-void    
  46. .end method   

ApkInstaller.java的源代码如下: 

 
 
 
  1. package com.tutor.apkinstaller;    
  2. import android.app.Activity;    
  3. import android.os.Bundle;    
  4. import android.webkit.WebSettings;    
  5. import android.webkit.WebView;    
  6. public class ApkInstaller extends Activity {    
  7.     private WebView apkWeb;    
  8.     @Override    
  9.     public void onCreate(Bundle savedInstanceState) {    
  10.         super.onCreate(savedInstanceState);    
  11.         setContentView(R.layout.main);    
  12.        apkWeb = (WebView)findViewById(R.id.apk_web);    
  13.        WebSettings webSettings = apkWeb.getSettings();    
  14.        webSettings.setJavaScriptEnabled(true);    
  15.        String apkUrl = "http://frankiewei.net/apk/demos/main/index.html#home";  
  16.        apkWeb.loadUrl(apkUrl);    
  17.     }    
  18. }   

通过两者的对比是不是有所感悟呢,的确有点麻烦。所以推荐大家采用方法一来得到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.仔细阅读上面的信息,根据:

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

按此提示,输入:

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

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

原作者的blog中还有相关工具可供下载.原地址:http://zhaojun1717.javaeye.com/blog/953281

【编辑推荐】

Android程序反编译的方法

Android开发之旅 环境搭建

Android 多任务多线程断点下载

Android开发之旅:Android架构

当前文章:反编译Android部署程序
标题路径:http://www.shufengxianlan.com/qtweb/news27/141677.html

成都网站建设公司_创新互联,为您提供软件开发网页设计公司小程序开发静态网站网站改版品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联