Android apk包的重签名

简介:

众所周知,apk包是必须要被签名的,否则无法在用户的终端上安装。为了满足某些需求,有时我们需要更换特定apk的签名证书和签名,在这篇文章中我们谈谈如何重新对一个apk包进行重签名。

我们需要分几步来实现这个目标:

1.准备工作

2.生成新的秘钥对

3.对apk包进行签名

4.对签名后的apk包做对齐操作


1.准备工作

在正式开始前,需要确认你拥有keytool,jarsigner和zipalign这三个工具软件。keytool和jarsigner包含在JDK中,zipalign包含在Android SDK中,为了可以在命令行下正常使用,需要设置PATH环境变量。

另外,我们还需要一个apk包来进行测试,我用的是qq音乐的apk包。下面我们看一下apk包中与签名相关的文件,apk包其实就是个zip文件,我们用解压缩软件就可以直接打开它


META-INF文件夹中存放的就是与签名相关的文件


MANIFEST.MF是一个文本文件,里面逐条列出了apk包中每个文件的摘要值

ANDROIDR.RSA是用于签名的公钥证书文件

ANDROIDR.SF是包含签名数据的文件

我们对apk进行重签名就是要替换ANDROID.RSA和ANDROID.SF这两个文件

2.生成新的秘钥对

使用keytool来生成用于重新签名的RSA秘钥对,在命令行输入下面的命令

[plain]  view plain  copy
  1. keytool -genkey -v -keystore highball-key.keystore -alias highball-key -keyalg RSA -keysize 2048 -validity 10000  
秘钥对会以highball-key.keystore为文件名保存在当前目录下,别名为highball-key,算法为2048位的RSA,有效期为10000天。键入命令后,会提示你输入密码,密码一定要记住,因为以后每次使用该秘钥签名时都需要输入。然后工具会要求你输入一系列的个人信息,包括名字、组织等等。全部输入完毕后,秘钥就生成好了。

另秘钥的别名也需要记住,因为后面的jarsigner要用到。

3.对apk包进行签名

有了秘钥对和apk包,我们就使用jarsigner进行重签名了。

首先,我们删除前面提到的ANDROIDR.RSA和ANDROIDR.SF

然后在命令行下,输入命令和密码

[plain]  view plain  copy
  1. jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore highball-key.keystore qqmusic.apk highball-key  
新生成的apk包会覆盖之前的旧apk包

用解压缩软件查看新生成的apk包,可以看到证书文件和签名文件已经被替换了


*如果不删除ANDROIDR.RSA和ANDROIDR.SF,这里会同时出现两组证书和签名文件,我没有尝试安装这样的apk包,有兴趣的同学可以试一下。

4.对签名后的apk包做对齐操作

对apk包签名成功后,需要运行zipalign工具来对文件进行对齐操作,四字节的对齐可以让应用程序运行在设备上时有更好的性能。(可以用mmap()将文件映射到内存)。

[plain]  view plain  copy
  1. zipalign -v 4 qqmusic.apk qqmusic_aligned.apk  


参考文章:

http://developer.android.com/tools/publishing/app-signing.html

http://www.fengpiaoyu.com/2011/07/android-apk%E7%9A%84%E7%AD%BE%E5%90%8D%E4%B8%8E%E9%87%8D%E6%96%B0%E7%AD%BE%E5%90%8D/

相关文章
|
1月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
201 83
|
14天前
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
79 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
1月前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
85 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
2月前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
189 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
47 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
7月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
584 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
7月前
|
Java Android开发 Windows
使用keytool查看Android APK签名
本文介绍了如何使用Windows命令行工具和keytool查看APK的签名信息,并提供了使用AOSP环境中的signapk.jar工具对APK进行系统签名的方法。
532 0
使用keytool查看Android APK签名
|
7月前
|
Android开发
解决android apk安装后出现2个相同的应用图标
解决android apk安装后出现2个相同的应用图标
467 2
|
7月前
|
Android开发
将AAB(Android App Bundle)转换为APK
将AAB(Android App Bundle)转换为APK
366 1
|
7月前
|
Android开发 开发者
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
516 1

热门文章

最新文章

  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    79
  • 2
    Android历史版本与APK文件结构
    201
  • 3
    Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡
    68
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    85
  • 5
    【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
    189
  • 6
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    47
  • 7
    apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
    85
  • 8
    使用Kivy创建“Hello World”应用并打包成APK
    507
  • 9
    使用keytool查看Android APK签名
    532
  • 10
    解决android apk安装后出现2个相同的应用图标
    467