电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

android_apk反编译教程

  • 资源ID:78872822       资源大小:140KB        全文页数:10页
  • 资源格式: DOC        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

android_apk反编译教程

Android APK反编译教程原帖地址:http:/www.miui.com/thread-505062-1-2.htmlGoogle Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似 Sun JavaMe的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中 去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法 来查看,当然这需要借助一些我们自己编写的跟踪程序。Google最然在Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。一、dexdump方法 dexdump是emulator自带提供的查看dex文件的工具,可使用类似这样的命令将dex文件dump到txt文件中:D:Program Filesandroid-sdk-windows-1.6_r1platformsandroid-1.6tools>dexdump.exe -d classes.dex > spk.dump.txt得到的文件内容,描述了类的信息,但是不怎么好阅读二、AXMLPrinter2.jar + baksmali.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:playreslayoutmain.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 final 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 <clinit>()V 23 .registers 2 24 sget-object v0, Landroid/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 return-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_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 private 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 <clinit>()V66 .registers 267 sget-object v0, Landroid/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-void73 .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, 0x088 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 定义非静态方法的标记以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-super 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是一个反编译工具,可

注意事项

本文(android_apk反编译教程)为本站会员(自***)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.