古人已用三冬足,年少今开万卷余。这篇文章主要讲述Android反编译apk并重新打包签名(Mac环境)相关的知识,希望能为你提供帮助。
工具下载
- apktool :https://ibotpeaches.github.io/Apktool/install
- dex2jar:https://github.com/pxb1988/dex2jar
- jd-gui:http://jd.benow.ca
文章图片
根据apktool网站提示的下载方法,右击wrapper script,链接存储为apktool,不要带拓展名
文章图片
然后点击find newest here下载apktool.jar,选择第一个下载最新版本
文章图片
下载完把apktool_2.3.3.jar重命名为apktool.jar,然后把apktool.jar和apktool一起拷贝到/usr/local/bin路径下
文章图片
文章图片
这样环境就配好啦,打开终端,输入
apktool
命令,看到以下输出说明apktool配置成功文章图片
新建个MyTest目录方便管理,随便放个test.apk进去作为测试包
文章图片
反编译
终端输入
cd /Users/zachary/zachary/MyTest
进入到测试apk所在目录,输入apktool d test.apk
开始反编译文章图片
编译结束可以看到MyTest目录下多了个test文件夹,里面就是反编译以后的产物,我们想要的androidManifest.xml和res/.等资源文件
文章图片
此时资源文件反编译就完成了,下面继续反编译java代码,这是就要用到dex2jar和 jd-gui
下载完dex2jar和 jd-gui解压一下就可以了,复制到MyTest目录方便操作
文章图片
终端进入MyTest目录,输入命令
sh dex2jar-2.0/d2j-dex2jar.sh test.apk
(如果提示Permission Deny权限问题,先输入命令chmod +x dex2jar-2.0/d2j-dex2jar.sh
改一下权限就好了)
文章图片
运行结束,在MyTest目录会生成文件test-dex2jar.jar,就是我们需要的java代码压缩文件
文章图片
右击用jd-gui打开(或者先打开jd-gui再把test-dex2jar.jar拖到jd-gui自动导入,就可以看到java代码啦
文章图片
回编译
【Android反编译apk并重新打包签名(Mac环境)】刚才我们执行
apktool d test.apk
反编译得到了test目录文章图片
回编译就是执行命令
apktool b test
文章图片
成功之后,test目录下会生成build和dist目录
文章图片
build目录下存放的是打包后的dex文件和资源文件(和apk解压后一样一样的)
文章图片
image.pngdist目录下存放的是重新打包后的apk文件
文章图片
重新签名
复制签名文件到dist目录下方便操作
文章图片
终端进入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]:密钥的别名
文章图片
输一下密码,看不到输入的,开始签名
文章图片
签完名后,在dist目录下就可以看到签完名后的apk了
文章图片
后话
反编译的时候,也可以把test.apk的拓展名改成test.zip解压出来
文章图片
把classes.dex复制到dex2jar-2.0路径下
文章图片
终端进入dex2jar-2.0路径下,执行命令
./d2j-dex2jar.sh classes.dex
文章图片
同样可以得到classes-dex2jar.jar
文章图片
反编译,再回编译,同样可以得到classes.dex,就在这个路径下
文章图片
文章图片
收工.png
推荐阅读
- AndroidStudio安装教程
- Android更改popupmenu背景并显示图标
- 如何通过包名打开手机里的APP
- 安卓快速排序与冒泡排序
- Android-Bundle的说明和用法
- android okhttp的使用
- 将微服务连接到Eureka命名服务器
- Spring Cloud创建一个JPA存储库示例
- Spring Cloud配置JPA和初始化数据