在 GIF 图片中隐藏任意脚本的方法
P.M.-= 写在前面的,但不是废话 =-
首 先 , 这 个 题 目 不 是 标 题 党 。 确 实 可 以 在 GIF 图 片 中 隐 藏 很 多 种 代 码 , 包 括
C 、 Perl 、 Javascript 等 等 , 这 不 是 我 说 的 , 是 有 人 实 验 成 功 的 : http://
www.thinkfu.com/blog/gifjavascript-polyglots。
其 次 , 我写这篇 文 章 不 是 为 了 翻 译 Jasvir Nagra 的 成 果 , 而 是 对 Jasvir Nagra 的
gifjavascript-polyglots 作深入的探讨。至少,关于构造 gifjavascript-polyglots 的方
法细节,Jasvir Nagra 是没有介绍的。
再有,关于如何在 GIF 图片中隐藏 PHP、ASP 等,谷哥和百毒上大量充斥着”copy /b +
copy /a”的方法和本文所要介绍的 ployglots 方法是不同的。
还有,一句话 GIF 法和本文提到的方法也是完全不同的。
好了,铺垫到此为止。
下面直接进入方法讲解。
-= 详细构造方法 =-
选择任意一个 GIF 图片,其他格式的图片可以使用图片格式转换软件转换为 gif 格式。我
用 GIMP 来做 GIF 格式转换,一来我手上只有这个软件。二来,GIMP 在转换图片为 GIF
格式时,会提示输入注释。而我们今天要介绍的 polyglots 方法正是把你要隐藏的脚本(脚
本代码的开始和结束处请各保留至少 2 个空格,具体用处后面会讲到)写入到 GIF 图片的注
释字段中去!
如果在步骤 1 中你已经使用了 GIMP。那么,恭喜你。你离成功已经很近了,可以直接进
入步骤 3。否则的话,请使用支持 2 进制的文件编辑软件,直接编辑 GIF 图片。GIF89a
格式的 GIF 图片(文件头是 GIF89a)采用的注释符的 16 进制编码开始标记是:21 FE,
结束标记是 00。你的代码就隐藏在 GIF 注释块中。
运气好的话,这时候的 GIF 图片已经成功的成为 GIF+Javascript 混合体(gifjavascript-
polyglots)了。但不幸的是,你通常都是一个杯具。我们还需要人工 review 生成的 GIF
图片。确保生成的 GIF 图片既遵守 GIF89a 编码格式标准,又是一段合法的 Javascript 脚
本。以下是一个最简单的 gifjavascript-polyglots 实例(16 进制表示该文件)
Jasvir Nagra
注意到上面的 GIF 图片有什么特点了吗?
(1). 遵循 GIF89a 编码规范。只要图片能够正常显示,我们就可以简单认为此条件是满足