티스토리 뷰
스테가노그래피 (steganography)
#include<stdio.h>
int main(){
int buffer;
int hab=0;
FILE* fr = fopen("c:\\HidenFile.bmp","rb"); // 파일이 숨겨져있는 이미지 경로
FILE* fw = fopen("c:\\data.exe","wb"); // 숨겨진 파일 저장할 경로
int i=0;
fseek(fr,54,SEEK_SET); //54 byte 부터 확인(시작할 파일위치 지시자 설정)
while(1){
i=0;
hab=0;
while(i<8){ // 8비트당 한자리씩 가져와서
uffer = fgetc(fr);
if(buffer == -1) break;
if((buffer % 2) == 1) buffer=1;
// 1비트만 확인하니까 1byte 가져온 값의 홀수인지 짝수인지만 확인하면 된다.
else buffer=0; //아니라면 0을 대입시킴.
switch(i){
// 비트당 승수감소하기 때문에 첫번째 비트는 *128을 해줘야 한다.
case 0: {hab=hab+(buffer*128);break;}
case 1: {hab=hab+(buffer*64);break;}
case 2: {hab=hab+(buffer*32);break;}
case 3: {hab=hab+(buffer*16);break;}
case 4: {hab=hab+(buffer*8);break;}
case 5: {hab=hab+(buffer*4);break;}
case 6: {hab=hab+(buffer*2);break;}
case 7: {hab=hab+(buffer*1);break;}
}//switch
// while이 8번 돌면 hab 의 값이 1byte로 완성된다.
i++;
}//while
if(buffer == -1) break;
fputc(hab,fw); // 완성된 1byte 값을 data.exe 파일에 1byte씩 쓴다.
}//while
fclose(fr);
fclose(fw);
return 0;
}
'ETC > 종합' 카테고리의 다른 글
[리버싱] 리버스엔지니어링 기초 (0) | 2015.07.15 |
---|---|
ascii-table (이미지) (0) | 2015.07.10 |
지역변수 stack, 전역 변수 data (0) | 2015.07.03 |
난수 함수 (rand, srand) (0) | 2015.07.03 |
기초 문법( break, continue) (0) | 2015.07.01 |