移动终端安全:实验2-创建自签名证书对APP签名

实验步骤

1.直接安装我们实验要用的.apk

2、获取未签名的app

(1)删除META-INF文件

取消自动签名,直接删除改文

(2)查看此时app是否为未签名app

3、创建自签名证书

(1)打开keytool,生成私钥

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

参数说明:

  • keystore:密钥库文件名
  • alias:密钥别名
  • validity:有效期(单位:天)

按提示填写信息(如姓名、组织、城市等),设置密码(记住它,后面要用)。

4、对app签名

(1)使用 jarsigner 对 APK 签名:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore unsigned.apk my-key-alias

输入密钥库密码和密钥密码(如果设置了不同密码)。

5、安装app

(1)检查app的签名

jarsigner -verify -verbose -certs unsigned.apk

利用上述方法我们重新进行高强度签名。

这里我们直接使用MT管理器进行重签

查看重新签名后文件

(2)测试app是否能够正常安装

可以安装成功

总结

一、传统方案(JDK 自带)知识点速览

  1. 角色与文件
    • keystore(.jks/.p12)= 包含 私钥 + 证书链
    • alias = 私钥在库里的"名字"
    • APK 本质 = ZIP,签名信息放在 META-INF(*.SF / *.RSA / *.MF)
  2. 两条命令
    • 生成私钥keytool -genkeypair -keystore xxx.jks -alias xxx -keyalg RSA -keysize 2048 -validity 3650
    • 签名jarsigner -sigalg SHA256withRSA -digestalg SHA-256 -keystore xxx.jks apk.apk alias
  3. 验证 jarsigner -verify -verbose -certs apk.apk出现 jar verified 即可。
  4. 缺点

❌ 仅支持 V1 签名方案(JAR 签名)

❌ 对 ZIP 内容顺序/压缩方式敏感,无法对齐后签名

❌ 不支持 旋转密钥、密钥轮换

❌ 弱算法(SHA1/MD5)已被 Java 标记为 "视为未签名"


二、先进方式:Google 官方 APK Signature Scheme

  1. 工具升级

    • apksigner (Android SDK/build-tools 24.0.3+)同时支持 V1(JAR)+ V2(APK 全文)+ V3(密钥轮换)+ V4(增量/ADB)
    • zipalign 必须在 apksigner 之前 运行,保证内存对齐。
  2. 完整流程(推荐脚本)

    `# 1. 对齐 zipalign -v -p 4 unsigned.apk aligned.apk

    # 2. 签名(V1+V2+V3 全开) apksigner sign --ks release.jks --ks-key-alias release --out signed.apk aligned.apk

    # 3. 验证 apksigner verify -v --print-certs signed.apk`

    输出 Verified using v1 scheme (true), v2 scheme (true), v3 scheme (true) 即通过。

  3. 密钥与轮换

    • V3 方案支持 密钥轮换 :旧密钥 + 新密钥 交叉签名 ,可实现 无损更换签名证书(用户可无缝更新)。

    • 旋转命令

      apksigner rotate --out new.keystore --old-signer \\ --ks old.jks --new-signer --ks new.jks

  4. 算法与兼容性

    • 默认使用 SHA-256 / RSA-2048(也可 ECC:SHA-256 / ECDSA-P-256)
    • Android 7.0+ 支持 V2;Android 9.0+ 支持 V3;Android 11+ 支持 V4。
    • 同时开启多版本 向下兼容 :低版本只识别 V1,高版本优先校验 V2/V3,速度+安全性双提升
  5. CI/CD 集成

    • Google Play App Signing 强制要求上传 V2+ 签名;
    • 在 GitHub Actions / GitLab CI 里加两步即可:zipalign + apksigner sign --ks-key-alias ${``{ secrets.ALIAS }} --ks-key-pass pass:${``{ secrets.KP }} --ks-pass pass:${``{ secrets.KSP }} ...

  1. 本地调试/老旧教程 :jarsigner 够用,但记得 SHA-256 以上算法。
  2. 上架 Play / 新应用zipalign → apksigner 一步到位,同时开启 V1+V2+V3
  3. 长期维护 :启用 Google Play App Signing + V3 密钥轮换,以后证书过期也能无缝迁移。
相关推荐
用户962377954481 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机4 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机4 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954486 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star6 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954489 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行5 天前
网络安全总结
安全·web安全
red1giant_star5 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透5 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全