프로그램은 심플하네요. Check를 눌러보면 Wrong! 이라고 뜹니다. 어셈블리 코드를 확인해보겠습니다. EDI는 40139D번지에서 0으로 초기화되고, 루프를 돌 때 마다 1씩 증가해서, 매 루프가 끝날 때 마다 15F90(=90000)와 비교해 작으면 루프를 계속 돕니다. 그리고 [ECX], [EAX+ECX]가 다를 때 루프를 즉시 탈출해 Wrong을 출력합니다. 3번째로 PUSH되는 주소에 data를 씁니다.
음.. 그런데 Buffer가 NULL입니다. 그러면 Bitmapinfo에 쓴다는 것 같네요. 조금 오리무중이지만 일단 401508번지 함수 안으로 들어가봅시다. 주구장창 가다가 HeapAlloc을 만났습니다. 크기도 15F90인것이 뭔가 그럴싸하네요. 계속 가봅시다. 핵심은 이부분이었네요. FIndResourceA, LoadResource, LockResource를 차례로 실행하고 ESI 주소를 확인해보면 나중에 image를 비교하는 곳의 주소를 제대로 가리키고 있습니다. 그러면 프로그램에서 뒤 90000바이트를 떼내어 그림파일을 만들면 될거고, 아까 GetDIBits에서 nLines = 150이니까 높이가 150, 넓이는 200이라고 추정이 가능합니다.(각 점이 3바이트씩 쓰니까.)
정답을 알 수 있습니다. |
'워게임 > Reversing.kr' 카테고리의 다른 글
[Reversing.kr] Ransomware (0) | 2017.12.31 |
---|---|
[Reversing.kr] Direct3D FPS (0) | 2017.12.30 |
[Reversing.kr] Position (0) | 2017.12.30 |
[Reversing.kr] Replace (0) | 2017.12.29 |
[Reversing.kr] Music Player (0) | 2017.12.29 |
[Reversing.kr] Easy Unpack (0) | 2017.12.29 |