前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

Android APK反编译教程 - 小米手机1/1S - MIUI论坛 请 登录 后使用快捷导航没有帐号?注册 登录 官网首页 MIUI英文论坛 内测申请 四格报告 机型适配投票 --> 切换到宽版 社区首页机型专区PhonesMIUI专区MIUI独立应用Apps资源分享Share俱乐部Club谈天说地Chat极客秀Geek商城ShopMIUI下载Download橙色星期五Friday 帖子列表版块列表 MIUI论坛 &rsaquo; 机型专区 &rsaquo; 小米手机1/1S &rsaquo; Android APK反编译教程 12345678910... 50> 返回列表 fw867 | 积分16883 经验14662 米 威望60 米 精华1 帖子2242 性别男 在线时间989 小时 版本3.2.22 注册2011-7-19 最近2014-1-17 --> fw867 52主题2242帖子1万积分 解答组 灵魂医师 积分16883 机型小米手机3 签到次数84 MIUI版本3.2.22 私信 [经验技巧] Android APK反编译教程 [复制链接] 楼主 27684 492 | 发表于 2012-4-1 20:47:03 | 复制链接 | | 跳转 本帖最后由 fw867 于 2012-4-8 12:52 编辑 上期Android平台ROM的定制及精简教程推出后,有很多米粉都非常感兴趣,很多人都成功的定制了自己喜欢的ROM。每天信箱都被私信塞满,造成一部分人的私信没有及时回复,在此说声报谦!本期为大家带来三种APK反编译教程,重点介绍第三种! Google 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 Files\android-sdk-windows-1.6_r1\platforms\android-1.6\tools>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、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 <clinit>()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 <clinit>()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 复制代码认真一看,就知道: # static fields 定义静态变量的标记 # instance fields 定义实例变量的标记 # direct methods 定义静态方法的标记 # virtual methods 定义非静态方法的标记 以onKeyUp方法为例,其中定义了处理逻辑,if-eq p1, v0, :cond_8 表示如果p1和v0相等,则执行cond_8的流程: :cond_8 invoke-direct {p0}, Lcom/paul/test/a;->d()V 复制代码调用com.paul.test.a的d()方法 不相等: if-ne p1, v0, :cond_b 则执行cond_b的流程: :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 复制代码大概意思就是调用com.paul.test.a的setPressed方法,然后再调用父类View的onKeyUp方法 最后 return v0复制代码 该方法,能把外部引用的lib包类也解析出来,能开到包的全貌。缺点在于,解析出的smali文件并不是反编译出的java文件,可读性降低了,但仔细研究也能看出大概。 三、dex2jar + XJad 方法 一、反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址: dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:http://laichao.googlecode.com/files/jdgui.zip 具体步骤: 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的; 解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录 运行 dex2jar.bat classes.dex 生成 classes.dex.dex2jar.jar 生成jar文件的截图如下: 0_1314542835TY9r.gif (144.9 KB, 下载次数: 6) 下载附件 保存到相册 发送到手机 运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了 0_1314542895t80o.gif (805.93 KB, 下载次数: 2) 下载附件 保存到相册 发送到手机 HelloAndroid源码(编译前的apk源码对照)如下: 0_1314542945u7Th.gif (537.3 KB, 下载次数: 0) 下载附件 保存到相册 发送到手机 二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件 如果是只是汉化软件,这将特别有用。 首先还是下载工具,这次用到的是apktool 下载地址:http://code.google.com/p/android-apktool/downloads/list 下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载) 具体步骤: 将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar 在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图: 0_1314543082NXJ7.gif (519.97 KB, 下载次数: 1) 下载附件 保存到相册 发送到手机 命令行解释:apktool d [apk文件 ] [输出文件夹] 反编译的文件如下(AndroidManifest.xml为例): 0_131454313515no.gif (943.35 KB, 下载次数: 0) 下载附件 保存到相册 发送到手机 特别注意:你要反编译的文件一定要放在C盘的根目录里 将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下: 0_1314543163UrUV.gif (237.17 KB, 下载次数: 1) 下载附件 保存到相册 发送到手机 打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹: build dist 其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok 注 :上述android反编译教程,是在Windows 7 Ultimate 64bit ,测试通过 系列教程:android应用、ROM开发者入门FAQ JDK环境搭建以及APKTool和signapk整合工具及使用教程 Android平台ROM的定制及精简教程 Android APK反编译教程 Android ROM界面美化定制基础教程——第一屏开机动画修改 Android ROM定制——界面美化基础(framework-res、SystemUI修改) 收藏91 分享1 已有 19 人评分 经验 威望 理由 米2到手刷 + 3 我想知道,修改代码后怎么回编译。. hpasser + 1 感谢分享^_^ 原味小獃 + 1 MIUI 因你更精彩! 漾尘 + 2 MIUI 因你更精彩! 石头的悲剧 + 2 MIUI 因你更精彩! 音城之旅¢ + 3 精品文章^_^ 800小星星008 + 2 MIUI 因你更精彩! 灰涩头像 + 1 看不懂,纯路过。。。 刘扬0806 + 1 呵呵 这是你写的?为啥我看到别的一模一样. 寂寞松哥 + 5 感谢分享^_^ 无意义真相 + 3 很给力 my丶love + 5 亲,就是酱紫 tsuhv + 5 实在是看不懂 寂寞乀北辰 + 5 我很赞同 乀蒾夨De鱼 + 5 精品文章 luffy_wang + 10 + 1 给力啊 团支书 + 10 + 1 精品文章 “不自在” + 5 大虎 xzhlksh + 5 精品文章 经验 +74 威望 +2 查看全部评分 回复 举报 my丶love | 积分12477 经验8202 米 威望213 米 精华1 帖子2737 性别保密 在线时间1542 小时 版本3.8.30 注册2011-8-23 最近2013-12-20 --> my丶love 63主题2737帖子1万积分 发烧友俱乐部 寻找丶幸福 积分12477 机型MOTO Defy 签到次数70 MIUI版本3.8.30 私信 沙发 发表于 2012-4-1 20:48:14 | 哪里抄袭的。。。。。 已有 1 人评分 经验 理由 fw867 + 5 亲,不带这样的! 经验 +5 查看全部评分 做一个傻子多么好。 回复 支持 反对 举报 “不自在” | 积分1033 经验790 米 威望4 米 精华0 帖子151 性别男 在线时间255 小时 版本1 注册2012-3-31 最近2013-8-12 --> “不自在” 7主题151帖子1033积分 玩机大师 积分 1033, 距离下一级还需 967 积分 积分1033 机型小米手机1/1S 签到次数0 MIUI版本1 私信 板凳 发表于 2012-4-1 20:48:15 | 说好的沙发 已有 1 人评分 经验 理由 fw867 + 5 我很赞同 经验 +5 查看全部评分 回复 支持 反对 举报 northow | 积分16689 经验12919 米 威望46 米 精华2 帖子4342 性别保密 在线时间2278 小时 版本4.1.16 注册2011-4-1 最近2014-1-17 --> northow 86主题4342帖子1万积分 发烧友俱乐部长 北极冰雪 积分16689 机型小米手机2/2S 签到次数104 MIUI版本4.1.16 私信 地板 发表于 2012-4-1 20:48:17 | 沙发是不是多点? 已有 1 人评分 经验 理由 fw867 + 5 我很赞同 经验 +5 查看全部评分 新浪微博 Http://weibo.com/northow 遇见未来:跌倒了不要紧,爬起来继续哭... 回复 支持 反对 举报 寂寞乀北辰 | 积分4696 经验3970 米 威望12 米 精华0 帖子833 性别男 在线时间379 小时 版本1 注册2012-3-5 最近2012-10-29 --> 寂寞乀北辰 21主题833帖子4696积分 玩机之王 闷骚男 积分4696 机型Samsung I9000 签到次数2 MIUI版本1 私信 5# 发表于 2012-4-1 20:48:18 | 等你加分,我在评分 已有 1 人评分 经验 理由 fw867 + 5 我很赞同 经验 +5 查看全部评分 回复 支持 反对 举报 QQ20750760 | 积分3894 经验2946 米 威望3 米 精华0 帖子972 性别男 在线时间904 小时 版本4.1.10 注册2011-6-14 最近2014-1-17 --> QQ20750760 43主题972帖子3894积分 玩机之王 积分3894 机型小米手机2/2S 签到次数111 MIUI版本4.1.10 私信 6# 发表于 2012-4-1 20:48:23 | 本帖最后由 QQ20750760 于 2012-4-1 20:49 编辑 这么快沙发就没了....很有技术的帖子..学习中 已有 1 人评分 经验 理由 fw867 + 5 我很赞同 经验 +5 查看全部评分 回复 支持 反对 举报 xzhlksh | 积分47500 经验34960 米 威望439 米 精华0 帖子13214 性别男 在线时间3085 小时 版本3.8.9 注册2011-8-21 最近2014-1-4 --> xzhlksh 323主题1万帖子4万积分 社区版主 干的时间长了,心累了,疲了倦了,原谅我吧 积分47500 机型Nexus S 签到次数86 MIUI版本3.8.9 私信 7# 发表于 2012-4-1 20:49:02 | 前排支持 已有 1 人评分 经验 理由 fw867 + 5 我很赞同 经验 +5 查看全部评分 如果对我的解答有什么不清楚的地方,请点击左下角的回复按钮,否则我可能看不到哦~ 回复 支持 反对 举报 luffy_wang | 积分54201 经验38153 米 威望646 米 精华28 帖子12750 性别保密 在线时间6146 小时 版本4.1.17 注册2011-3-7 最近2014-1-18 --> luffy_wang 110主题1万帖子5万积分 分区版主 为小米发烧~~ 积分54201 机型小米手机1/1S 签到次数131 MIUI版本4.1.17 私信 8# 发表于 2012-4-1 20:49:42 | 写的好长~~占个座下来慢慢看~~~ 已有 1 人评分 经验 理由 fw867 + 5 我很赞同 经验 +5 查看全部评分 回复 支持 反对 举报 乀蒾夨De鱼 | 积分14057 经验11329 米 威望20 米 精华0 帖子2519 性别男 在线时间2537 小时 版本3.3.28 注册2011-5-1 最近2013-11-30 --> 乀蒾夨De鱼 12主题2519帖子1万积分 玩机之皇 MIUI为发烧而生 积分14057 机型小米手机1/1S 签到次数70 MIUI版本3.3.28 私信 9# 发表于 2012-4-1 20:50:18 | 前排、、、 已有 1 人评分 经验 理由 fw867 + 5 我很赞同 经验 +5 查看全部评分 求删UID 回复 支持 反对 举报 tsuhv | 积分5675 经验4633 米 威望11 米 精华0 帖子1269 性别保密 在线时间635 小时 版本4.1.3 注册2012-1-28 最近2013-5-14 --> tsuhv 25主题1269帖子5675积分 玩机之皇 解答组 积分5675 机型小米手机1/1S 签到次数24 MIUI版本4.1.3 私信 10# 发表于 2012-4-1 20:55:00 | 完全看不懂啊 如果对我的解答有什么不清楚的地方,请点击左下角的回复按钮,否则我可能看不到哦~ 回复 支持 反对 举报 12345678910... 50>返回列表 高级模式 B Color Image Link Quote Code Smilies 您需要登录后才可以回帖 登录 | 注册 本版积分规则 回帖后跳转到最后一页 浏览过的版块 MOTO Defy/Defy+休闲娱乐 小米手机2终身荣誉勋章 小米手机2终身荣誉勋章 小米手机3终身荣誉勋章 小米手机3终身荣誉勋章 MIUI 3000万 MIUI 3000万发烧友纪念勋章 MIUI 2000万 MIUI 2000万发烧友纪念勋章 MIUI三周年 MIUI三周年纪念勋章 百万壁纸 百万壁纸评审纪念勋章 关注微信 已关注微信 1000万用户纪念勋章 MIUI1000万用户纪念勋章 关注腾讯微博 已关注腾讯微博 关注新浪微博 已关注新浪微博 MIUI 100周 100周发布纪念勋章 我爱米兔 我爱米兔 小米手机元器件合体活动勋章 小米求合体勋章 小米系统 小米系统 MIUI俱乐部发烧友 MIUI俱乐部发烧友 年度优秀 MIUI年度优秀勋章 小米手机1终身荣誉勋章 小米手机1终身荣誉勋章 MIUI V5内测元勋 MIUI V5内测元勋勋章 VIP贵宾 社区VIP贵宾专属 MIUI官方网站 |小米旗下网站 |加入小米 |免责声明 |手机版 Copyright ? 2014 MIUI 京ICP备10046444号 快速回复 返回顶部 返回列表