MaiPDF App DRM
iOS · Android · Windows · macOS · 加密 .maipdf 文件 + 系统级拒绝截屏 + 交付后仍可吊销
这份文档讲的是三条产品线里保护最强的一条:App DRM 。前两条(在线分享、Secure Share)都跑在浏览器里,而浏览器从根本上无法拒绝系统截屏 ------ 这是 App DRM 存在的理由。
一句话概括:文件本身成为保护措施 。PDF 被加密成一个 .maipdf 包,只能在 App 里打开,只能在你允许的设备上、在你允许的时间内打开,而且 App 会要求操作系统直接拒绝截屏。

图 1:App 首页 ------ 打开收到的受保护文件,或保护自己的文件
一、三个部件,各管一件事
理解这三样东西分别干什么,就很容易想清楚它的能力边界在哪。
① 容器:加密的 .maipdf 文件
你的 PDF 在离开你的电脑之前 就用 AES-GCM 256 位 加密好了。这个包里装着:许可证 ID、验证服务器地址、初始化向量,以及密钥的一半 。另一半永远不会跟着文件走。
明文 PDF 从不写入读者的硬盘 ------ 每次打开都是在 App 内存里解密。所以把这个文件转发给别人,转发出去的是一个上了锁的盒子,不是文档本身。
② 许可证:每次打开都验
打开次数、有效期、设备上限这些规则存在服务器上,不在文件里 ------ 这就是为什么它们在文件交付出去之后依然生效。
这也是「吊销」能真正生效的原因 :你切断访问权限,下一次打开就会失败,哪怕这个文件已经躺在别人的笔记本电脑上了。被吊销的读者会看到一条明确提示,说访问权限已被发送方收回。
③ 阅读器:拒绝被捕获
App 窗口在操作系统层面 被标记为受保护,所以截屏或录屏拿到的是黑屏 ------ 不是事后警告,是当场就拿不到。
阅读体验本身不受影响:页面完整清晰可见,没有任何遮挡物在中间晃 。每一页都带一个无法关闭的可追溯水印。
二、防截屏:四个平台,四套原生机制
这是浏览器根本做不到 的部分。网页没有任何办法拒绝系统级的截屏快捷键(比如 Windows 的 Win+Shift+S);而原生窗口可以要求操作系统把自己整个排除在捕获之外。
|-------------|-------------------------------------------------------|
| 平台 | 实际使用的机制 |
| Android | 窗口设置 FLAG_SECURE |
| Windows | 通过 SetWindowDisplayAffinity 设置 WDA_EXCLUDEFROMCAPTURE |
| macOS | 窗口的 sharingType 设为 none |
| iOS | 内容通过一个系统会排除在捕获之外的图层渲染 |
【关键区别】 这些是操作系统自己提供的能力,不是 App 在「检测」截屏然后做反应。所以第三方截屏工具、录屏软件撞的是同一堵墙。
挡不住什么(老实说)
- 拿相机对着屏幕拍。 没有任何软件能防住这个 ------ 这恰恰是水印不允许关闭的原因:拍照拍下来的画面里,水印也在
- iOS 上正在录屏或投屏时,App 会把页面对读者本人也遮住,而不是让它继续显示在投屏画面上
- 需要读者装 App。 所以它适合高敏感度文件,不适合随手分享的场景
敌意环境直接拒绝运行
App 启动时会做设备完整性检查 ,在这些环境下根本不加载 :越狱设备、已 root 的设备、模拟器;桌面端还包括虚拟机等可疑环境。原因很直接 ------ 这些正是防截屏机制可能被绕过的地方。
三、保护一份 PDF:打包时定规则
所有规则都在打包时决定,加密在你自己的设备上完成,然后才上传。

图 2:DRM 主界面 ------ 创建受保护文件、打开文件、管理许可证、追查泄露
可以设置的规则
|------------|-------------------------------------------------------------------------------|
| 规则 | 可选值 |
| 最大打开次数 | 1 以上任意数字,或不限 |
| 有效期 | 1 天、7 天(默认)、30 天,或自定义时长 |
| 受众 | 开放给任何持有文件的人,或按邮箱指定收件人 |
| 设备上限 | 开放受众时 = 这个文件的总设备数 上限(服务端天花板 10,000);指定收件人时 = 每个收件人各自的设备上限(每人最多 100 台) |
收件人邮箱可以直接粘贴,换行、逗号、分号、空格分隔都行 ------ 系统会自动去掉首尾空格、转成小写、去重。
【说明】没有水印开关,也没有批量上传 :一次一个文件,并且永远带水印。这是刻意的设计。
四、许可证页面:交付之后的控制台
每一个受保护文件都有一个许可证页面。这里就是一份已经送出去的文档继续受你控制的地方。

图 3:许可证详情页 ------ 次数、设备、有效期、打开记录一览
页面上能看到和能改的
- 打开次数 ------ 已用和剩余,实时计数
- 设备上限 和有效期
- 创建时间 和最后阅读时间
- 设备绑定 ------ 哪些设备打开过它,还有一个可以补充授权邮箱的输入框
- 打开事件 ------ 谁打开的、什么时候、用哪台设备
- 复制许可证 ID ,以及在你想让它停下来的时候吊销
没登录也能管
许可证查询框接受许可证 ID + 修改码的组合 ------ 跟网页版那边「阅读码 + 修改码」是同一个思路。
五、追查泄露:照片之后唯一还起作用的手段
每一页都带一层很淡的平铺编码,和那一次打开的许可证与设备绑定 。如果某一页被拍了照、又出现在了不该出现的地方,那串编码也在照片里。

图 4:Trace watermark ------ 输入泄露截图上的编码,查出是谁打开的
怎么用
- 从泄露的截图或照片上读出那串编码
- 在 App 的 Trace watermark 里输入它
- 已登录 → 在你名下所有许可证里搜;未登录 → 用许可证 ID + 修改码代替
- 得到结果:读者、时间、以及那一次打开用的设备
【关键】 水印是按每次打开生成 的,所以同一份文件的两个读者 ------ 甚至同一个读者打开两次 ------ 拿到的编码都不一样。这意味着你定位到的不是「哪个文件泄露了」,而是「哪一次打开泄露的」。
六、App DRM 和在线分享怎么选
它们是两条不同的路线,不是同一个东西的两个版本。 大多数人两个都在用,只是用在不同的文档上。
|--------|-------------------------------------------|-----------------------------------|
| | 在线分享(浏览器链接) | App DRM(App 里的加密文件) |
| 读者要做什么 | 点链接就读,什么都不用装 | 需要装 App ,然后打开文件 |
| 能设的规则 | 打开次数、有效期、邮箱或短信验证、访问记录、可替换文件 | 打开次数、有效期、设备绑定、指定收件人、交付后可吊销 |
| 截屏 | 挡不住 ------ 浏览器没有这个能力,水印让截图可追溯 | 系统级拒绝 ,截出来是黑屏 |
| 最适合 | 覆盖面 ------ 提案、宣传册,以及任何发给「你没法要求他装软件」的人 | 控制力 ------ 高敏感度文件,值得让对方装个 App |
【选型】 选择的判断标准其实很简单:你能不能要求对方装一个 App?
能 ------ 且文件确实敏感,用 App DRM。
不能 ------ 用在线分享,接受「挡不住截屏、但能追溯」这个现实。
七、诚实的限制
和任何单一控制手段一样,它只是一层 。真正的做法是把它和打开次数上限、有效期、水印线索叠加使用,而不是指望某一个开关解决所有问题。
- 相机拍屏幕防不住 ------ 所以水印不允许关闭
- 需要读者装 App ------ 这本身就筛掉了一部分场景
- 读者必须能联网 ------ 每次打开都要向服务器验证许可证
本文档内容依据 MaiPDF App 实际功能整理,配图为 App 真实截图。如有疑问:joe@pdfhost.online