外包交付 APK,我让客户签字的三样东西:扫描报告 + 加固记录 + 重签说明

0 阅读7分钟

分类建议:Android / 移动开发 / 信息安全
标签建议:外包交付、APK加固、独立开发者、漏洞扫描、安固云、软件交付
类型:流程分享(可软宣)
相关站点:安固云 APK Guard
系列:[上架前 APK 安全自检清单] · [加固后怎么验收] · [个人包加固流程]


从「个人开发者变多」说起

这几年接私活、做配套 App 的人明显多了:一个人兼产品、开发、上架;或者两三人的工作室,按月交付几个 Android 包。

客户侧也在变。以前口头说「我们做了加固」往往够用;现在常见追问是:

  • 「有没有安全扫描报告?」
  • 「加固后签名还是我们的吗?」
  • 「以后换开发者,证书会不会丢、包能不能更新?」

这些问题背后,其实都不是技术炫技,而是 交付物能不能留痕、能不能对账

我后来把外包收尾固定成 三样东西 + 一页签字确认——不夸大成「等保报告」,但足够把「做过什么、没做什么」写清楚,减少扯皮。


先说结论:三样东西分别回答什么

交付物客户真正想问的你这边要证明的
① 扫描报告上架前有没有明显裸奔问题密钥/权限/组件等已自检,有 PDF 或 HTML 可归档
② 加固记录有没有做壳、防二次打包任务时间、档位、包名版本、产出 APK 指纹可对上
③ 重签说明证书有没有被拿走、以后谁维护keystore 仍在客户侧;加固后由客户本机重签

三样齐全,再配 一页《交付确认单》 让客户签字(或邮件确认)。比堆功能表像样,也比空口承诺安全。


① 扫描报告:加固之前做,别倒顺序

原则:扫描尽量在加固前。 加固抬高逆向成本,修不掉业务里的明文密钥和乱权限。

我建议报告里至少能对应这几类

类别客户看得懂的一句话
明文密钥 / 硬编码「Release 包内未发现明显明文 API Key」或「发现 N 处,已修复 / 已写入风险说明」
权限与导出组件「权限清单与业务匹配;无多余 exported 组件」
防护面(可选)「壳、完整性、环境检测等项已评估」——见站点「防护等级」类报告
版本信息包名、versionName / versionCode、扫描时间

实操(我用的路径)

  1. 安固云 登记 包名资产
  2. 上传 加固前的 Release 已签名 APK
  3. 漏洞扫描防护等级评估(重要版本我两个都跑;赶时间至少跑一个)
  4. 下载 PDF / HTML 摘要,文件名带上:项目名_包名_版本_扫描日期

交付时说明边界(建议原话写进邮件):

本报告为应用层与防护面自检,不是渗透测试或等保测评;发现项已在发版前处理或列入后续迭代。

更细的本地自检项,可对照系列文 [《上架前 APK 安全自检清单》]


② 加固记录:证明「这一版确实加固过」

客户不需要懂 DEX 加密细节,但需要 可对账:哪天上传的、用的什么档、下的是哪个包。

加固记录我建议固定包含

字段示例用途
项目名称XX 物流客户端归档
包名com.example.app与商店一致
版本5.5.1 (141)与 changelog 一致
加固时间2026-09-03 14:20任务历史截图或导出
加固档位普通版 / 更高档与合同或报价一致
加固前 APK SHA256abc…防混包
加固后未签名包 SHA256def…云端产出
最终上架 APK SHA256789…重签后客户侧指纹
验收摘要jadx 无业务明文 / 换签测试失败 / 真机主流程通过见下一节

任务截图 vs 表格

  • 对内:任务历史一页截图即可
  • 对客户:用上面表格做成 一页 PDF(Excel 导出也行),比丢一个 APK 更有说服力

档位怎么选、普通版够不够,可参考 [《中小企业怎么选加固网站》];加固后怎么验,见 [《加固后验收清单》]。

边界(务必写进交付说明)

  • 加固 提高逆向与二次打包成本,不承诺绝对防破解、绝对防 Frida
  • 加固 不能替代 业务代码里的密钥规范与服务器鉴权

③ 重签说明:最容易被问,也最容易误会

很多客户听到「云端加固」就紧张:我的 keystore 要不要上传?以后还是不是我的包?

我交付时固定附 《重签与证书说明》 半页纸,核心就四句:

  1. 加固平台返回的是未签名 APK(或需客户本机重签的包)
  2. keystore 仅在客户本机使用,不出开发机/不出云
  3. 必须使用与原包相同的签名证书,否则完整性校验失败、无法覆盖安装
  4. 证书由客户保管;后续版本升级、渠道更新均依赖同一 keystore

建议附一张「流程示意图」(口述也行)

客户 Release APK(已签名)
    → 云端加固(密文壳 + 完整性绑定原证书指纹)
    → 下载未签名包
    → 客户本机用同一 keystore 重签
    → 真机验收 → 交付 / 上架

常见客户问题(可直接复制到 FAQ)

客户问建议答法
证书给你们安全吗?不上传;重签在您本机完成,我们只接触加固任务记录
加固后还能不能我们的人维护?可以;源码与 keystore 仍在您侧,加固只影响发布包
换一家加固行不行?可以,但需重新走加固与验收;证书仍须保持不变
为什么加固包比原来大?多了壳与密文载荷,见验收清单体积对比,一般可接受

一页《交付确认单》模板(可打印)

下面是我精简版,签字前让客户提供 keystore 保管确认(若证书本就在客户处)。


项目名称: _______________
包名: _______________
交付版本: _______________
交付日期: _______________

开发方确认已交付:

① 上架前扫描报告(附件:___________)
② 加固记录(含加固时间、档位、APK 指纹)
③ 重签与证书说明(keystore 由 ______ 方保管)
加固后真机主流程验收通过(机型:___________)

客户确认:

  • 已收到上述材料,理解加固与扫描的适用范围(非等保/渗透报告)
  • 已知后续版本升级须使用 同一签名证书
  • 签字 / 日期:_______________

个人开发者为什么更该做这套

场景不做三件套的风险做了之后
私活交付后失联客户以为「没做安全」报告 + 记录可归档
二开换人新开发质疑旧包来源SHA256 + 加固时间可对账
压价「加个固就行」范围不清,无限加需求档位、验收写进确认单
自己也是老板半年后忘了这版做没做扫描文件夹里能翻出来

一个人扛开发时,流程短不等于不留痕。三样东西加起来,熟练后 多半小时(扫描排队另算),但能省后面几小时的解释成本。


和我用的工具怎么对应(非唯一答案)

我目前把 扫描 + 加固 + 任务历史 放在同一账号里完成,省得 A 站扫、B 站加固、C 站找记录:

  • 扫描 / 防护评估 → 对应 ① 扫描报告
  • 加固任务与下载记录 → 对应 ② 加固记录
  • 默认 本地重签 说明 → 对应 ③ 重签说明

站点:安固云 APK Guard

你也可以用自己的工具链,只要三样东西 内容齐、边界清 即可。不必为软文强行换平台。


边界(建议原文放进交付邮件)

  1. 三件套 不是 金融级安全认证,不能 替代专业渗透或等保测评
  2. 政企 禁止 APK 出内网 的项目,云端加固/扫描可能不适用,需私有化或离线方案
  3. 加固提高成本,不保证 无人为破解;业务侧仍须做好服务端鉴权与密钥管理
  4. 用途须合法正版 App;禁止用于恶意软件

结语

个人开发者和小工作室接 Android 外包,竞争往往不在「会不会加固」,而在 交付是否专业、是否可追溯

我现在收尾固定三样:

扫描报告(加固前) + 加固记录(可对账) + 重签说明(证书不出本机)

再让客户签一页确认单。不吹「最强」,但比一句「放心,我们加固了」经打。

若你也在接私活,可按项目改一版 PDF 模板复用。更完整的自检与验收,见本系列 [上架前清单]与 [加固后验收]。

试用扫描 + 加固 + 任务留痕