android_apk反编译教程

上传人:自*** 文档编号:78872822 上传时间:2019-02-15 格式:DOC 页数:10 大小:140KB
返回 下载 相关 举报
android_apk反编译教程_第1页
第1页 / 共10页
android_apk反编译教程_第2页
第2页 / 共10页
android_apk反编译教程_第3页
第3页 / 共10页
android_apk反编译教程_第4页
第4页 / 共10页
android_apk反编译教程_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《android_apk反编译教程》由会员分享,可在线阅读,更多相关《android_apk反编译教程(10页珍藏版)》请在金锄头文库上搜索。

1、Android APK反编译教程原帖地址:http:/ Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似 Sun JavaMe的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中 去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法 来查看,当然这需要借助一些我们自己编写的跟踪程序。Go

2、ogle最然在Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。一、dexdump方法 dexdump是emulator自带提供的查看dex文件的工具,可使用类似这样的命令将dex文件dump到txt文件中:D:Program Filesandroid-sdk-windows-1.6_r1platformsandroid-1.6toolsdexdump.exe -d classes.dex spk.dump.txt得到的文件内容,描述了类的信息,但是不怎么好阅读二、AXMLPrinter2.jar + bak

3、smali.jar + smali.jar 方法这个方法就强大了,AXMLPrinter2是还原AndroidManifest.xml和main.xml的工具,直接打开这两个xml文件是乱码,而通过还原之后,可以很明白的看到里面的内容(我猜测还是使用了字节异或的方式加的密)。 baksmali.jar是反解析dex的工具,smali.jar则是再还原成dex的工具操作方式如下:1 1、java -jar AXMLPrinter2.jar D:playAndroidManifest.xml AndroidManifest.txt2 2、java -jar AXMLPrinter2.jar D:p

4、layreslayoutmain.xml main.txt3 3、java -jar baksmali-1.2.5.jar -o classout/ d:playclasses.dex复制代码baksmali可解析(注意,是解析,不是反编译)原java包以及引用的lib包,解析出的文件认真看还是能看懂,比如以下片段:456 view plaincopy to clipboardprint?7 .class Lcom/paul/test/a; 8 .super Landroid/view/View; 9 10 # static fields 11 .field private static fi

5、nal a:Landroid/graphics/Typeface; 12 13 # instance fields 14 .field private b:I 15 .field private c:I 16 .field private d:Z 17 .field private e:J 18 .field private f:I 19 .field private l:Ljava/lang/String; 20 21 # direct methods 22 .method static constructor ()V 23 .registers 2 24 sget-object v0, L

6、android/graphics/Typeface;-SANS_SERIF:Landroid/graphics/Typeface; 25 const/4 v1, 0x0 26 invoke-static v0, v1, Landroid/graphics/Typeface;-create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface; 27 move-result-object v0 28 sput-object v0, Lcom/wiyun/ad/a;-a:Landroid/graphics/Typeface; 29 retu

7、rn-void 30 .end method 31 # 32 # other methods . 33 # 34 # virtual methods 35 .method public onKeyUp(ILandroid/view/KeyEvent;)Z 36 .registers 4 37 const/16 v0, 0x42 38 if-eq p1, v0, :cond_8 39 const/16 v0, 0x17 40 if-ne p1, v0, :cond_b 41 :cond_8 42 invoke-direct p0, Lcom/paul/test/a;-d()V 43 :cond_

8、b 44 const/4 v0, 0x0 45 invoke-virtual p0, v0, Lcom/paul/test/a;-setPressed(Z)V 46 invoke-super p0, p1, p2, Landroid/view/View;-onKeyUp(ILandroid/view/KeyEvent;)Z 47 move-result v0 48 return v0 49 .end method 50 .class Lcom/paul/test/a;51 .super Landroid/view/View;5253 # static fields54 .field priva

9、te static final a:Landroid/graphics/Typeface;5556 # instance fields57 .field private b:I58 .field private c:I59 .field private d:Z60 .field private e:J61 .field private f:I62 .field private l:Ljava/lang/String;6364 # direct methods65 .method static constructor ()V66 .registers 267 sget-object v0, La

10、ndroid/graphics/Typeface;-SANS_SERIF:Landroid/graphics/Typeface;68 const/4 v1, 0x069 invoke-static v0, v1, Landroid/graphics/Typeface;-create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;70 move-result-object v071 sput-object v0, Lcom/wiyun/ad/a;-a:Landroid/graphics/Typeface;72 return-voi

11、d73 .end method74 #75 # other methods .76 #77 # virtual methods78 .method public onKeyUp(ILandroid/view/KeyEvent;)Z79 .registers 480 const/16 v0, 0x4281 if-eq p1, v0, :cond_882 const/16 v0, 0x1783 if-ne p1, v0, :cond_b84 :cond_885 invoke-direct p0, Lcom/paul/test/a;-d()V86 :cond_b87 const/4 v0, 0x08

12、8 invoke-virtual p0, v0, Lcom/paul/test/a;-setPressed(Z)V89 invoke-super p0, p1, p2, Landroid/view/View;-onKeyUp(ILandroid/view/KeyEvent;)Z90 move-result v091 return v092 .end method复制代码认真一看,就知道:# static fields 定义静态变量的标记# instance fields 定义实例变量的标记# direct methods 定义静态方法的标记# virtual methods 定义非静态方法的标

13、记以onKeyUp方法为例,其中定义了处理逻辑,if-eq p1, v0, :cond_8 表示如果p1和v0相等,则执行cond_8的流程:9394 :cond_895 invoke-direct p0, Lcom/paul/test/a;-d()V复制代码调用com.paul.test.a的d()方法不相等: if-ne p1, v0, :cond_b 则执行cond_b的流程:9697 :cond_b98 const/4 v0, 0x099100 invoke-virtual p0, v0, Lcom/paul/test/a;-setPressed(Z)V101102 invoke-su

14、per p0, p1, p2, Landroid/view/View;-onKeyUp(ILandroid/view/KeyEvent;)Z103104 move-result v0复制代码大概意思就是调用com.paul.test.a的setPressed方法,然后再调用父类View的onKeyUp方法最后105 return v0复制代码 该方法,能把外部引用的lib包类也解析出来,能开到包的全貌。缺点在于,解析出的smali文件并不是反编译出的java文件,可读性降低了,但仔细研究也能看出大概。三、dex2jar + XJad 方法一、反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号