프로그램을 실행하면 그림을 그리고 검사를 받는다.
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 ( 직접 해보세요. 힌트는 대문자 )