经常看到分享“福利”的时候,都是放一张图片,改了后缀,变成rar,就可以找到资料。RAR变JPG,JPG变RAR压缩包与图片合成工具,就是把两个文件强行合并,图片放在上面!一般 在 百度贴吧 想给别人发 压缩包 但是又不能上传 就可以用这本工具 将RAR与JPG合并成JPG图片 发到贴吧 别人把图片下载回来 改成RAR 就能解压。在帖子里 还能看图。。。
这种「同时是多种格式」的文件叫做 polyglot,本来指同时能被多种编程语言编译的源代码。
程序原理分析:
本质上它是利用文件格式设计而 hack,最重要的一个原理就是:RAR 的文件格式规定文件头不必从 0 地址开始。RAR 程序解压文件时,会寻找
0x52 0x61 0x72 0x21 0x1a 0x07 0x00
这样一串字节,具体意义请见[1],前四个字节转为 ASCII 码恰好是「Rar!」。正常的 RAR 文件会把这串字节放在文件头部,但 RAR 文件格式并没有规定这是必须的(实际上,RAR 文件并不是开放的格式,怎么才算「正确」的 RAR 文件并无公共可见的文档),所以如果文件头并没有出现它,RAR 解压程序就会持续搜寻这个字串,找到之后把后面的部分当作 RAR 来处里,前面的部分就无视掉了。
反过来,JPG 格式规定文件起始两个字节必须是 0xFF 0xD8,如果找不到这两个字节,那么就不认为它是 JPG 文件。
RAR 并不是唯一一种不规定文件格式必须起始于文件头的格式。比如下面这个文件同时是:
Windows 应用程序
Adobe PDF
Java JAR
HTML 网页
为了提高可用性,jpg还rar这样的软件都会试图在解码时排除那些错误的字节,一般情况下,除非文件头位置,其他位置的错误最多造成马赛克而已。最简单的是copy a.jpg+b.rar c.jpg 基本上不会影响两个文件的打开。最早还有txt的玩法。推荐winhex深入研究。
16进制分析:
用16进制编辑器打开这样的文件,很明显看到两个文件的文件头大写JPEG和!RAR。
可以实现的主要原因有两个,一是jpeg的头格式里面保存了jpeg图像的图像的宽度和高度,而window图片阅读器正好是按照jpeg的格式处理的,活该它就这样,读取到jpeg文件结尾,rar的开头后就停止了。
二是rar要支持用rar程序打开自解压形式的压缩文件。因为自解压是一种可执行文件的形式,rar的实现方法就是把rar文件附到自解压程序的尾部。于是在我们按照'用winrar打开'这种方式给它发命令时,它只是把jpeg当作一个自解压程序了!不信你去桌面右键->'用winrar'一下jpg。






















大小: 28.4M

大小: 94.9M
PDF文件转换成Word(Solid Converter PDF)10.0.9341.3476 中文特别版
Restorator 2009V1807Bulid绿色中文免费版
汉王PDF转Wordv8.1简体中文版
得力PDF转WORDv1.8.6.6 官方免费版
福昕PDF转Word转换器4.0.0.1211官方免费版
PDF修改器2.5.2.0 绿色免费版
Flash转换工具Magic Swf2Avi2008 汉化特别版
Excel文件修复工具(GetData Repair My Excel)v1.1.0.71 英文破解版
DocTranslate(翻译Doc和Ppt文档的语言)V1.1.0.2英文绿色版
扬帆绿色软件制作工具那片叶子最终版
Cogniview PDF2XL Enterprise(把pdf转换excel工具)v4.6.0.179英文绿色特别版
Abdio PDF Converter Pro(转换文件格式到PDF)V6.1英文安装版
用友U8科目错误修正工具V1.0绿色版
AJC Grep(文件搜索替换、数据提取)V1.3.4绿色英文特别版
RecycleBinExV1.0.5.530 汉化绿色版
AJC Diffv1.91英文绿色特别版