`

android反编译

 
阅读更多
参考文章
较好
Android APK反编译详解(附图)
很棒
Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)!
较好
andriod的apk文件相关的编译反编译工具

【转载】(主要是怕这么好的东西被人删了)
一、前言:

大家好,今天给大家分享一下Android中的拿来主 义,我们时常会碰到一个自己觉得很漂亮很帅气的应用(apk),所以我们会尝试用WinRAR等之类工具查看,而一般的应用程序打包后的目录通常是这样的 如下图:


当然res里的图片是可以拿来就用的(笔者的好多应用的图片都是从别人的apk里扣出来的),而诸如layout里的布局及权限文件 (AndroidManifest.xml)已经是一堆乱码了,完全看不懂,想看看别人是怎么布局的都不容易。还有源代码都被编译成了 classes.dex,完全看不出什么线索。基于以上的困惑,笔者给大家分享一下Android中的拿来主义。

二、所需工具(点击各自连接进入下载页面):

1.AXMLPrinter2.jar

2.baksmali.jar

3.smali.jar

4.dex2jar.jar

三、准备工作

为了方便起见,作者把AXMLPrinter2.jar, 还有baksmali.jar,还有smali.jar(下下来为了方便重命名),放在Android SDK tools文件夹中如下图所示:


为了便于大家更容易程序比对,作者写了一个简单的应用(叫APKInstaller)目录结构如下图所示:



四、开始拿来主义

1.用 AXMLPrinter2.jar查看apk中的布局xml文件:

将ApkInstaller应用生成的ApkInstaller.apk(为了方便起见放到tools目录里)用WinRAR等 工具打开,将res/layout/main.xml解压出来(也还是放在tools目录里哦)

打开main.xml文件,内容如下(一堆天文):



这时候AXMLPrinter2.jar派上用场了,打开cmd终端,一直进入到tools目录下,输入如下命令:

java -jar AXMLPrinter2.jar main.xml > main.txt.  (如下图所示)



打开main.txt代码如下(是不是有个123了呵呵~):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="1"
	android:layout_width="-1"
	android:layout_height="-1"
	>
	<WebView
		android:id="@7F050000"
		android:layout_width="-1"
		android:layout_height="-2"
		>
	</WebView>
</LinearLayout>

为了比对打开源程序中的main.xml代码如下(大家比对一下吧):
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
<WebView  
    android:id="@+id/apk_web"  
    android:layout_height="wrap_content"  
    android:layout_width="fill_parent"  
      
/>  
</LinearLayout> 


2.用baksmali.jar反编译classes.dex:

将ApkInstaller.apk里的classes.dex解压到tools目录里,然后baksmali.jar就派上用场了,在cmd命令行里输入如下命令:

java -jar baksmali.jar -o classout/ classes.dex .(如下图所示:)


你将会发现在tools里多一个classout文件夹里面(我代码的包目录结构清晰可见呀),如下图所示:


从上面看出除了Android本身资源的类R开头的,我的源程序里只有一个ApkInstaller.java,完全吻合,真TMD的猥琐呵呵~

下面我们看一下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 <init>()V  
    .registers 1  
    .prologue  
    .line 8  
    invoke-direct {p0}, Landroid/app/Activity;-><init>()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/high16 v2, 0x7f03  
    invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->setContentView(I)V  
    .line 15  
    const/high16 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);  
    }  
}  

我相信大家 已经能看出来门道来了吧,hoho~



3.用smali.jar编译classout成classes.dex:

我们上一步已经将classes.dex反编译成了.smali文件,好了,我们看看smali文件看够了,在偿试把它编译成classes.dex吧,

输入如下命令:java -jar smali.jar classout/ -o classes.dex. 如下图所示:



我们可以将新生成的classes.dex塞入ApkInstaller.apk里覆盖原来的classes.dex文件,这样我们的apk还是一样能用的哦~



Ok~今天就暂时写到这里,这片文章真是不容易呀,写了这么长时间,之间还出现过被来自武汉IP的人把这篇文章删除 过,我又重新写了一遍。希望大家多多进步!thx~
  • 大小: 72.2 KB
  • 大小: 52.9 KB
  • 大小: 24.8 KB
  • 大小: 26.9 KB
  • 大小: 34.7 KB
  • 大小: 36.6 KB
  • 大小: 52.7 KB
  • 大小: 14.8 KB
分享到:
评论

相关推荐

    Android反编译工具包(最完整的Android反编译工具包)

    标题中的“Android反编译工具包(最完整的Android反编译工具包)”表明这是一个集合了多种工具的资源包,用于帮助开发者和安全研究人员进行APK的反编译工作。 首先,让我们来了解一下反编译的基本概念。反编译是将已...

    android反编译工具

    这通常涉及到使用各种Android反编译工具。这些工具可以帮助开发者、安全研究人员或者逆向工程师理解已编译的Android应用程序的工作原理。下面我们将详细探讨一些常用的Android反编译工具及其应用。 1. **Apktool**...

    Android反编译工具

    在这个场景下,Android反编译工具扮演了至关重要的角色。本篇将详细讲解其中提及的三个关键工具:`android-tool.jar`、`jd-gui.jar`和`dex2jar`,以及它们在Android反编译流程中的作用。 首先,`android-tool.jar`...

    android反编译工具(dex2jar,apk2java)

    本文将详细介绍两款常用的Android反编译工具——dex2jar和apk2java,以及如何利用它们获取APK中的Java源代码和资源文件。 一、dex2jar dex2jar是一款将Dalvik字节码(.dex)转换为Java字节码(.jar)的工具。...

    Android 反编译-全部工具包

    "Android反编译-全部工具包"提供了一个便捷的方式,将所有必要的反编译工具集合在一起,使得开发者无需分别下载和配置各个工具。下面,我们将详细介绍这个工具包中包含的组件及其用途。 1. **Apktool**:Apktool是...

    最新的android反编译

    最新的android反编译工具以及相关的使用方法,这个版本为最新的工具。 1、把apk文件重命名为zip或者rar文件格式 2、解压后把classes.dex复制到dex2jar-2.0目录中 3、打开cmd,定位到dex2jar-2.0目录 4、运行d2j-dex2...

    Android 反编译可视化操作工具

    这就是Android反编译的作用。本文将详细介绍一款名为"Android反编译可视化操作工具"的实用软件,它使得这个过程变得更加直观和便捷。 这款工具的核心优势在于它的可视化界面,开发者无需再通过复杂的命令行操作来...

    android反编译资源获取

    在Android应用开发中,"android反编译资源获取"是一个重要的技术话题,它涉及到对APK文件的逆向工程,以便获取其中的资源文件,如图片、布局文件等。APKTool是这个过程中常用的一款工具,它允许开发者解包、反编译、...

    Android反编译工具包

    这就是Android反编译工具包的作用。本文将深入探讨Android反编译的相关知识,包括为什么要反编译,常用的工具,以及如何使用这些工具。 一、为什么进行Android反编译 1. 安全分析:开发者或安全研究人员可以通过反...

    android反编译xml、layout

    `apktool`是一个开源的Android反编译工具,它能够帮助我们解包APK,反编译其中的XML和布局文件(layout),并提供重新打包和签名的功能,以实现对APK的分析和修改。 首先,`apktool`的基本使用流程如下: 1. **...

    Android反编译软件 安卓反编译 Android APK反编译详解

    本文将深入探讨Android反编译的相关知识,包括为什么要进行反编译,常用工具介绍,以及反编译过程的详细步骤。 首先,让我们理解什么是Android反编译。Android应用通常是以APK(Android Package)的形式发布,它...

    android反编译工具包

    "android反编译工具包"正是为这种需求而设计的专业工具集,它可以帮助开发者将二进制的字节码还原成可读的源代码,以及查看和分析应用程序的资源文件,如布局、图片和字符串等。 1. **反编译原理**:Android应用...

    android 反编译smali工具

    本文将深入探讨“android 反编译smali工具”,包括smali、smali-1.4.2.jar、baksmali-1.4.2.jar以及baksmali这四个工具,它们在Android反编译流程中的作用和使用方法。 首先,我们要知道,Android应用程序主要由...

    最新mac版本android反编译工具包

    这个“最新mac版本android反编译工具包”正是为这一目的而设计的,它包含了适用于MAC OS 10及更高版本的必备工具。以下是这些工具的详细介绍: 1. **Apktool**:Apktool是由IzzySoft开发的一个开源工具,主要用于反...

    android 反编译小工具

    在实际操作中,使用“Android反编译工具.exe”这样的程序时,只需将APK文件拖放到程序界面上,它就会自动完成解压和解析工作,使开发者能便捷地查看和分析APK的内部结构。这在调试、逆向工程、安全审计等方面都有其...

    android 反编译工具

    本篇将详细介绍三个常用的Android反编译工具:Apktool、dex2jar以及JD-GUI。 1. **Apktool**: Apktool是一款强大的Android应用反编译工具,由Ivo Labs公司开发。它能够解码Android应用的资源文件,包括XML布局、...

    android 反编译jar包

    总之,Android反编译jar包是一个涉及多种工具和技术的过程,需要对逆向工程有一定的了解。正确使用这些工具可以帮助开发者解决特定问题,但同时也需要遵循法律和道德规范,尊重软件开发者的劳动成果。

Global site tag (gtag.js) - Google Analytics