文档章节

Mac环境下Android APK包反编译详解

w
 walala_Lee
发布于 2015/06/24 16:48
字数 838
阅读 54
收藏 0

一、为什么需要对APK包进行反编译

公司原有的一个产品包括Android以及iOS两个版本,Android的源码不小心遗失了。但是当前这个产品又需要针对某个潜在客户做一些定制化,重建Android项目看来是必由之路了--总不能再开发一遍吧 :)。还好当时发布APK包的时候没有对代码做混淆,有救了!


二、开发环境

以下是我当前使用的开发环境:

操作系统:Mac OS 10.8.4

Android开发环境:ADT

由于我使用的是Mac系统,接下来介绍的步骤部分都是Mac系统相关的。对于Windows或者Linux的反编译步骤,大家可以参照以下。(从我的观点看,步骤还是基本相同的)


三、反编译步骤

下面就直接列举以下反编译APK文件的详细步骤及方法:

第一步:

在电脑中创建一个新的目录并将待反编译的APK文件放到该目录中。 将APK文件把文件后缀从.apk改成.zip,接下来将.zip文件解压。在解压出来的目录中你可以得到classes.dex这个文件。到此为止,你已经可以看到一些图形资源,但是xml文件以及java源代码文件还没有。 所以,得继续加油!


第二步:

从以下链接下载dex2jar,并把下载下来执行文件拷贝到.zip文件的解压目录。 打开Terminal并切换到.zip的解压目录,在Terminal中输入 ./d2j-dex2jar.sh classes.dex,按回车键后,在.zip解压目录会生成一个classes.dex.dex2jar文件。 接着通过以下链接下载Mac版的jdgui工具。下载完工具后双击改工具,运行工具后选择打开文件以打开我们刚生成的classes.dex.dex2jar.jar文件。通过在jd-gui中选中File->Save All Sources即可以将所有的class保存成java源代码文件。 到此我们已经得到想要的Java源代码了,但是解出来的XML文件还是不可读,还得继续努力!


第三步:
再创建一个新的目录,并在该目录中执行以下操作:

1、将需要反编译的.apk文件放到该目录

2、下载apktool v1.x以及Mac版的apktool install mac到该目录

3、下载framework-res.apk文件到该问路(并不是所有的待反编译的APK文件都需要framework-res.apk文件)

4、打开Terminal窗口

5、在Terminal中定位到该目录并运行以下命令:./apktool if framework-res.apk

6、在Terminal中再输入如下命令:./apktool d "myapkname".apk。 注:myapkname为你需要转换的apk包名称

执行完命令后,在新目录中找到新创建的 "myapkname" 目录,在该目录中你将得到可读的AndroidManifest.xml以及各种drawable资源。


第四步:

接下来就是将第二步以及第三步得到的Java原文件、资源文件放到同一目录,配置项目依赖jar包。。。


四、引用地址:
http://stackoverflow.com/questions/3593420/android-getting-source-code-from-an-apk-file


五、其他参考文章:
Windows环境下Android反编译详解
http://blog.csdn.net/ithomer/article/details/6727581


六、参考资源下载连接:
dex2jar:
http://code.google.com/p/dex2jar/
jdgui:
http://java.decompiler.free.fr/?q=jdgui
android-apktool:
https://code.google.com/p/android-apktool/downloads/list

工具包集合:

http://download.csdn.net/detail/missautumn/6022245

本文转载自:http://blog.csdn.net/missautumn/article/details/10415843

共有 人打赏支持
w
粉丝 3
博文 167
码字总数 50381
作品 0
深圳
Android APK反编译详解(附图)(转)

原文转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是...

巴顿
2015/01/16
0
0
(Mac)反编译Android APK详细操作指南[ApkTool,dex2jar,JD-GUI]

早在4年前我曾发表过一篇关于《Android开发之反编译与防止反编译》的文章,在该文章中我对如何在Windows平台反编译APK做了讲解,如今用Mac系统的同学越来越多,也有很多朋友问我能否出一篇关...

CrazyCodeBoy
05/11
0
0
基于Android studio动态调试smali全过程

1 工具和环境 Android studio 用于集成idea插件和导入smali源码 idea插件 插件下载 或者在studio中搜索Smalidea进行插件下载(要翻墙) 在Android studio中通过idea插件来调试smali和在idea中...

gavinme
07/23
0
0
android apk反编译详解

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。 在此郑重声明,贴出来的目的不是为了去破解人家的软...

刘小米
2014/10/30
0
0
Android APK反编译详解

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。 在此郑重声明,贴出来的目的不是为了去破解人家的软...

lhanoo
2012/02/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js实现产生n个随机数,并且随机数之和是固定值

function getrandom(minnum , maxnum ,total,size){ var num = total; //定义整数 var length= size; //定义多个整数的数量 var numArr = []; while(length > 1){ var rnd = Math.floor(Mat......

开源昕昕
18分钟前
1
0
精选Spring Boot三十五道必知必会知识点!

Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家。本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spring Boot、Spring MVC 和 Sp...

Java填坑之路
19分钟前
2
0
MyBatis学习笔记

相关文档 mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译 MyBatis 处理sql中的 大于,小于,大于等于,小于等于

OSC_fly
20分钟前
0
0
Gradle从不同地方复制文件到一个文件夹/打zip包

复制 task copySDK(type: Copy, dependsOn: [":fatJarTask"]) { delete JAR_NAME delete SDK_OUT_PATH delete "$ROOT_BUILD_PATH/$SDK_ZIP_NAME" into('/jniLibs') {......

SuShine
20分钟前
1
0
CentOS关闭占用端口,修改Apache默认端口,并重启Apache

查找并关闭进程 在Linux系统中可以使用lsof命令和kill命令,两个命令配合查找并关闭占用端口的进程 查看某一端口使用情况的命令: lsof -i:端口号 效果如下,PID即进程的ID 根据PID关闭进程,...

临江仙卜算子
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部