不可识别文件到可识别文件的测试

说到把不可识别文件转换成可识别文件大家一定会想到B6编码。

我们最常用的就是email了。
比如说:信的内容是文本,附件的类型可能是图片,视频,音频文件等等。在发送email的时候首先把这些文件分别编码,用内容类型分割符号分割开来。然后做为一个整体发送出去。
接收email的程序在对于每一断内容进行解码。解码的过程是最复杂的,因为email可以作为附件发送,而email的email也可以看做一个附件。。

一般一个简单的email正文件格式如下:

Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64
Message-Id: 
 
xxxx----
 
Content-Type: image/gif
Content-Transfer-Encoding: base64
Message-Id:
 
xxx----

这封信就是一个文本内容加上一个简单的图片附件格式发送的。

这个是在email中的应用,我就不多说了。

我说一下在mht文件中的应用。
如果不了解mht文件请到google中搜索一下相关文章。

首先,我们做一个简单的测试。把现面这个图片做一个b6编码。

B6编码如下:

R0lGODlheAB4APf/AAAtnf/39Ao7pKO64hFLrf8TCv+hjZy24Nnj9AAlmiNatAo1of8jCgA1ocHR
7Pb4/v/49hxVsf8yEWuRzv8JAP9FIszZ8FyGyf/8+5mz3//6+AAclObs+fH1/P+smvn6/v9KJfv8
/3KX0f9ZOf8KCqrA5LzN6o6q2fT3/f/d1bHF5v/28/99Yvz9/0Jyv/8aCv85FP/WzP+yon2e1HeZ
0cXV7v/08Heb0vr7/pSu3AoblGGIyd3m9v/w7P8eCujt+QA5o/9kSTVpvAAWkuzx+ithtgAhl/88
GP+Wf//BtP8OCv/9/K7D5QxGqSpftoKh1v8EAIin2P/FuP/i2v9OK6/F5k16xP+wnP/Z0FN/xf+b
iIuq25aw3ai94+Hp9/+JcP8qCP9UM/L2/P/y7v+mlP9iQurw+v/s5tfh9Aoomv+PeWuOzP9dPdvl
9f/a0Qosnv96XP/SyP8OAER0wAArnP9pTEh2wbnK6e7y+//q5ApAp/8vD//k3Qown2eNzdDc8QAo
m/8zC/9AHP9uUP+AZzttvf+dhkx4w+Ts+AoflmSKyv+ahi9kuP9zVv+9rz1wvv+qmUl5wv+Gbf+E
a8rZ8P/PxP/Nwv/JvP9QL/9wUzNmubnM6rPI6AAxn/+3qQokmImk14aj132d0/91V/9kRVaBxhRP
r/8oCv8WAAASkP////8KAP8HAP8MAP/c0////v/+/f8DAP7////+/v7+/+3y+//7+v/t6P/o4+Pq
9/8qDP3+//9cO/f5/v/h2v+TffX4/f+Yg9Pe8v+zpP/LwP/18tHe8v/o4Q9Jq098xP/j3f92Wv+N
d/+/ssTT7f+1pv9sT+/0+//598rY75Gq2tDc8v/g2P+Cav9nSf+Lc//u6f/v6v+olf/s45u44LzP
7F+Hyf/r4v/k2+Tr922Sz//n4X+g1v/YzXqb0//b0//z612Fx9bf8/+RePb4/f+unf/x7b7Q65Gs
2pGt3P/58uTr+P8bAIal18jW7v9cNgormyZetf8nAP+Jcf8AAP///yH5BAEAAP8ALAAAAAB4AHgA
AAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3MixIqyOIEN2xBJDpMmTEwPoQsmypUJV
JG65nEnzH4lhNXOehEVCks6fIMf4YwG0qEYp/pgZXWoRhD9HTKNGtEUiptSrDeP484G1a0JYDPx5
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
HFVJr/MNMgXUT//6jA0IADs=

注意标准的b6编码应该是矩形的。

如果你把这个文件解码的时候,必须读一行解一行。还可以把这些字符用b6反编码会原来的图片。

下面我们建立一个mht文件,内容如下:

gif.mht

-----------------------------------------------
Content-Type: image/gif;
Content-Transfer-Encoding: base64
Message-Id:
 
R0lGODlheAB4APf/AAAtnf/39Ao7pKO64hFLrf8TCv+hjZy24Nnj9AAlmiNatAo1of8jCgA1ocHR
7Pb4/v/49hxVsf8yEWuRzv8JAP9FIszZ8FyGyf/8+5mz3//6+AAclObs+fH1/P+smvn6/v9KJfv8
/3KX0f9ZOf8KCqrA5LzN6o6q2fT3/f/d1bHF5v/28/99Yvz9/0Jyv/8aCv85FP/WzP+yon2e1HeZ
0cXV7v/08Heb0vr7/pSu3AoblGGIyd3m9v/w7P8eCujt+QA5o/9kSTVpvAAWkuzx+ithtgAhl/88
GP+Wf//BtP8OCv/9/K7D5QxGqSpftoKh1v8EAIin2P/FuP/i2v9OK6/F5k16xP+wnP/Z0FN/xf+b
iIuq25aw3ai94+Hp9/+JcP8qCP9UM/L2/P/y7v+mlP9iQurw+v/s5tfh9Aoomv+PeWuOzP9dPdvl
9f/a0Qosnv96XP/SyP8OAER0wAArnP9pTEh2wbnK6e7y+//q5ApAp/8vD//k3Qown2eNzdDc8QAo
m/8zC/9AHP9uUP+AZzttvf+dhkx4w+Ts+AoflmSKyv+ahi9kuP9zVv+9rz1wvv+qmUl5wv+Gbf+E
a8rZ8P/PxP/Nwv/JvP9QL/9wUzNmubnM6rPI6AAxn/+3qQokmImk14aj132d0/91V/9kRVaBxhRP
r/8oCv8WAAASkP////8KAP8HAP8MAP/c0////v/+/f8DAP7////+/v7+/+3y+//7+v/t6P/o4+Pq
9/8qDP3+//9cO/f5/v/h2v+TffX4/f+Yg9Pe8v+zpP/LwP/18tHe8v/o4Q9Jq098xP/j3f92Wv+N
d/+/ssTT7f+1pv9sT+/0+//598rY75Gq2tDc8v/g2P+Cav9nSf+Lc//u6f/v6v+olf/s45u44LzP
7F+Hyf/r4v/k2+Tr922Sz//n4X+g1v/YzXqb0//b0//z612Fx9bf8/+RePb4/f+unf/x7b7Q65Gs
2pGt3P/58uTr+P8bAIal18jW7v9cNgormyZetf8nAP+Jcf8AAP///yH5BAEAAP8ALAAAAAB4AHgA
AAj/AP8JHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3MixIqyOIEN2xBJDpMmTEwPoQsmypUJV
JG65nEnzH4lhNXOehEVCks6fIMf4YwG0qEYp/pgZXWoRhD9HTKNGtEUiptSrDeP484G1a0JYDPx5
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
HFVJr/MNMgXUT//6jA0IADs=

然后用MS.IE打开看看,看到了什么,是不是那张图片。

然后你在用浏览器的查看源文件,看到的信息如下:

<center><img src="CID:{CC62AC91-89CF-432A-8673-4A9379C85E62}/ATT00001.gif" alt="" /></center>

象Mozilla Firefox 等浏览器还是不支持的.

祝福所有的朋友圣诞节快乐

今天又是平安夜了。

对于西方的节日我不是特别有兴趣,但是平安夜对于我来说有不同的感觉。

 

从2002年的圣诞节起,我都能收到华仔发了的圣诞贺卡,但今年还没有收到华仔的贺卡。:)

第一次过这个节日是在大学,那是1998年12月24日晚上,一个大学的哥们给我介绍2个兄弟认识。
从那一天开始我们四个人就结拜为兄弟,我排行老三。那天晚上我们喝了很多酒,一直喝到凌晨2点多。

99年初的时候我们四个经常在一起,还记得老二和别人打架的情节。
当时老二回来说,把人鼻子打塌了,对方来了10多个人。我们这边赶紧找人。找到机械系96级的几个哥们,
后来人越来越多,对方人也越来越多,最后弄成全校两个大系之间的矛盾。过了2周左右的时间,
双发在调节人的调节下终于和平解决了。

其中记得有两次老大一个人拿着棍子上去对付10多个人,当时我们几个人都做好了被学校开除的打算了。
幸好事情没有闹到学校去。

在学校的那段时间,我们几个经常喝酒,出去玩。想着做点东西,后来老二开了个商店,老四开个饭店。

还记得有一次元旦,长春的规定不让在市内放鞭炮,我们几个喝酒回来在学校内放鞭炮,被小区警察发现。
所有的事情老大一个人抗下来。

毕业之后,老大和老二在部队里面混。老四没有到毕业由于某些原因被学校辍学了,以后再也没有留下联系
方式。

我在大连的时候老二从部队到大连看过我。

2003年10◎1期间我特别去部队看老大和老二,两年多没有见面,兄弟再次见面。特别高兴。连续喝了几次。

2003年年底老二就从部队出来了,回家做生意了,2004年初来北京过。今天我和老大通个电话。正在寝室
睡觉呢:)

毕业后的几年圣诞节过的很一般,以前在大连的时候,和单位在一起搞活动。去年来北京,幸好北京的同学多
还有一个就是当初高我们一级的一个兄弟,我们俩经常喝酒。去年就是一起玩的。今天也不例外。

我们兄弟平时都不怎么联系,但是有事情的时候,节日的时候。肯定聚在一起的。

我们最大的特点是重感情,重意气。

对了,还有一个兄弟在青岛。

祝福所有的兄弟圣诞快乐。身体健康。

向JPG文件中追加内容的测试

今天做个测试,就是如何用图片文件传递自己的一些隐藏信息。

首先明白,所有的文件都有头信息,所以不能在头文件中开始追加,因为是测试,我选择了在文件的最后追加。。。

选择非位图文件JPEG文件为测试目标。

思路很简单,定义一个常量byte[]。
读取目标文件,获得目标文件的byte[],然后把文件内容重新写入一个新的文件,在最后把常量byte[]追加上去。

读取新建立的文件,读取最后制定长度的byte[],就是我们要的byte[].

以下例子仅是一个测试程序。

package com.zhanglihai.test;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
 *<P>Title:</P>
 *<P>Description:</P>
 *<P>Copyright:Copyright(c)2004</P>
 *<P>Company:</P>
 *@author:zhanglihai
 *@version:1.0
 *@date:2004-12-22
 */
public class SuperAddBinaryInfo{
    /**
     *
     */
    private static byte[] addBytes=new String("abc123").getBytes();
    private static StringsourceFile="D:/work_test/icon.jpg";
    private static StringaddFile="D:/work_test/icona.jpg";
    public SuperAddBinaryInfo(){
    }
    /**
     *读取目标文件
     *@throwsException
     */
    public static void writeAdd()throwsException{
        FileInputStream input=new FileInputStream(sourceFile);
        ByteArrayOutputStream out=new ByteArrayOutputStream(52);
       int b=-1;
       while((b=input.read())!=-1){
           out.write(b);
       }
       /**
        *生成目标文件
        */
        FileOutputStream output= newFileOutputStream(addFile);
        output.write(out.toByteArray());
       /**
        *此处追加信息
        */
        output.write(addBytes);
        output.flush();
        output.close();
    }
    /**
     *从追加后的文件中读取原来字符串。
     *@throwsException
     */
    public static void readAdd() throws Exception{
        FileInputStream input= new FileInputStream(addFile);
        ByteArrayOutputStream out= new ByteArrayOutputStream(52);
       int b=-1;
       while((b=input.read())!=-1){
           out.write(b);
       }
        out.flush();
        out.close();
        /******追加后文件的长度*****/
      byte[] bytes=out.toByteArray();
        /********获得原始文件的长度,也就是追加字符的起始点*******/
       int len=(bytes.length-addBytes.length);
        /*******创建一个byte用来还原*************/
      byte[] bs=new byte[addBytes.length];
       for(int i=len;i<bytes.length;i++){
           bs[i-len]=bytes[i];
       }
        System.out.println(newString(bs));
    }
    public static void main(String[]args) throws Exception{
        writeAdd();
        readAdd();
    }
}

利用以上的实现,我们可以在jpeg文件中传递一些数据,当然可以设置图片最后的某一个byte开始到某一个byte结束。
追加后的图片仍然可以正常显示,JPEG,GIF格式点文件,在文件后端多几个byte是不影响显示的。但是对于BMP等位图文件是不可以的。

PS:这是JPEG格式天生的缺陷所致,黑客利用这个缺陷制造各种病毒。有时候我们看到的是一张图片,你可以将它的扩展名修改一下,就得到了另一个文件。
利用copy+ 也可以实现类似的功能。

这张图是一个鸭子,如果将其修改成一个EXE文件,执行该文件就能得到一个神奇的程序。