Mac上反编译Android apk安装包
什么是反编译
我们知道,Android的程序打包后会生成一个APK文件,这个文件可以直接安装到任何Android手机上,因此,反编译就是对这个APK进行反编译。Android的反编译分成两个部分:
一个是对 代码 反编译,也就是java文件的反编译。
一个是对 资源 反编译,也就是res文件的反编译。
反编译结构图

反编译并查看java代码的工具:
dex2jar: 把dex文件转成jar文件下载地址: https://sourceforge.net/projects/dex2jar/
jd-gui: 这个工具用于将jar文件转换成java代码
1 解压dex2jar。使用Dr.Unarchiver解压dex2jar-2.0.zip。
2 安装JD-GUI。官网http://jd.benow.ca/上下载的dmg安装包,无法安装。需要使用Mac上的软件包管理工具Homebrew来安装。
brew cask install jd-gui

反编译安装包、重新打包的工具
APKTool: 本文重要工具,APK逆向工具,使用简单下载地址: http://ibotpeaches.github.io/Apktool/install/

1 将下载的apktool、apktool_2.2.2.jar分别重命名为apktool、apktool.jar,拷贝到/usr/local/bin中

2 增加可执行权限
chmod +x apktool apktool.jar
反编译并查看java代码
1 解压后的文件夹中有很多文件。在Mac上我们需要用到dex2jar的是这三个东西(windows上对应用bat文件):
d2j-dex2jar.sh
d2j_invoke.sh
lib

2 AndroidStudio 打包好的 APK文件 的后缀,需改为 .zip ,然后使用Dr.Unarchiver解压 。从解压的文件中找到 classes.dex 文件,并将其放入 dex2jar 同一目录下,如下:

3 cmd中进入到dex2jar-2.0文件夹, 先修改权限,再反编译
chmod +x d2j-dex2jar.sh
chmod +x d2j_invoke.sh
./d2j-dex2jar.sh classes.dex
4 使用Finder->应用程序->JD-GUI.app,打开生成的classes-dex2jar.jar文件。


反编译安装包
1 使用apktool命令反编译,d是decode解码的意思,-o是输出文件目录。/usr/local/bin中会生成demo文件夹。
apktool d /Users/administrator/Desktop/demo.apk -o /Users/administrator/Desktop/demo
如果提示demo文件夹已存在,则使用-f参数强制覆盖。
apktool d /Users/administrator/Desktop/demo.apk -f -o /Users/administrator/Desktop/demo
2 打开桌面上的demo文件夹。
smaili文件夹存放java类文件。Android系统有自己的虚拟机Dalvik(一个冰岛渔村名字),反编译后生成的java类文件的扩展名是.smali,而不是.class。

修改安装包
修改apktool反编译后的文件夹中的内容。res文件夹中直接替换,java代码需参考smali语法修改.smali文件。
重新打包
cmd中进入桌面,执行命令。b是build的意思。
apktool b demo -o myDemo.apk
Mac上反编译Android apk安装包的更多相关文章
- MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的, ...
- Mac 下反编译Android APK
准备工作:安装ApkTool.dex2jar.JD-GUI 安装ApkTool 1.下载ApkTool.大家可以从 https://ibotpeaches.github.io/Apktool/inst ...
- mac下反编译android apk
所需要的工具 http://pan.baidu.com/disk/home#path=%252Fandroid%252Fdecompile%252Fapktool-all apktool用于将资源文件 ...
- 反编译Android APK及防止APK程序被反编译
怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式 ...
- 实例具体解释:反编译Android APK,改动字节码后再回编译成APK
本文具体介绍了怎样反编译一个未被混淆过的Android APK,改动smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk不管输入什么样的username和password都能 ...
- Android APK安装包瘦身[转]
很显然,APK安装包越小越好.下面从代码,资源文件,使用策略几个方面简要介绍下: 代码 保持良好的编程习惯,不要重复或者不用的代码,谨慎添加libs,移除使用不到的libs. 使用proguard混淆 ...
- linux下反编译android apk
1.所需要的工具 1)apktool,功能:反编译出apk所需要的资源文件和布局设置文件等, 下载地址:https://code.google.com/p/android-apktool/downlo ...
- 『原』在Linux下反编译Android .apk文件 使用apktool dex2jar JD-eclipse
一.使用apktool 将 apk反编译生成程序的源代码和图片.XML配置.语言资源等文件 具体步骤: (1)下载反编译工具包:apktool 官方的打不开 http://apktool.shouji ...
- 反编译android APK
我们经常会在如下的情况使用反编译 1.看到别人应用中的酷炫功能,想知道是如何实现的 2.别人应用的素材排版好漂亮,想套用模仿 百度一下就已经有一大堆反编译的教程了,我还是坚持学习记录一下. A ...
随机推荐
- Spring Cloud (6)A config 服务端配置 与github通信
1. 在git上创建一个库,并复制库地址 2.用git clone项目到本地,并创建application.yml application.yml 内容 --下一步 3.将application.ym ...
- Django 之多表查询 与多表的使用
1.django的多表查询 主要区分为: 正向查询 逆向查询 1. 多表查询: 是一个复杂的查询,他分为对象查询和__模糊查询两种方式 2. 多表查询: 又分为 一对一查询, 一对多查询, 多对 ...
- css3 之border-radius 属性解析
在css 设置样式的时候,有时候会用到将元素的边框设置为圆形的样子的时候,一般都是通常直接设置:{border-radius:5px },这样就行了,但是到底是什么意思,一直以来都没有弄明白,只是知道 ...
- Matplotlib中文乱码问题
一.找到并修改matplotlibrc文件 进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目录,用记事本打开matplotlibrc文件:找到f ...
- Cookie安全小结
Cookie机制:一般来说,同域内浏览器中发出的任何一个请求都会带上Cookie,无论请求什么资源,请求时,Cookie出现在请求头的Cookie字段中.服务端响应头的Set-Cookie字段可以添加 ...
- git rebase 合并提交 解决超过100M文件的提交不能推送问题
git log 现在可以看到有3个提交: change 1.mp4 size to small //发现不能推送,又改回小于100M add 1.mp4 big 改变为超过100M add 1.mp4 ...
- 构造函数,C++内存管理,内存泄漏定位
构造函数 1.构造顺序 虚基类构造函数,基类构造函数,类对象构造函数,自己的构造函数 2.必须使用初始化列表 (1) 引用成员,常量成员: (2) 基类没默认构造函数(自己重载覆盖了), (3)类对象 ...
- C++多态,虚函数,虚函数表,纯虚函数
1.多态性 指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作. C++支持两种多态性:编译时多态性,运行时多态性. a.编译时多态性:通过重载函数实现 ,模板(2次编译) ...
- LG Optimus L90 [D415] T-Mobile 刷机
1 先使用[ROOT大师]ROOT手机. 2 执行以下ADB命令. adb shell su //备份 dd /by-name/laf of=/sdcard/laf.img. //清除 dd /by- ...
- javascript 中Array.prototype.sort 函数的用法
来源:http://www.jb51.net/article/5769.htm JavaScript中对变量的操作都是通过引用方式,而对数组也一样. 前两天想要对一个数组进行复制,一直苦于找不到办法( ...