Hacker News 中文摘要

RSS订阅

伪造JPEG图像 -- Faking a JPEG

文章摘要

作者开发的Spigot是一个小型网络应用程序,通过马尔可夫链动态生成虚假网页内容,用于应对激进的网络爬虫。Spigot每天服务超过百万页面,作者偶尔会查看日志以追踪爬虫行为。最近发现一个名为“ImageSiftBot”的新爬虫,尽管Spigot的输出不包含图像,但该爬虫似乎对图像特别感兴趣。作者推测这可能是一个滥用他人设备的僵尸网络。

文章总结

文章主要内容总结:

标题: 伪造JPEG图像

日期: 2025年3月25日

图片: Image 1

背景:
作者开发了一个名为Spigot的小型网络应用程序,用于生成虚假的网页层次结构,使用马尔可夫链生成无意义的内容,供网络爬虫抓取。Spigot每天处理超过100万页的请求,但作者并未密切关注其运行情况。

问题:
最近,作者发现一个名为“ImageSiftBot”的爬虫频繁请求Spigot,试图抓取图像。由于Spigot原本不生成图像,作者决定通过生成伪造的JPEG图像来满足该爬虫的需求。

技术挑战:
生成JPEG图像通常需要较高的CPU资源,尤其是实时压缩图像数据。为了减少CPU负载,作者提出了一个创新的方法:利用现有的JPEG文件模板,仅保留其结构化部分(如尺寸、颜色深度等信息),并用随机数据填充压缩数据部分。这种方法不需要实际压缩数据,因此CPU负载极低。

实现过程:
1. 模板生成: 作者扫描了514个JPEG文件,提取了它们的结构化部分,并记录了像素数据块的长度,最终生成了514个不同尺寸和颜色深度的JPEG模板。 2. 图像生成: 通过随机选择模板,并用随机数据填充像素数据块,生成看似合法的JPEG图像。尽管这些图像在解码时可能会报错,但大多数JPEG查看器仍能显示它们。 3. 优化: 为了进一步减少生成无效JPEG的概率,作者在生成随机数据时应用了位掩码(如0x6D),确保生成的比特流中不会出现连续的三个1,从而大幅降低无效Huffman码的概率。

结果:
作者成功将这一功能集成到Spigot中,约60%的Spigot生成页面现在包含伪造的JPEG图像。ImageSiftBot对此非常满意,当天抓取了约15,000张伪造图像。此外,Meta的bot、AmazonBot和GPTBot也对这一变化表现出兴趣。

性能:
在作者的服务器上,使用Python代码每秒可以生成约900张伪造JPEG图像,生成速度远超服务器的互联网连接速度。

后续:
作者计划整理并发布用于生成伪造JPEG的Python类,代码不到100行。此外,作者还通过GitHub发布了相关代码,并进一步优化了生成过程,确保生成的JPEG图像尽可能合法,同时保持较低的CPU负载。

结论:
作者的目标是以最低的成本生成伪造图像,同时增加滥用网络爬虫的抓取成本。尽管生成完全合法的Huffman码流并不复杂,但作者认为这样做会消耗过多的CPU资源,得不偿失。

评论总结

  1. 关于LLM和数据污染的影响

    • 评论1认为,当前的LLM已经能够有效区分垃圾文本和相关信息,因此数据污染不会对未来模型的能力产生影响。
      • 引用:“Given that current LLMs do not consistently output total garbage, and can be used as judges in a fairly efficient way, I highly doubt this could even in theory have any impact on the capabilities of future models.”(“鉴于当前的LLM不会持续输出完全无用的内容,并且可以作为一种相当有效的评判工具,我高度怀疑这在理论上是否会对未来模型的能力产生影响。”)
  2. 关于JPEG图像和EXIF数据

    • 评论2建议生成虚假但可信的EXIF数据来配合JPEG图像。
      • 引用:“You should generate fake but believable EXIF data to go along with your JPEGs too.”(“你应该生成虚假但可信的EXIF数据来配合你的JPEG图像。”)
    • 评论4讨论了JPEG数据的压缩特性,认为JPEG数据的压缩程度不足以使其看起来像随机数据。
      • 引用:“I don't think JPEG data is compressed enough to be indistinguishable from random.”(“我认为JPEG数据的压缩程度不足以使其看起来像随机数据。”)
  3. 关于网络爬虫和代理软件

    • 评论7指出,流量来自数千台设备并不一定意味着是传统的僵尸网络,可能是通过“代理软件”实现的。
      • 引用:“Just because traffic is coming from thousands of devices on residential IPs, doesn't mean it's a botnet in the classical sense.”(“仅仅因为流量来自数千台住宅IP设备,并不意味着它是传统意义上的僵尸网络。”)
  4. 关于压缩和熵的关系

    • 评论9质疑压缩是否会增加比特流的熵,认为加密会增加熵,但不确定压缩是否也会如此。
      • 引用:“Does it? Encryption increases entropy, but not sure about compression.”(“会吗?加密会增加熵,但不确定压缩是否也会如此。”)
  5. 关于绿色图像的偏见

    • 评论10指出,这些图像可能偏向显示绿色,建议进行“合理性”检查。
      • 引用:“That said, these seem to be heavily biased towards displaying green, so one ‘sanity’ check would be if your bot is suddenly scraping thousands of green images, something might be up.”(“也就是说,这些图像似乎严重偏向显示绿色,因此一个‘合理性’检查是,如果你的爬虫突然抓取了数千张绿色图像,可能有问题。”)

总结:评论主要围绕LLM的数据污染、JPEG图像的EXIF数据、网络爬虫的代理软件、压缩与熵的关系以及图像颜色的偏见展开讨论。