Android apk反编译、修改代码、重新打包、签名全过程(for windows)

准备工作

环境:win10
工具:

  • apktool 反编译,重新打包工具 下载地址
  • dex2jar 这个工具用于将dex文件转换成jar文件 下载地址
  • jd-gui 这个工具用于将jar文件转换成java代码 下载地址

不想自己去下载的可以直接到我的网盘上取,三个工具都有:
反编译工具

在这里插入图片描述

APK编译过程

在这里插入图片描述
apk打包的基本流程模块如下:

  1. 资源处理
    这一过程中主要使用appt工具进行资源文件的处理,分析AndroidManifest.xml中的资源文件,生成R.java和resources.arsc文件;aidl工具负责处理aidl文件,生成对应的java接口文件。
  2. 代码编译
    将上一过程中产生的R.java、java接口文件以及工程源代码一起通过Java Compiler编译成.class文件,打成Jar包(这部分可以加入代码混淆),然后与第三方库的Jar包一起通过dx工具转换成.dex文件。
    通过apkbuilder工具将aapt生成的resources.arsc、classes.dex(可能多个)、其他的资源一块打包生成未经签名的apk文件
  3. 添加签名
    通过Jarsigner对生成的未签名的apk进行签名。
    再通过zipalign对签名后的apk进行对其处理,使apk中所有资源文件距离文件起始偏移为4字节的整数倍,从而在通过内存映射访问apk文件时会更快。

反编译流程

一、apktool使用
将下载下来的apktool.bat,apktool.jar还有待反编译的apk放在同一个文件目录下面。打开CMD命令,进入到该文件夹下,输入apktool看看环境是否成功,成功了如下图所示
在这里插入图片描述
执行反编译命令,apktool d filename,这里我执行的是apktool d test.apk
其中d是decode的意思,表示要对这个apk进行解码,除了这个基本用法,还有其他的附带参数:

  • -f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。
  • -o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。
  • -s 不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
  • -r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)。
    在这里插入图片描述
    结束之后我们可以看到这个文件目录下出现了test文件夹
    在这里插入图片描述

二、dex2jar的使用
把apk中的class.dex文件取出来(把文件后缀名改成.zip,或者直接拖到AS中也可以),然后把这个class.dex文件放到第二个工具dex-tools-2.1-SNAPSHOT文件夹下面,然后CMD到这个文件目录下,输入命令d2j-dex2jar.bat classes.dex,可以看到文件夹下面生成了一个classes_dex2jar.jar的文件
在这里插入图片描述
在这里插入图片描述
三、jd-gui的使用
这个就比较简单了,直接把之前生成的classes_dex2jar.jar用这个工具打开就可以看到
在这里插入图片描述
反编译之后的代码如图,我们也找到了相关代码,反编译结束

修改代码重新打包

1、修改代码
我们在jd-gui中看到了Profile类,我们到test文件夹下smail文件夹中找到对应的类,进行修改
在这里插入图片描述
在这里插入图片描述
2、重新打包
执行打包命令 apktool.bat b test ,b是build的意思,表示要对这个文件夹进行编码打包成APK的意思
执行完之后可以看到,在test文件夹下多了,build和dist文件夹,其中dist文件夹就是反编译重新打包之后的包,但是这个包还不能安装,因为还没有签名
在这里插入图片描述
3、签名apk
签名命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件名 -storepass 签名密码 待签名的APK文件名 签名的别名

如图:
在这里插入图片描述
4、对齐操作
签名完成后,建议对APK文件进行一次对齐操作,这样可以使得程序在Android系统中运行得更快,对齐操作使用的是zipalign工具,该工具在/build-tools/目录下,需要将这个目录配置到系统环境变量当中才可以在任何位置执行此命令。继续在cmd中执行命令:
zipalign 4 test.apk test_aligned.apk
执行成功后,会生成一个对齐后的文件
最后可以通过如下命令验证apk签名是否成功:
jarsigner -verify -verbose -certs test_aligned.apk

如图:
在这里插入图片描述
这样,你就得到一个反编译之后修改过代码的安装包了
大功告成!!!

遇到的问题
apktool.bat b test重新打包反编译的时候发现只生成了build文件夹没有生成dist文件夹,报错提示如图

在这里插入图片描述在这里插入图片描述
解决方案:打包的时候加个-r ,就可以了

apktool.bat d test.apk 
apktool.bat b test

改成

apktool.bat -r d test.apk 
apktool.bat b test
  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android Studio中,生成签名文件可以按照以下步骤操作: 1. 打开Android Studio并打开您的项目。 2. 点击菜单栏中的“Build”,然后点击“Generate Signed Bundle / APK”。 3. 选择“APK”并单击“Next”。 4. 在下一个屏幕上,选择“Create new”并填写有关您的密钥的详细信息,例如名称,密码,别名和有效期等。 5. 单击“OK”并填写有关您的应用程序的信息,例如版本号和版本名。 6. 单击“Next”并选择“Release”作为构建变体。 7. 单击“Finish”并等待编译完成。 一旦您的应用程序构建成功并生成签名文件,您可以使用以下步骤对其进行反编译修改打包签名: 1. 下载并安装Apktool(可在https://ibotpeaches.github.io/Apktool/上找到)。 2. 将您的APK文件复制到Apktool所在的文件夹中。 3. 打开终端或命令提示符并导航到Apktool文件夹。 4. 输入以下命令以反编译您的APK文件:apktool d your-apk-file.apk 5. 对您的应用程序进行任何修改。 6. 输入以下命令以重新打包您的应用程序:apktool b your-modified-app-folder 7. 使用Java keytool生成新的签名文件。例如,使用以下命令生成新的签名文件:keytool -genkey -v -keystore your-keystore-file.jks -alias your-alias -keyalg RSA -keysize 2048 -validity 10000 8. 使用以下命令将您的应用程序签名:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your-keystore-file.jks your-modified-apk-file.apk your-alias 9. 安装已签名APK文件并测试它。 请注意,修改重新打包应用程序可能会违反某些法律和条款。请确保您有权执行此操作,否则可能会面临法律后果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值