java - 关于在运行时读取文件时替换文件中的字节 block 的建议

标签 java

各位。我相信社区会将此视为一个相关问题。如果没有的话我很抱歉,模组请关闭。

我正在为客户开发一个包含静态内容的视频播放应用程序。我的客户希望我实现一些基本的安全性,以阻止有人解压已部署的应用程序(适用于 Android)并简单地复制 MPEG。我的客户将基本保护作为一项关键要求,并且他正在支付账单:)

这些文件太大,无法即时解密,因此我正在考虑以下方法。我欢迎有关替代方案的想法和建议。我知道支持和反对复制保护方案和隐匿性安全的争论,我提出的方法使用了这些方案,我的问题不是“我应该吗?”。

从 MPG header 的某处获取一个字节 block ,例如 256。将这些字节替换为随机值,这样 MPEG 就不会在不进行大量修复的情况下播放。将原始 256 字节存储在应用程序位图之一中,以便位图仍然正确显示。播放视频时,通过字节流读入并用原始值替换字节,然后将它们传递到输出流。

总结:

  1. 从 MPEG header 中提取 256 字节
  2. 将这些字节存储在位图中
  3. 在原始字节中随机化值
  4. 在运行时,从位图中读回 256 字节
  5. 使用字节数组缓冲区通过输入流读取 MPEG
  6. 用原始值替换随机字节
  7. 将输入流式传输到输出流,该输出流是视频播放器的输入。

我确实认识到至少有两种方法可以解决这个问题,即逆向工程和屏幕抓取,但重点是防止普通窃贼毫不费力地复制我的客户内容。

大家有什么想法吗?

谢谢

最佳答案

我建议对整个流使用加密/解密方案:

  1. 实时视频流解密是处理此问题的标准方法。与实际视频解码相比,其处理开销可以忽略不计。例如,每一个 DVD那里的玩家支持 CSS加密方案。

    虽然使用 Java 确实存在一些限制,例如无法有效利用各种特定于 CPU 的指令,但您应该能够找到一种不是很昂贵的解密算法。我建议在立即拒绝流加密算法之前对您的应用程序进行分析。

  2. 修改 header 确实会使某些视频文件难以阅读,但并非不可能。有些文件具有冗余信息,其他文件实际上是直接串联的结果,这将使任何后续段可读。一些流视频编解码器实际上每隔几秒插入足够的元数据来重建流。那里有很多视频格式。

    换句话说,没有办法保证从文件开头删除任意数量的字节都会使其不可读。我还认为对你的客户施加一系列限制。他们可以使用的视频格式不合理,并且限制了您的应用程序的 future 用途。

关于java - 关于在运行时读取文件时替换文件中的字节 block 的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10040912/

相关文章:

java - 最大独立组重量

java - 优化 ArrayList 中的项目顺序

java - 与 FTPSClient 的 SFTP 连接失败

java - Storm Bolt 比其父级执行更多

java - 用于 ssm 的 aws java sdk 给出 java.lang.NoSuchFieldError : SIGNING_REGION

java - 将String转换为二维数组

java - 如何在 Java 中转换 HTML 实体

java - 为什么@RequestBody不需要arg构造函数?

java - 如何正确捕获、包装和重新抛出 Hibernate 异常?

java - 悲观锁定因 ObjectOptimisticLockingFailureException 而失败