<Wargame & CTF>/Reversing.kr

[Reversing.kr]ImagePrc

gosoeungduk 2019. 3. 27. 00:45
반응형

그래픽 관련 Windows API 를 공부할 수 있었던 문제이다.



그림을 그릴 수 있는 프로그램이 나오고 아무거나 그려서 Check를 누르면 틀렸다고 나온다.



IDA로 디컴파일을 해보았다.


WinMain 함수를 보면 메세지를 처리할 것만 같이 생긴 WndProc 함수가 나온다.


(여담이지만 예전에 API 문제는 WndProc을 찾자는 공식(?)을 외웠던 것 같다...)



그리고 WndProc 내부를 살펴보면 bitmap 이미지를 다루는 함수들이 보인다.


우선 CreateCompatibleBitmap으로 가로 200 세로 150의 이미지 핸들(?)을 만들고

CreateCompatibleDC 로 메모리핸들을 만든다.


그 후에 hdc에 가로 200 , 세로 150의 비트맵 이미지를 옮기고 BitBlt 함수로 윈도우 창에 그린다.


그런데 아까 프로그램을 켜본결과 아무것도 없는 빈화면인 것 같다....


일단 넘어가고,



중요한 부분이다.


draw 변수를 보면 new로 힙을 할당하는데 여러번 동적디버깅 해본결과, 우리가 그린 정보를 DIBits가 반영하여 hdc에 업데이트 하는 것 같다... 


물론 우리가 그린 것도 중요하지만 더 중요한건


FindResourceA ~ LockResource 함수 부분이다. 이 부분은 파일내에서 리소스(이미지파일이나 여러 미디어파일들(?), 구성요소(?)) 를 갖고오는 함수라고 한다.


과정을 설명하자면

FindResourceA로 101번의 ID를 갖고있는 리소스를 갖고오고 그거에 대한 리소스 EntryPoint 주소를 v9 변수에 넣는다.


그 다음 LoadResource인데 v9에서 시작되는 리소스파일을 v10에 저장한다. 그리고 그에 대한 데이터를 LockResource 함수로 잠궈버린다

(확인사살..)


아무튼 설명대로면 원래의 리소스에 대한 정보가 LockResource로 인해서 Origin_Resource 변수에 고정되게 되는데, 일단 제쳐두고 진행해보자.



이 부분이 핵심인데 아까 본 "Wrong!" 메세지 팝업이 이 사진에서 보이는 MessageBoxA 함수에 의해 실행된 것이다. 


안그래도 Wrong에 반대되는 성공 문자열을 찾아보았는데 안보여서 일단은 Wrong 이라도 뜨지않게 조건을 맞춰보자 하면서 동적디버깅을 해보았다.


처음에 일단 내가 그린 그림이 들어간 힙주소와 원래의 리소스가 들어간 힙주소를 빼서 두 주소 간의 offset을 구한다.


그리고 그걸 인덱스로 사용하면서 내가 그린 그림 데이터와 원래의 리소스가 동일한 리소스인지 확인한다.


사실 여기까지 봐도 원래의 리소스가 어떠한 비트맵 파일인 것이라는 걸 알 수 있었다.


그리고 v12가 90000 이상 , 그러니까 90000번까지의 데이터까지 만약 동일하다면 우리가 일반적으로 실행했을 때, 실행되지않았던 함수가 실행 될 것이다.


그러면 리소스를 찾아보자!!!! PEview를 이용하였다.



일단 원래 리소스가 상주해있는 힙 영역이다. 0xFF의 데이터가 주르륵 나열되어있다.




그리고 PEview로 본 원래의 리소스(영역) 


그 중에서 MANIFEST영역이 우리가 방금 본 0xFF가 나열된 부분이다.



[ AhnLab출처 ]


비트맵 파일 구조를 보면 이미지 데이터가 이런 식으로 되어있다고 한다. 이를 참조해서 리소스 영역을 이용해보자.


처음에는 생각을 잘못해서 가로 200, 세로 150 이미지를 그림판으로 만들어서 이미지 데이터를 ImagePrc.exe 의 MANIFEST영역에 붙여넣기하고 억지로 90000번 if문을 통과시켰는데 Wrong은 안나왔지만 , 아무 플래그도 나오지 않았다.


그래서 역으로 한 번 이미지에 리소스 데이터를 넣어보았다.



그랬더니, 플래그가 들어간 이미지가 생성되었다!!!


- 끝 - 




반응형

'<Wargame & CTF> > Reversing.kr' 카테고리의 다른 글

[ Reversing.kr ] Ransomware  (0) 2020.01.02
[Reversing.kr]Replace  (0) 2019.02.08
[Reversing.kr]Music_Player  (1) 2019.01.30
[Reversing.kr]Easy Unpack  (0) 2019.01.18
[Reversing.kr]Easy Keygen  (0) 2019.01.15