图片文件合成器
(资料图片)
背景
初学C语言,突然接触到这个功能,发现这个功能有很多用途。所以,写个博客记录一下。
原理
图片、文件合成的原理其实就是将文件的二进制代码加载到图片的二进制代码后面,合成一个二进制文件; windows加载器在进行加载时只结合文件的后缀名,检索文件的标志头和结束标志的位置读取。也就是因为如此,我们有了可改造的空间。
为了更加清楚的了解其原理,根据自己的理解,绘制如下原理图。 为了进一步了解其原理,将三个文件的二进制文件打开,根据其首末对比深入了解。(1:JPG文件的原码、2:ZIP文件的原码、3:合成文件的原码)
方法
关于图片文件合成器,本文阐述了两种方法。<1>根据cmd中的copy命令将图片、文件进行合成。<2>利用C语言写了一段代码进行图片、文件的合成。
方法一
<1>假设创建一个JPG文件和一个ZIP文件(该文件是一个DOCX文件经过压缩得到)
<2>win+R→cmd→copy /?命令 由上述原理可知 copy 命令下的 /B 命令即可将两个文件的二进制文件放到一个文件中去。<3>copy /b 1.jpg+2.zip 3.zip 即可完成图片、文件的合成。 生成的文件名假设为3.jpg。<4>3.jpg<5>将3.jpg文件的后缀名改为.zip(即改为压缩文件) 解压后,你会发现原来的DOCX文件。
方法二
<1>将需要进行合成的文件跟程序代码放在相同的路径下。
<2>C语言代码实现跟方法一原理相同,所以直接上代码。
#include#includevoid main(){//声明变量FILE *f_pic,*f_file,*f_compound;char pic_name[20],file_name[20],compound_name[20];char ch;/printf("<>\n");printf("Enter the name of pic: ");scanf("%s",&pic_name);printf("Enter the name of file: ");scanf("%s",&file_name);printf("Enter the name of compound:");scanf("%s",&compound_name);///读写二进制文件 if(f_pic = fopen(pic_name,"rb"));else{printf("Can not open %s !!!!!!!\n",pic_name);exit(0);}if(f_file = fopen(file_name,"rb"));else{printf("Can not open %s !!!!!!!\n",file_name);exit(0);}if(f_compound = fopen(compound_name,"wb"));else{printf("Can not open %s !!!!!!!\n",compound_name);exit(0);}///feof()函数判断二进制文件是否结束while(!feof(f_pic)){ch = fgetc(f_pic);fputc(ch,f_compound);}fclose(f_pic);while(!feof(f_file)){ch = fgetc(f_file);fputc(ch,f_compound);}fclose(f_file);fclose(f_compound);system("pause");}
<2>运行结果
结束语
看一下文件大小,你会发现合成文件等同于JPG文件+ZIP文件。 这个功能可以用来隐藏一些重要文件,还可以做一些加密文件...... 哈哈哈,第一次写博客,初学者记录一下。 (初学者,语言有些简单,如有错误,希望提出批评哦! )