Apk反编译及重新打包流程

一、反编译代码

1、反编译java代码首先需要下载dex2jar 这个工具,下载地址:sourceforge.net/projects/de... 目前最新版是2.0, 下载完后并解压缩。
2、将要反编译的apk文件重命名为zip格式并解压缩,注意其中的classes.dex 文件,它存放了全部的java代码,将classes.dex文件拷贝到dex2jar解压后的根目录下。
3、打开cmd,进入dex2jar解压后的根目录,执行命令:

复制代码
d2j-dex2jar classes.dex

如下图:

命令执行完后在对应目录下会生成classes-dex2jar.jar文件

4、要查看java代码,还需要下载jd-gui 这个工具,下载地址:jd.benow.ca/,目前最新版是1.4.0,下载完后解压缩,并用jd-gui.exe打开上边反编译出来的jar文件:

到此,已经顺利的反编译出了java代码

那资源文件呢,再回头看一下刚才apk文件对应的解压缩文件,所有的xml文件都是乱码,例如AndroidManifest.xml

当然要还原原始的资源文件还是有办法的,继续往下看。

二、反编译资源

1、要反编译apk中的资源文件,就需要apktool 这个工具了,下载地址:ibotpeaches.github.io/Apktool/ins...,进入下载页面:

按照图中1、2两条的提示,下载apktool.bat和apktool.jar这两个文件,目前最新的apktool是2.1.1,并放到同一文件夹:


2、将要反编译的apk文件放到apktool文件夹,打开cmd,进入apktool文件夹目录,执行命令:

复制代码
apktool d test.apk

如下图:

执行成功后,在当前目录下会生成一个test文件夹:

其中,res文件夹下存放的是反编译出来的所有资源,smali文件夹下存放的是反编译出来的所有代码,AndroidManifest.xml则是经过反编译还原后的manifest文件。smali文件夹下的文件smali文件使用的是Android虚拟机所使用的寄存器语言,如果看的懂smail文件的话,就可以修改源代码的逻辑了,好可怕的事...当然这不是我们重点讨论的。

此时查看AndroidManifest.xml文件,发现已经成功反编译出来了:

三、重新打包

1、既然资源文件已经顺利的反编译出来了,那我们就可以适当的修改点东西了,例如换个图标啥的、改下布局文件等,这里我们将AndroidManifest.xml中的channel 值改为10001,然后开始重新打包,同样在cmd中切换到apktool文件夹目录,执行命令:

bash 复制代码
apktool b test -o new_test.apk

如下图:

执行成功后,在当前目录会生成一个新的new_test.apk文件:

2、但是呢,这个apk文件目前并不能安装,因为需要重新签名。没有签名文件的话,通过Android Studio可以很简单的生成一个哦,将准备好的签名文件放到apktool文件夹根目录,继续在cmd执行命令:

xml 复制代码
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <签名文件名> -storepass <签名密码> <待签名Apk文件名> <签名别名>

如下图:

注意,其中jarsigner命令文件是存放在jdk的bin目录下的,需要将bin目录配置在系统的环境变量中才可以在任何位置执行此命令。
3、签名完成后,建议对APK文件进行一次对齐操作,这样可以使得程序在Android系统中运行得更快,对齐操作使用的是zipalign工具,该工具在**/build-tools/**目录下,需要将这个目录配置到系统环境变量当中才可以在任何位置执行此命令。继续在cmd中执行命令:

zipalign 4 new_test.apk new_test_aligned.apk

执行成功后,会生成一个对齐后的new_test_aligned.apk文件:

4、最后可以通过如下命令验证apk签名是否成功:

复制代码
jarsigner -verify -verbose -certs new_test_aligned.apk

如下图:

到这里apk反编译及重新打包流程就介绍完毕了。

👀关注公众号:Android老皮!!!欢迎大家来找我探讨交流👀

相关推荐
Yang-Never2 小时前
Kotlin协程 -> Job.join() 完整流程图与核心源码分析
android·开发语言·kotlin·android studio
一笑的小酒馆8 小时前
Android性能优化之截屏时黑屏卡顿问题
android
懒人村杂货铺11 小时前
Android BLE 扫描完整实战
android
TeleostNaCl13 小时前
如何安装 Google 通用的驱动以便使用 ADB 和 Fastboot 调试(Bootloader)设备
android·经验分享·adb·android studio·android-studio·android runtime
fatiaozhang952714 小时前
中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖
android·网络·电脑·电视盒子·刷机固件·机顶盒刷机
2501_9159184115 小时前
iOS 开发全流程实战 基于 uni-app 的 iOS 应用开发、打包、测试与上架流程详解
android·ios·小程序·https·uni-app·iphone·webview
lichong95115 小时前
【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之dist打包发布在Android工程asserts里
android·vue.js·iphone
Android出海15 小时前
Android 15重磅升级:16KB内存页机制详解与适配指南
android·人工智能·新媒体运营·产品运营·内容运营
一只修仙的猿15 小时前
毕业三年后,我离职了
android·面试
编程乐学15 小时前
安卓非原创--基于Android Studio 实现的新闻App
android·ide·android studio·移动端开发·安卓大作业·新闻app