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 —— 输入泄露截图上的编码,查出是谁打开的

怎么用

  1. 从泄露的截图或照片上读出那串编码
  2. 在 App 的 Trace watermark 里输入它
  3. 已登录 → 在你名下所有许可证里搜;未登录 → 用许可证 ID + 修改码代替
  4. 得到结果:读者、时间、以及那一次打开用的设备

【关键】水印是按每次打开生成的,所以同一份文件的两个读者 —— 甚至同一个读者打开两次 —— 拿到的编码都不一样。这意味着你定位到的不是「哪个文件泄露了」,而是「哪一次打开泄露的」。

六、App DRM 和在线分享怎么选

它们是两条不同的路线,不是同一个东西的两个版本。 大多数人两个都在用,只是用在不同的文档上。

在线分享(浏览器链接)

App DRM(App 里的加密文件)

读者要做什么

点链接就读,什么都不用装

需要装 App,然后打开文件

能设的规则

打开次数、有效期、邮箱或短信验证、访问记录、可替换文件

打开次数、有效期、设备绑定、指定收件人、交付后可吊销

截屏

挡不住 —— 浏览器没有这个能力,水印让截图可追溯

系统级拒绝,截出来是黑屏

最适合

覆盖面 —— 提案、宣传册,以及任何发给「你没法要求他装软件」的人

控制力 —— 高敏感度文件,值得让对方装个 App

【选型】选择的判断标准其实很简单:你能不能要求对方装一个 App?
能 —— 且文件确实敏感,用 App DRM。
不能 —— 用在线分享,接受「挡不住截屏、但能追溯」这个现实。

七、诚实的限制

和任何单一控制手段一样,它只是一层。真正的做法是把它和打开次数上限、有效期、水印线索叠加使用,而不是指望某一个开关解决所有问题。

  • 相机拍屏幕防不住 —— 所以水印不允许关闭
  • 需要读者装 App —— 这本身就筛掉了一部分场景
  • 读者必须能联网 —— 每次打开都要向服务器验证许可证

本文档内容依据 MaiPDF App 实际功能整理,配图为 App 真实截图。如有疑问:joe@pdfhost.online

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐