file2bmp

アバター
ideyan
記事: 2
登録日時: 15年前
住所: 京都

file2bmp

投稿記事 by ideyan » 14年前

ここに画像以外のものもなんとか添付できないか考えてみた。

とりあえずファイルに適当なヘッダつけて騙してみようと言う事で
何かのファイル⇒bmp形式のファイル
に偽装(?)するプログラムを書いてみた。

完成した後でbmpは添付できないことを思い出した。

折角書いたのでコードだけは置いておきます;;
添付画像は偽装ファイルをエディタで覗いたものです。

CODE:

#include 
#include 
#include 

struct{
	unsigned long  Size;
	long           Width;
	long           Height;
	unsigned short Planes;
	unsigned short BitCount;
	unsigned long  Compression;
	unsigned long  SizeImage;
	long           XPixPerMeter;
	long           YPixPerMeter;
	unsigned long  ClrUsed;
	unsigned long  ClrImporant;
}INFO={40,0,0,1,24,0,0,0,0,0,0};

int main(int argc,char *argv[])
{
	int i;
	int namelen,fsize;
	int width,height;
	FILE *in,*out,*tmp;
	char data;
	
	if((tmp=tmpfile())==NULL)return -1;
	fwrite("FILE2BMP",sizeof(char),strlen("FILE2BMP"),tmp);
	
	for(i=1;argv[i]!=NULL;++i){
		
		if((in=fopen(argv[i],"rb"))==NULL)continue;
		printf("open : %s\n",argv[i]);
		
		//ファイル名書き込み
		namelen=strlen(argv[i]);
		fwrite(&namelen,sizeof(int),1,tmp);
		fwrite(argv[i],sizeof(char),namelen,tmp);
		
		//ファイルサイズ書き込み
		fseek(in,0,SEEK_END);
		fsize=ftell(in);
		fwrite(&fsize,sizeof(int),1,tmp);
		
		//ファイル読み込み&書き込み
		fseek(in,0,SEEK_SET);
		while(fread(&data,sizeof(char),1,in))fwrite(&data,sizeof(char),1,tmp);
		fclose(in);
	}
	if((fsize=ftell(tmp))>8){
		if((out=fopen("f2b.bmp","wb"))==NULL){
			fclose(tmp);
			return -1;
		}
		
		i=(fsize%3)?fsize/3:fsize/3+1;
		width=(int)sqrt(i)+1;
		width+=(width%4)?4-(width%4):0;
		height=(i%width)?i/width+1:i%width;
		fsize=width*height*3+54;
		
		//ファイルヘッダ書き込み
		fseek(tmp,0,SEEK_SET);
		fwrite("BM",sizeof(char),2,out);
		fwrite(&fsize,sizeof(int),1,out);
		i=0;
		fwrite(&i,sizeof(int),1,out);
		i=54;
		fwrite(&i,sizeof(int),1,out);
		
		fsize-=54;
		//情報ヘッダ書き込み
		INFO.Width=width;
		INFO.Height=height;
		INFO.SizeImage=fsize;
		fwrite(&INFO,sizeof(INFO),1,out);
		
		//画像データ書き込み
		for(i=0;i<fsize;++i){
			if(fread(&data,sizeof(char),1,tmp));
			else data=0;
			fwrite(&data,sizeof(char),1,out);
		}
		fclose(out);
	}
	fclose(tmp);
	return 0;
}
添付ファイル
b.png
b.png (19.75 KiB) 閲覧数: 29 回
最後に編集したユーザー ideyan on 2010年10月21日(木) 03:06 [ 編集 1 回目 ]

コメントはまだありません。