与 OCR 逆向工程作斗争

Posted

技术标签:

【中文标题】与 OCR 逆向工程作斗争【英文标题】:Fighting with OCR reverse engineering 【发布时间】:2012-02-26 15:25:06 【问题描述】:

我指的是基于软件的 OCR ?图像到文本引擎的转换工具,*** 有大量关于构建 OCR 的帖子,但我看起来相反,就像任何关于如何保护我的图像免受逆向工程的指导。

例如,我有只包含文本的图像,我怎样才能让任何人都难以解码数据,是否有任何所需的图像格式可以做到这一点?或者我们可以混淆图像?

使用特殊字体或变形可以保证 OCR 保护吗?虽然我的要求不允许提供太多扭曲的文本。

任何方向都会很有帮助

【问题讨论】:

您是否正在寻找 CAPCHA 来验证登录名以避免垃圾邮件?如果是这样,您应该使用现有组件。或者您是否尝试发布文档并希望避免被扫描?如果是这样,我敢肯定 OCR 引擎已经足够先进,以至于任何 OCR 证明的东西都会让你的观众阅读起来太烦人了。 @HenryJackson - 你猜对了,我正在发布长文档供人们阅读。为什么你说 OCR 证明方法很烦人?如果这需要对低级编程进行高端研究,不妨试一试。 如果你能读懂它,你就可以(理论上)对它进行 OCR。 @aldrin 你是对的,这就是为什么 captcha.net 和 Google 的图像如此模糊以至于人类也难以阅读。 【参考方案1】:

据我了解,您收集了一些受版权保护的文本,这些文本应该可供人类清晰阅读,但您不希望它以电子形式从您的服务器泄露。我不认为混淆文本使其更难进行 OCR 是一个好主意,因为它会使人类无法阅读,特别是如果文本真的很长。基本上,对人类来说易于阅读的内容可以完美地进行 OCR 编辑。 OCR 困难的东西对人们来说也很困难。在最坏的情况下,攻击者可能会聘请一家印度公司手动重新输入文本,这实际上并没有那么昂贵。

我建议您寻找其他方面来做好保护。您的用例如何?为什么用户可以在他们的 PC 上获取您的文本作为图像?他们是否将其下载为 PDF 或图像文件?在这种情况下,与下载文件的可能性作斗争会更简单,而不是使其不可读。

例如,您可能会考虑不立即授予对整个文件的访问权限,而是逐页显示它,并需要人工交互才能进入下一页。您甚至可以扰乱您的 Web 界面,使其无法通过典型的站点下载实用程序下载所有内容。每个页面都应该显示在同一个 URL 上,但实际导航应该使用 AJAX 甚至某些专有接口与服务器通信。

另一种方法是在每个页面上制作人类不可见的大量虚假链接,但它们会误导下载实用程序,使它们下载大量错误内容,或者以错误的顺序下载使其无法使用。

如果您能成功地与自动下载作斗争,您甚至不必将您的内容作为图像提供,它可以是纯文本,但只是其中的一小部分。无论如何它都将无法使用。

希望这能给你一些想法。

【讨论】:

感谢您的详细回复。我在服务器端的内容是 html 显示在浏览器上只是为了阅读它被分成页面并且无法一次性下载,但是发送纯文本并不能解决,因为可以发出多个请求的爬虫在使用图像时可以收集整个内容有一个步骤使过程变得乏味,我看到今天 OCR 几乎可以破解任何格式或高度模糊。【参考方案2】:

正如我和其他人所说,让大量文本变得模糊到 OCR 无法读取,这对人类来说是不切实际的。

是否有您想要克服的特定威胁?简单的网络爬虫通常不执行 javascript,因此让您的文本更难抓取的愚蠢方法是使用 AJAX 请求加载它并将其插入 DOM。

或者,如果您想变得更强烈,您可以将文本显示在 Flash 或 Silverlight 控件中 - 仍然不是 OCR 证明,但这将使得自动抓取大量文本变得不简单,特别是如果你有一个 Flash 滚动条和/或分页。 (我应该指出,用于文本等简单内容的 Flash 控件听起来很烦人,无法搜索或添加书签,而且显然无法在大多数移动设备上运行。)

【讨论】:

我做了一些原型,发现唯一的困难是人类无法选择文本或复制它们以在 Google 等上搜索,否则这些文本看起来完全一样,如果没有被遮挡(容易 OCR)。我想探索Flash等我很好奇它是否可以解密从服务器发送的加密文本。 我对 Flash 没有任何经验,但我确信有一种方法可以加密控件和服务器之间的通信,例如通过 SSL。就像我说的,我认为在 Flash 控件中阅读文本的想法对用户来说听起来有点烦人,而且大多数人可能会同意 Flash 是一种即将淘汰的技术,尤其是对于像这样的非多媒体内容。但是,如果您决心让您的网站尽可能防盗,我想这是一个选择。显然,任何有足够决心的人都可以抓取您的网站。【参考方案3】:

我认为你做不到。对于 CAPTCHA,是的,并且有大量研究,但您也会从个人经验中知道它们阅读起来有多烦人。对于较长的文本,这是不可能的。不过,我会认真质疑这里的用例或商业模式。您有一些内容由于某种原因需要 OCR 保护。这意味着有人愿意花费资源对您的内容进行 OCR。你为什么要和那些人打架?让他们成为客户,并以纯文本形式提供内容,但需要支付一定费用。如果该费用低于他们的 OCR 成本,那么您将获得双赢。你试图实现的东西听起来像是双输。

【讨论】:

我需要显示受版权保护的内容只是为了阅读目的,此时在内容使用过程中会有一些烦人的体验是可以接受的,因为无论如何内容是以受限的方式提供的,我看到那里几个免费的在线工具/机器人,用于整个内容的顺序下载和文本转换。在某种程度上,开发人员否认 DRM,因为它从来都不是完全证据。 您正在尝试解决一个无法解决的问题。我认为优秀工程师的一个特点是,你会向商务人士指出这些事情,而不是点头并试图实现不可能的事情。也就是说,您真正想要搜索的是某些操作系统或硬件实现的受保护视频(或音频)路径之类的东西。它试图在操作系统级别禁止屏幕抓取,并且可能最接近您正在寻找的内容。当然,它也不适用于专门的攻击者。 虽然有操作系统实现或硬件级别的多功能性和交叉兼容性问题,但我找到了以下文章codeproject.com/Articles/3907/…【参考方案4】:

我看到一些页面通过在文本中使用不可见的字母和其他“噪音”来混淆文本。这样您仍然可以将其显示为文本,同时使其更难复制。

另一个想法可能是以某种方式为文本添加水印,以识别“被盗”副本的来源。这是否有用取决于您想要保护的内容。正如已经提到的,如果它是可读的,那么有人可以手动复制它。

【讨论】:

以上是关于与 OCR 逆向工程作斗争的主要内容,如果未能解决你的问题,请参考以下文章

与内部可变性作斗争

在可可中与货币作斗争

与意外的交叉线程和停止作斗争

与 OkHttp 拦截器作斗争

客户愤怒,与未知的 DLL 依赖作斗争

与 JavaScript 和 DOM 的重复代码作斗争