본문 바로가기
Wargame Write-Up/Reversing.kr

[Reversing.kr] (Reversing] ImagePrc 풀이

by snwo 2020. 3. 25.

 

프로그램을 실행하면 그림을 그리고 검사를 받는다.


 

Wrong! 탈락한것같다.


 

exe32 파일이니, 올리디버거로 열어보자


Wrong을 사용하는 주소로 가보자


 

일단 GetDIBits 로 비트맵이미지를 가져온다. 내가그린그림이 될것같다.

그리고 FindResourceA, LoadResource 로 비교할 파일을 가져온다.


비트하나씩 비교해서, 틀리면 바로 Wrong 을 출력하는것같다.

그렇다면, 다운받을때 딸려나온파일은 없는데 어떤파일을 가져오는걸까?


PE Viewer 로 열어봤는데, rsrc 섹션에, 리소스데이터가있다.


[ IMAGE_RESOURCE_DATA_ENTRY ]

 

요기에 사이즈와, 시작주소가있다.


비트맵이미지파일이다. 밑으로 쭉 내려보니까 중간에 00 도 있다는걸 확인했다.

정상적인 비트맵이미지파일을 만들어서 이 값을 붙여넣으면 되겠다.

그러기위해선, 높이와 너비를 알아야한다.


 

GetDIBits 의 인자중에, pBitmapinfo 인자가있다. 이건 BITMAPINFOHEADER 구조체이다.

 

높이와 너비를 알수있다!

 

그렇다면 이 함수를 호출한 후에, 0x18FA88 에서 값을 확인하자


DWORD biSize = 0x28

LONG biWidth = 0xC8 (200d)

LONG bi Height = 0x96 (150d)

...

WORD biBitCount = 0x18 (24d)

 

 인걸 알 수 있다.


[ 높이 150, 너비 200 인 비트맵이미지파일을 생성하자 ]

 

 

크기를 지정하고,

 

파일 - 다른이름으로 저장 - BMP 파일로 저장한다. (24비트)(biBitCount=24)


imagePrc 를 열어서, 0x9060 부터 비트맵사이즈인 15F90 만큼 선택해서 복사한다.


 

아까 생성한 비트맵이미지파일에 붙여넣어준다.


그러면 빈파일에 글씨가 써진다. 이게바로 FLAG ( 직접 해보세요. 힌트는 대문자 )