2010.01.10 16:27 System


파일 구조를 공부하던 중

공부하기 좋은 문제를 발견했다

사실 발견 한지는 꽤 됐는데.. 내내 미루고 있다가 풀기로 했다

처음 파일을 보면 파일이름은 mirror.avi 고

재생해보면 다크나이트의 예고편임을 알 수 있다

예고편을 봐도 힌트 같은건 눈꼽만치도 찾아볼수도 없다

파일을 헥사 에디터로 열어보면



Base64로 인코딩된 Hint를 볼 수 있다

Decoding 해보면 .redaeHriapeR 이다

이게 뭔소린고 하니

거꾸로 뒤집어보면 RepairHeader

헤더를 고치란다

마지막에 있는 문자열들이 죄다 뒤집어져있는것 , 파일이름이 mirror 인것으로

파일을 통째로 뒤집어야 한다는 것을 유추해 낼 수 있다.

물론 무작정 뒤집는게 아니라 Header 의 format 은 유지해야 할 것이다

LISTt...strlstrh8... 부분과 끝부분이 일치하는 것을 보아하니

0x58 부분부터 뒤집는게 틀림없어 보인다

이를 토대로 간단히 소스를 짜보자

파일 입출력에 관한 함수를 사용하면 된다

뒤집는 방법에는 크게

1. 배열을 선언해놓고 파일에 필요한 데이터를 저장하고, 이를 토대로 파일을 생성하는 방법

2. 파일 포인터를 이용해 한칸씩 움직이며 원본파일에서 읽고, 목표파일에 저장하는 방법

2번째 방법으로 파일 포인터를 한칸씩 움직이면서 해봤는데 속도가 너무 느리다 =,.=

파일 포인터에 관한 함수를 찾아보면 훨씬 빠르게 하는 방법도 있겠지만..

1번 방법으로 풀기로 했다.


    7
 int main(){

    8 

    9 int size,i;

   10 char *buf_mirror,*buf_reverse;

   11 FILE *mirror, *reverse_mirror;

   12 

   13 if( (mirror = fopen("C:\\tmp\\dark knight.avi", "rb") )

   14    && (reverse_mirror = fopen("C:\\tmp\\dukhoo knight.avi", "wb"))==NULL)

   15     printf("Errrrrrrrrr\n");

   16 

   17 

   18 buf_mirror=new char[size];

   19 buf_reverse= new char[size];

   20 

   21 fseek(mirror, 1, SEEK_END);

   22 size = ftell(mirror);

   23 rewind(mirror);

   24 

   25 fread(buf_mirror,1,size,mirror);

   26 

   27 

   28 for(i=0;i<='\x57';i++)

   29  buf_reverse[i] = buf_mirror[i];

   30 

   31 while( ++i <= size)

   32     buf_reverse[ i -1 ] = buf_mirror [size-i+'\x57'];

   33 

   34 fwrite(buf_reverse,1,size,reverse_mirror);   

   35 

   36 delete buf_mirror;

   37 delete buf_reverse;

   38 

   39 }

재생해보면 배트맨 대신 윤하가 나온다

동영상 마지막에 보면 패스워드가 찍히고 이상 문제 풀이 끗





'System' 카테고리의 다른 글

What is VCP[Virtualized Code Protection]?  (0) 2010.01.29
셸 코드 작성  (0) 2010.01.17
2008 JFF 8번 문제 풀이  (0) 2010.01.10
[펌]교착 상태와 그 조건  (0) 2010.01.02
What is CALLBACK function?  (0) 2010.01.01
[펌]함수 호출규약 [Calling Convention]  (0) 2010.01.01
Posted by LinkC

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday49
Today16
Total323,950

달력

 « |  » 2018.12
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

최근에 받은 트랙백

글 보관함


. .