Uubuntu 14.04 LTS反编译apk
使用apktool反编译apk
1、安装apktool
apktool是Google提供的APK编译工具,能够反编译及回编译apk,需要Java环境的支持(在此不再赘述Java的安装与配置,详见《Ubuntu14.04 LTS安装JDK及其环境变量配置和Eclipse的安装》)。
下载apktool1.5.2.tar.bz2、apktool-install-linux-r05-ibot.tar.bz2两个包,并将这两个包里面的文件解压到同一个目录下(例如,我就解压到自己使用的账户目录下的apktool文件夹,绝对路径是/home/geek/apktool)。解压后得到aapt、apktool、apktool.jar三个文件。如图1所示:

图1
apktool命令详解
为了方便演示,反编译apk的时候把要反编译的apk文件放到apktool安装目录下,并切换到apktool目录下,以下为命令详解:
decode
该命令用于进行反编译apk文件,一般用法为:apktool d <file.apk> <dir>
<file.apk>代表要反编译的apk文件的路径,一定要绝对路径;<dir>代表反编译后的文件的存储位置,同样也要绝对路径。示例如下:
geek@GEEK:~$ cd apktool/
geek@GEEK:~/apktool$ ./apktool d CM_WiFi.apk /home/geek/apktool/CM_WiFi
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /home/geek/apktool/framework/1.apk
I: Loaded.
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Done.
I: Copying assets and libs...
geek@GEEK:~/apktool$
切换到CM_WiFi目录下,可以看到这里有apk的源码(smali)、图片、xml配置和语言配置等等信息。整个反编译解包过程如图2所示。

图2
build
该命令用于编译修改好的文件,一般用法为apktool b <dir>
这里的<dir>就是刚才你反编译时输入的<dir>,输入这行命令后,如果一切正常,你会发现多了2个文件夹build和dist,其中build里面存储着编译过程中逐个编译的文件,而dist里面则存储着最终打包的apk文件。示例如下:
geek@GEEK:~$ cd apktool
geek@GEEK:~/apktool$ ./apktool b /home/geek/apktool/CM_WiFi
I: Checking whether sources has changed...
I: Smaling...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs...
I: Building apk file...
geek@GEEK:~/apktool$
切换到CM_WiFi目录下,可以看到里面多了2个文件夹build和dist,整个编译打包过程如图3所示

图3
3、install-framework
该命令用于为apktool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。
使用dex2jar和JD-GUI两个工具查看Java源码
下载dex2jar和jd-gui两个包,解压(我是解压到当前用户根目录下)。将apk文件解压或者直接提取classes.dex文件,将其放到dex2jar目录下。打开终端切换到dex2jar目录下,输入【./dex2jar.sh classes.dex 】命令得到.jar文件。

图4
进入jd-gui解压安装的目录,双击jd-gui这个文件打开jd-gui,然后我们就可以打开这个.jar文件查看源码了。

图5
Ubuntu 14.04 LTS下的jd-gui跑不起来怎么办?不要慌,这时我们只要在终端执行如下命令即可。
sudo apt-get install libgtk2.0-0:i386 libxxf86vm1:i386 libsm6:i386 lib32stdc++6
注:本android反编译教程,是在Ubuntu 14.04 LTS 64bit环境下测试通过
Uubuntu 14.04 LTS反编译apk的更多相关文章
- Ubuntu 14.04 LTS 64bit 编译SDL的问题
http://blog.csdn.net/jhting/article/details/38523945 Ubuntu 14.04 LTS 64bit 编译SDL的问题 分类: C/C++2014-0 ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程
Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程 在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...
- 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码
原文网址:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码 ...
- 基于Ubuntu 14.04 LTS编译Android4.4.2源码
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS ...
- 基于Ubuntu 14.04 LTS编译Android4.4.2源代码
转载自:雨水:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码 ...
- [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程
本文转载自:[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...
- Ubuntu 14.04 LTS 安装和配置Bochs
Ubuntu 14.04 LTS 安装和配置Bochs 系统是:Ubuntu 14.04 LTS 64位 安装的是:bochs-2.6.8 Bochs 需要在 X11 环境下运行,因此你的 ...
- 在Ubuntu 16.04 LTS下编译安装OpenCV 4.1.1
目录 一 安装前的准备 二 编译并安装OpenCV 4.1.1 注:原创不易,转载请务必注明原作者和出处,感谢支持! OpenCV目前(2019-8-1)的最新版本为4.1.1.本文将介绍如何在Ubu ...
随机推荐
- 使用log4javascript记录日志
1.定义log4js服务类,用于初始化log4javascript相关参数 log4jsService.js //启用javascript 日志功能 var logger = log4javascri ...
- 【CentOS】Eclipse插件egit使用
1.简介 2.安装 3.配置 4.使用 5.补充说明 参考资料: http://yufenfei.iteye.com/blog/1750124 1.简介 EGit就是一款Eclips ...
- 【BZOJ】【3790】神奇项链
Manacher算法/DP 找出所有的回文串,看做是一个个线段,那么问题就转化成了用最少的线段将整个区间覆盖起来,可以重叠,那么这就是一个DP了= = Orz ZKY大爷,让蒟蒻开眼界了……头一次知道 ...
- 【bzoj1007】[HNOI2008]水平可见直线
1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5932 Solved: 2254[Submit][Sta ...
- JS模板引擎 :ArtTemplate (2)
上一篇初略的介绍了一下javascript中的模板引擎,有兴趣的可以戳 这里 . 这一篇将带着大家一起做一个简易的模板引擎, 上一篇介绍到:模板引擎其实做的就是两件事. 根据一定的规则,解析我们所定义 ...
- [工作积累] NDK通过Java获取package name 和version
////////////////////////////////////////////////////////////////////////// //Java code snippet //get ...
- vector 的resize 和 reserve
首先声明,都是转载的,理解知识为主要目的. http://www.cnblogs.com/zahxz/archive/2013/02/20/2918711.html C++内置的数组支持容器的机制,但 ...
- extern关键字的使用
A.置于变量或者函数前,以标示变量或者函数的定义在别处,提示编译器遇到此变量和函数时在其他地方寻找其定义. B.可用来进行链接指定. 1.使用extern声明外部变量 1.1在一个文件内声明外部变量 ...
- Asp.net的服务器推技术 (Server Push)
在以往的和服务器端通信技术中,我们多数使用的是AJAX轮询式访问,也就是在Javascript中控制时间间隔,然后每隔一段时间就访问一次服务器,然后获得数据或通知.但是这种轮询方式的访问有90%是在做 ...
- CSS自定义select下拉选择框(不用其他标签模拟)
今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...