Android反编译教程

  • 格式:docx
  • 大小:14.97 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

息,但实在是不好读啊~~~~

二、dex2jar + XJad 方法

该方法是使用dex2jar.jar包,将classes.dex文件解包成jar,在通过XJad(或者其他class反编译工具)进行java反编译。如:

1、dex2jar.bat d:\play\classes.dex

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

2、使用XJad反编译该jar包

之后的使用方法,大家都懂的:)

该方法的好处在于,通过XJad反编译后,大家可直接开到java源文件,缺点在于只能反编译出开发时的java文件,而开发时使用的lib包不能反编译出来。

三、AXMLPrinter2.jar + baksmali.jar + smali.jar 方法

这个方法就强大了,AXMLPrinter2是还原AndroidManifest.xml和main.xml的工具,直接打开这两个xml文件是乱码,而通过还原之后,可以很明白的看到里面的内容(我猜测还是使用了字节异或的方式加的密)。

baksmali.jar是反解析dex的工具,smali.jar则是再还原成dex的工具

操作方式如下:

1、java -jar AXMLPrinter2.jar D:\play\AndroidManifest.xml > AndroidManifest.txt

2、java -jar AXMLPrinter2.jar D:\play\res\layout\main.xml > main.txt

3、java -jar baksmali-1.2.5.jar -o classout/ d:\play\classes.dex

baksmali可解析(注意,是解析,不是反编译)原java包以及引用的lib包,解析出的文件认真看还是能看懂,比如以下片段:

view plaincopy to clipboardprint?

.class Lcom/paul/test/a;

.super Landroid/view/View;

# static fields

.field private static final a:Landroid/graphics/Typeface;

# instance fields

.field private b:I

.field private c:I

.field private d:Z

.field private e:J

.field private f:I

.field private l:[Ljava/lang/String;

# direct methods

.method static constructor ()V

.registers 2

sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;

const/4 v1, 0x0

invoke-static {v0, v1},

Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;

move-result-object v0

sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;

return-void

.end method

#

# other methods ..........

#

# virtual methods

.method public onKeyUp(ILandroid/view/KeyEvent;)Z

.registers 4

const/16 v0, 0x42

if-eq p1, v0, :cond_8

const/16 v0, 0x17

if-ne p1, v0, :cond_b

:cond_8

invoke-direct {p0}, Lcom/paul/test/a;->d()V

:cond_b

const/4 v0, 0x0

invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V

invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z move-result v0

return v0

.end method

.class Lcom/paul/test/a;

.super Landroid/view/View;

# static fields

.field private static final a:Landroid/graphics/Typeface;

# instance fields

.field private b:I

.field private c:I

.field private d:Z

.field private e:J

.field private f:I

.field private l:[Ljava/lang/String;

# direct methods

.method static constructor ()V

.registers 2

sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;

const/4 v1, 0x0

invoke-static {v0, v1},

Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;

move-result-object v0

sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;

return-void

.end method