Android学习必经之路--apk反编译
Android开发学习总结(六)—— APK反编译 - 孤傲苍狼 - 博客园
孤傲苍狼
Android开发学习总结(六)—— APK反编译
一、准备必要工具
工欲善其事,必先利其器,首先我们要下载好反编译apk时需要的相关工具
1.1、使用工具
- apktool (资源文件获取)
- dex2jar(源码文件获取)
- jd-gui (源码查看)
1.2、工具介绍
apktool
作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看
dex2jar
作用:将apk反编译成java源码(classes.dex转化成jar文件)
jd-gui
作用:查看APK中classes.dex转化成出的jar文件,即源码文件
1.3工具下载
apktool下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads
下载好之后得到一个如下图所示的jar文件
dex2jar下载地址:http://sourceforge.net/projects/dex2jar/files/
下载完成之后,得到一个如下图所示的压缩包
jd-gui下载地址:http://jd.benow.ca/
下载完成之后,得到一个如下图所示的压缩包:
到此,需要使用到的3个相关工具都下载好了,在这里说明一下jd-gui的下载,我从官方网站上点击下载时会经常出现如下图所示的问题
但是多试几次又可以下载了,所以如果有遇到这个问题的朋友们不妨多试几次,或者从别的地方下载jd-gui,jd-gui算是做Java开发的一个必备工具了,用它来将class反编译成java源代码是非常方便的,网上搜索一下一般都可以下载到,只不过版本不一定是最新的。
二、Apk反编译流程
为了方便进行反编译,我们将上述下载好的3个工具统一放到一个文件夹中,例如:
然后将【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分别解压到当前文件夹,如下图所示:
2.1、使用apktool反编译apk得到图片、XML配置、语言资源等文件
进入CMD命令行,如下:
切换到上述的3个工具的所在目录,如:E:\AndroidDevelopTool\Android反编译工具包
接下来我们要做的就是运行apktool_2.0.1.jar这个jar文件来将apk文件进行反编译,在java中,运行可执行jar包的命令是:
java -jar jar包名.jar
使用如下的命令运行apktool_2.0.1.jar反编译MMTS-release-1.0.2.apk
java -jar apktool_2.0.1.jar d -f E:\AndroidDevelopTool\Android反编译工具包\测试apk\MMTS-release-1.0.2.apk -o MMTS
这个命令是启动apktool_2.0.1.jar将位于【E:\AndroidDevelopTool\Android反编译工具包\测试apk\】目录下的”MMTS-release-1.0.2.apk”这个apk反编译,然后将反编译生成的文件存放到当前目录(apktool_2.0.1.jar所在的目录,也就是”E:\AndroidDevelopTool\Android反编译工具包”目录)下的一个【MMTS】文件夹中。这个文件夹的名字是可以随便取的,喜欢叫啥都行。
执行反编译操作:
反编译成功后,会在当前目录(E:\AndroidDevelopTool\Android反编译工具包)下生成一个MMTS文件夹,打开MMTS里面就有反编译后生成的文件,如下图所示:
打开MMTS文件夹,就可以看到反编译后的生成的文件,如下图所示:
生成的文件和文件夹当中,我们关心的是【res】文件夹中和AndroidManifest.xml文件,打开res文件夹,里面就有我们想要看到的东西了,如下图所示:
想查看哪个xml文件就使用文本编辑器打开看看吧,反正全部都可以看到了。以上就是使用apktool这个工具将一个apk反编译得到图片、XML配置、语言资源等文件的过程。
2.2、使用dex2jar反编译apk得到Java源代码
将要反编译的APK后缀名改为.rar或者 .zip,并解压,得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的),如下图所示:
将获取到的classes.dex放到之前解压出来的工具【dex2jar-2.0】文件夹内,如下图所示:
在命令行下定位到dex2jar.bat所在目录,输入”d2j-dex2jar classes.dex“,效果如下:
命令执行完成之后,在当前目录下就可以看到生成的Jar文件了,如下图所示:
反编译classes.dex得到classes-dex2jar.jar文件之后,就可以使用【jd-gui】工具将class文件反编译成java源代码了
使用jd-gui打开classes-dex2jar.jar就可以看到源代码了,如下图所示:
JD-GUI虽然可以将class反编译成java源代码,但是对于一些被混淆过的class,反编译的效果就不是那么理想了,被混淆过的class反编译后的效果图(类文件名称以及里面的方法名称都会以a,b,c….之类的样式命名):
以上步骤是我亲自实践过之后一步步整理出来的,对照着做应该不会有太大问题。
三、Apk反编译注意问题
3.1、apktool版本太旧导致反编译失败的问题
之前用过了apktool这个工具的一些旧版本,发现总是反编译不成功,在执行反编译时会出现如下错误:
Exception in thread “main” brut.androlib.AndrolibException: Could not decode arsc file
这个问题是因为apktool版本过低导致,而解决这个问题的办法就是使用最新版本的apktool就可以了,最新版本的下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads
3.2、apktool执行反编译命令出现”Input file was not found or was not readable”的问题
这个问题是因为apktool升级到2.0以上时,使用方式已经替换,格式为:apktool d [-s] -f <apkPath> -o <folderPath>
好了,关于反编译apk的内容就这么多了。
最后,给大家分享我下载好的那三个相关工具,下载地址:http://pan.baidu.com/s/1jGKSQyU
posted on 2015-07-26 12:48 孤傲苍狼 阅读(…) 评论(…) 编辑 收藏
刷新评论 刷新页面 返回顶部
$(function () { setTimeout(function () { incrementViewCount(cb_entryId); }, 50); deliverAdT2(); deliverAdC1(); deliverAdC2(); loadNewsAndKb(); loadBlogSignature(); LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid); GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate); loadOptUnderPost(); GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate); });
导航
- 博客园
- 首页
- 联系
- 订阅
- 管理
<div id="blog-calendar" style="display:none"></div><script type="text/javascript">loadBlogDefaultCalendar();</script>
- 1
公告
统计
- 随笔 - 275
- 文章 - 0
- 评论 - 1364
<div id="blog-sidecolumn"></div><script type="text/javascript">loadBlogSideColumn();</script>
- 1
Powered by:
博客园
Copyright © 孤傲苍狼
Android学习必经之路--apk反编译相关推荐
- mono桌面应用移到android,从原生APK反编译,拿到界面,用于mono for android
从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...
- Android APK反编译
转自:http://blog.csdn.net/ithomer/article/details/6727581 一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的d ...
- 【转】Android APK反编译就这么简单 详解(附图)
转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...
- Android APK反编译具体解释(附图)
这段时间在学Android应用开发,在想既然是用Java开发的应该非常好反编译从而得到源码吧,google了一下,确实非常easy,下面是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的 ...
- Android APK反编译详解(附图)(转)
原文转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到 ...
- Android APK反编译就这么简单 详解
转载原文:http://blog.csdn.net/vipzjyno1/article/details/21039349/ 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些 ...
- Android APK反编译详解 .
这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件, ...
- Android APK反编译详解(转)
转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代 ...
- Android APK反编译及逆向工程
一. 分析已经打好的apk. 首先来简单的说明下Apk文件本质上其实是一个zip包.我们直接进行解压就能看到其中的目录. 1. 目录说明 AndroidManifest.xml:应用的全局配置文件 c ...
最新文章
- java语言用什么编程_使用什么编程语言开发Java?
- 用递归的方法求s = k! + n! / m!的值
- iOS 集成银联支付swift
- CodeFirst体验之且行且珍惜
- apk私钥_使用source/build/target/product/security/中的密钥将apk签署为系统
- boost::mp11::mp_nth_element_q相关用法的测试程序
- 这可能是人工智能、机器学习和大数据领域覆盖最全的一份速查表
- Linux下/var/spool/clientmqueue空间不足的解决
- html读取C#参数问题
- 微信小程序modal自定义文本框
- Java开发人员应该知道的三件事
- 变量是否在数组内c语言,函数内创建的数组在调用后,是否就不存在
- Springboot starter开发之traceId请求日志链路追踪
- R数据分析:如何在R中使用mutate
- 会员卡应用管理系统源码 支持收银+积分管理+商城营销功能 含详细搭建教程
- 基于Zookeeper的ResourceManager-HA配置
- .Net下的分库分表帮助类——用分库的思想来分表 - 秋夜 - 博客园
- 邢不行 | Python量化 + 数字货币 + 轮动 = 4年1000倍【附代码】
- Spring MVC 防止XSS注入
- 10.BACNet APDU 编码
热门文章
- 十九、RTC实时时钟
- 人工智能作业 八数码启发式搜索与bfs比较
- 微信小程序之swiper无限轮播实现效果
- 【移动应用开发】实验2Android UI
- office2007的Excel当中如何打开两个独立窗口
- mac创建快捷新建文本方式
- 【论文笔记之 FDAF and MAF】Frequency-Domain and Multirate Adaptive filtering
- EXCEL+方方格子中的翻译工具+百度翻译=实现批量翻译
- 小龙虾炒菜机器人_开挖掘机炒小龙虾?机器人餐厅?吃饭竟也能如此炫酷!
- 在Python里,用股票案例讲描述性统计分析方法(内容来自我的书)