一个乐于分享的博客
关注互联网折腾服务器分享码农的日常

[破解]安卓安装包(apk)反编译修改包内容并重新打包签名

[破解]安卓安装包(apk)反编译修改包内容并重新打包签名

APK是安卓系统安装包的文件格式,由于安卓系统整体开源的特性,所以APK文件也可以说是“开源”的,这也就给我们“破解”apk文件创造了机会。

岩兔站最后接触了一个大佬写的聚合类app,功能很完善,很好用,但是加了一定的限制,非常的不爽。于是开始了本次的折腾之路,通过修改apk文件包内容,达到破解的目的。

准备工作

从岩兔站目前的了解来看,安卓程序和java有密不可分的联系。但是由于岩兔站从来没接触过java,所以很多时候都是懵的,google一些,连猜带试的一路折腾,写错了希望大佬指正。

本次折腾在windows平台上进行,Mac或Linux平台应该会更方便的。windows平台必备工具有:

工具准备就绪之后首先了解一下整个工作的流程:

  1. 将apk文件解包/反编译
  2. 分析其代码,并修改或删除内容
  3. 将修改过的代码重新打包成apk
  4. 对新生成的apk签名
  5. 安装修改过的apk

大概了解了工作流程,就可以开始着手开始了,开始之前务必安装jdk环境,测试方法是命令行中输入java -version,回显1.8以上版本即可。

[破解]安卓安装包(apk)反编译修改包内容并重新打包签名

apk解包反编译-打包

解包工具介绍了两种,分别是apktool和dex-tool+jd-gui,岩兔站认为两种方法各有优劣,同时又都是不可或缺的,所以一并介绍一下。

apktool反编译

首先是apktool的操作,apktool之所以流行度比较高,是因为它是一款免费软件,免费不等于效果差,apktool就是如此,可以说是apk反编译的领军软件。

官方网站:https://ibotpeaches.github.io/Apktool/install/

安装官方都有说明,以windows为例,简单来说:

  1. 下载apktool.bat文件
  2. 下载最新版本的apktool.jar并重命名为apktool.jar
  3. 将两个文件复制到C:\windows
  4. 尝试在命令行中运行apktool有输出即安装成功

解包方法

// 反编译bar.apk
$ apktool d bar.apk
I: Using Apktool 2.0.0 on bar.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: 1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...

// 将 bar.apk 反编译到 baz 目录
$ apktool d bar.apk -o baz

打包方法

// 将 bar 目录中的文件打包成 bar.apk
$ apktool b bar

// 将 bar 目录中的文件打包成 new_bar.apk
$ apktool b bar -o new_bar.apk

而我们要做的就是编辑解包后的文件夹,可以用任意代码编辑器进行编辑,岩兔站用的是VSCode,全平台适用,非常的好用。

解包后的文件被反编译成.smali的文件,岩兔站是没接触过,但目测是一个很底层的语言,比较贴近机器语言,非常难理解!所以编辑起来很是费力。

反编译后的主程序文件都在smali/com文件夹下,作者一般会建一个自己软件名称的文件夹,重点在这个文件夹中查找代码即可。

推荐几篇大神的入门文章:

  • https://www.jianshu.com/p/730c6e3e21f6
  • https://blog.csdn.net/lpohvbe/article/details/7981386
  • https://www.anquanke.com/post/id/85035

正是因为smali语法的难理解,编辑起来无从下手,所以岩兔站又尝试了第二种方法dex-tool+jd-gui

dex-tool反编译

官方地址:https://github.com/pxb1988/dex2jar

apk文件实际上就是一个压缩包,里面包含了一个app所有的代码,资源,签名等所有内容。

将apk文件重命名为.zip,解压之后可得到一系列文件和文件夹,我们重点关注的是一个叫classes.dex的文件,这里边包含了本app的所有代码,相当于apktool反编译出来的smali目录。

下载之后dex-tool得到一个zip文件,解压之后包含很多命令行工具,将classes.dex复制到dex-tools目录中进行反编译操作。

classes.dex,反编译成bar-dex2jar.jar

// Windows
d2j-dex2jar.bat -f path/to/classes.dex
// Linux
sh d2j-dex2jar.sh -f ~/path/to/classes.dex

打包

// Windows
d2j-jar2dex.bat -f path/to/classes-dex2jar.jar
// Linux
sh d2j-jar2dex.sh -f ~/path/to/classes-dex2jar.jar

也就是我们只要编辑bar-dex2jar.jar文件就能修改app。你可以使用任何可用的jar编辑器进行代码修改,岩兔站用的是jd-gui。

官方地址:http://jd.benow.ca/

下载之后直接打开jar文件即可查看包内容,这次内容是标准的java语法,可以很方便的阅读和修改代码。

[破解]安卓安装包(apk)反编译修改包内容并重新打包签名

apk签名

注意,反编译再打包的apk文件是不能安装的,安装之前必不可少的步骤是对安装包进行签名。

签名工具包括keytooljarsinger,这两个工具在安装jdk环境时都默认自带,岩兔站的安装目录是在C:\Program Files\Java\jdk1.8.0_181\bin,建议把这个路径添加到环境变量,方便其他位置调用。

首先生成签名,签名文件命名为yantuz.keystore,有效期10000天,别名为yantuz

生成过程中需要输入两次密码,其他内容可以留空,最后是否正确需输入Y

keytool -genkey -keystore yantuz.keystore -keyalg RSA -validity 10000 -alias yantuz
     您的名字与姓氏是什么?
       [Unknow]: xxx.xxxx.com.cn
     您的组织单位名称是什么?
       [Unknow]: xxxx
     您的组织名称是什么?
       [Unknow]: xxxx
     您所在的城市或区域名称是什么?
       [Unknow]: beijing
     您所在的洲或省份名称是什么?
       [Unknow]: beijing
     该单位的两字母国家代码是什么?
       [Unknow]: 86
   CN=cas.wptx.com.cn, OU=wptx, O=wptx, L=beijing, ST=beijing, C=86 正确吗?
     [否]: Y

apk签名,使用yantuz.keystorebar.apk签名,签名后的文件另存为bar-signed.apk

jarsigner -verbose -keystore yantuz.keystore -signedjar bar-signed.apk bar.apk yantuz

测试

签名完成,apk文件应该能顺利安装了,再测试下自己的破解是否生效吧。

折腾了一晚上才摸到点门道,结果今天文章写完发现一个神器Android逆向助手,一个软件就能实现提取,反编译,签名这些工作,感觉白折腾了……

[破解]安卓安装包(apk)反编译修改包内容并重新打包签名

转载务必注明出处:岩兔站 » [破解]安卓安装包(apk)反编译修改包内容并重新打包签名
赞 (2) or 打赏

讨论区 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址