Android反编译apk并重新打包签名(Mac环境)
工具下载
- apktool :https://ibotpeaches.github.io/Apktool/install
- dex2jar:https://github.com/pxb1988/dex2jar
- jd-gui:http://jd.benow.ca
![](http://upload-images.jianshu.io/upload_images/6544996-472568f76dbaeeba.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
然后点击find newest here下载apktool.jar,选择第一个下载最新版本
![](http://upload-images.jianshu.io/upload_images/6544996-6a916d157a26100d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
下载完把apktool_2.3.3.jar重命名为apktool.jar,然后把apktool.jar和apktool一起拷贝到/usr/local/bin路径下
![](http://upload-images.jianshu.io/upload_images/6544996-f764dff03566f2f8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-1848cd2bf1aa3949.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
这样环境就配好啦,打开终端,输入apktool
命令,看到以下输出说明apktool配置成功
![](http://upload-images.jianshu.io/upload_images/6544996-1dbaff995b1934e3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
新建个MyTest目录方便管理,随便放个test.apk进去作为测试包
![](http://upload-images.jianshu.io/upload_images/6544996-1dadc1252d09d075.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
反编译
终端输入cd /Users/zachary/zachary/MyTest
进入到测试apk所在目录,输入apktool d test.apk
开始反编译
![](http://upload-images.jianshu.io/upload_images/6544996-76ffa386bc0e0448.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
编译结束可以看到MyTest目录下多了个test文件夹,里面就是反编译以后的产物,我们想要的AndroidManifest.xml和res/.等资源文件
![](http://upload-images.jianshu.io/upload_images/6544996-b135ba45ea1cfe60.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
此时资源文件反编译就完成了,下面继续反编译java代码,这是就要用到dex2jar和 jd-gui
下载完dex2jar和 jd-gui解压一下就可以了,复制到MyTest目录方便操作
![](http://upload-images.jianshu.io/upload_images/6544996-51096231d3ab2c69.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
终端进入MyTest目录,输入命令sh dex2jar-2.0/d2j-dex2jar.sh test.apk
(如果提示Permission Deny权限问题,先输入命令chmod +x dex2jar-2.0/d2j-dex2jar.sh
改一下权限就好了)
![](http://upload-images.jianshu.io/upload_images/6544996-cdcc251093a43600.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-1c0efc36f3060050.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
回编译
刚才我们执行apktool d test.apk
反编译得到了test目录
![](http://upload-images.jianshu.io/upload_images/6544996-b54c48a020289f79.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
回编译就是执行命令apktool b test
![](http://upload-images.jianshu.io/upload_images/6544996-72fd8c414f0cad5e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-0e323421648aa96a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-03280b9c7f58d794.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
dist目录下存放的是重新打包后的apk文件
![](http://upload-images.jianshu.io/upload_images/6544996-f89cf157691c609d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
重新签名
复制签名文件到dist目录下方便操作
![](http://upload-images.jianshu.io/upload_images/6544996-4a00ef6fd99b80d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
终端进入dist目录,执行命令jarsigner -verbose -keystore [your_key_store_path] -signedjar [signed_apk_name] [usigned_apk_name] [your_key_store_alias] -digestalg SHA1 -sigalg MD5withRSA
字段说明:
- [your_key_store_path]:密钥所在位置的绝对路径
- [signed_apk_name]:签名后安装包名称
- [usigned_apk_name]:未签名的安装包名称
- [your_key_store_alias]:密钥的别名
因为我们把秘钥和test.apk放在同一路径,所以密钥所在位置的绝对路径直接填testkey就好啦,macjenkinskey是我的秘钥别名,别误会(邪恶.jpg)
![](http://upload-images.jianshu.io/upload_images/6544996-ea94e5867a0f2fc3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
输一下密码,看不到输入的,开始签名
![](http://upload-images.jianshu.io/upload_images/6544996-762f46f7ee6fd17b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-b88f3bc31b190296.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
后话
反编译的时候,也可以把test.apk的拓展名改成test.zip解压出来
![](http://upload-images.jianshu.io/upload_images/6544996-2522bb46273e4f07.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-668ed8be3f41cc07.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
终端进入dex2jar-2.0路径下,执行命令./d2j-dex2jar.sh classes.dex
![](http://upload-images.jianshu.io/upload_images/6544996-e75986e1d89310d6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-26d8d1fe11135bb5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-dace54b8597b60c8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
![](http://upload-images.jianshu.io/upload_images/6544996-831e2b5a9a8c61f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/180)
Android反编译apk并重新打包签名(Mac环境)的更多相关文章
- Android反编译odex然后重新打包
#Android反编译odex然后重新打包 最近不知道怎么回事,突然把我那刷了氧OS的root了,然后就开始好奇起来氢OS所带有的那些本地化的东西,比如通话录音就是典型的一个之一.其中也做了很多的尝试 ...
- [Android]反编译apk + eclipse中调试smali
从来没有想过反编译apk是来的如此方便,并且还可以修改后重新编译运行,这比在win下修改pe容易多了,感谢apktool和smali工具的作者提供这么好的工具. 跟踪apk一般的做法是在反编译的sma ...
- Android 反编译apk 详解
测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取) 下载 dex2jar(源码文件获取) 下载 jd-gui (源码查看) ...
- Android反编译和二次打包
参考:APK反编译 一.工具介绍: 1.解压工具 2.JDK 3.apktool: aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,反编译生 ...
- Android 反编译apk
工具介绍: apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 下载地址:https://bitbucket.org/iBotPeaches/apktool/downl ...
- Android 反编译Apk提取XML文件
Apktool https://ibotpeaches.github.io/Apktool/install/ 下载地址:Apktool https://bitbucket.org/iBotPeache ...
- 【转】利用apktool反编译apk,并且重新签名打包
网站:https://ibotpeaches.github.io/Apktool,下载安装好apktool. 我的安装在 C:\Users\Administrator\Downloads\apktoo ...
- Android反编译APK
http://blog.csdn.net/vipzjyno1/article/details/21039349/ 关于被加壳工具添加我的apk如何脱壳 http://www.blogfshare.co ...
- Android反编译(三)之重签名
Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...
随机推荐
- 程序员 面试题【前端,java,php】
跬步客 网址:https://www.kuibuke.com/wall/index
- Codeforces 101623E English Restaurant - 动态规划
题目传送门 传送门 题目大意 餐厅有$n$张桌子,第$i$张桌子可以容纳$c_i$个人,有$t$组客人,每组客人的人数等概率是$[1, g]$中的整数. 每来一组人数为$x$客人,餐厅如果能找到最小的 ...
- 关于C#的Main(String[] args)参数输入问题
关于C#的Main(String[] args)参数输入问题 指定相关的测试代码 首先,写一个用于测试的关于Main(String[] args)参数输入有关的代码类,如下: using System ...
- EvansClassification
EvansClassification In his excellent book Domain Driven Design, Eric Evans creates a classification ...
- MyBatis进阶(四)
mapper.xml文件的编写 mapper.xml映射文件实现数据库和实体类之间的映射关系,定义操作数据库的sql语句. 主体部分 文件头部 <?xml version="1.0&q ...
- vue 开发环境搭建
https://www.cnblogs.com/goldlong/p/8027997.html 1,按照nodeJS. 2,nodejs 包含npm. 3, 执行: npm install -g @v ...
- Linux——高效玩转命令行
[0]统计文件or压缩文件的行数 zcat file.gz | sed -n '$=' #迅速.直接打印出多少行.-n 取消默认的输出,使用安静(silent)模式 '$=' 不知道是什么 ...
- 数据类型 varchar 和 uniqueidentifier 在 add 运算符中不兼容
select '<a href="/'+a.id +'" title="'+ a.title +'">'+a.Title+'</a>' ...
- Dart学习-操作符
dart定义了下表所示的运算符.你可以重写许多这些运算符. 描述 运算符 一元后缀 expr++ expr-- () [] . ?. 一元前缀 -expr !expr ~expr ++expr --e ...
- allure--下的各装饰器的翻译及自己的总结
翻译图-快捷键 红色字体感觉用的会比较多,起码现在感觉应该是比其他的多一点 lable应该没有什么特殊的用法,只是对下面方法的一个汇总(或者可以这么说,下面的方法是lable更具体的实现) sever ...