-->

[reversing.kr] ImagePrc 풀이

반응형

문제의 의도대로 정확하게 분석해서 푼듯한 느낌은 안들지만 rsrc 섹션 데이터를 확인하는 순간 풀 수 있는 문제이다. 봐야겠다는 생각을 늦게하긴 했지만...

 

 

 

reversing.kr ImagePrc 풀이

ImagePrc.exe 를 실행시킨 후 Check를 누르면 틀렸다는 메시지창에 나온다.

 

 

 

Wrong 문자열이 사용되는 함수로 먼저 가보자.

 

 

 

Wrong 창이 출력되는 블록을 보면 딱 한가지 경로밖에 없는데 처음 함수 시작에서 빨간네모박스 분기를 타는 것이다. 처음 분기에서 왼쪽 분기를 타게 되면 무조건 Wrong 출력되는 곳으로 가기 때문에 파란색 분기를 대안으로 생각할 수 있다.

 

 

 

제일 정답에 가까워보이는 분기는 왼쪽 파란색 네모 분기를 타는 것인데 그럴려면 ecx가 0x1이어야 한다. 그래서 ecx가 무조건 0x1이 되도록 패치도 해보고 삽질을 좀 했는데 이렇게 단순히 패치하는 걸로는 안되는 듯 해서 일단 ecx값이 뭐고 어디서 가져오는 건지 보기로 했다.

 

 

 

일단 ecx는 위에서 여러 함수에 hdc로 쓰이는데 CreateCompatibleBitmp에서도 hdc로 쓰인다. 함수 검색을 해보면 hdc는 디바이스 콘텍스트 핸들.......이라는데 정확히 뭔지는 모르겠지만 구글링해보니 글씨, 그림, 비트맵 등 출력에 관한 정보를 모아둔 데이터 구조체라고 한다. 구조체라고 하는 것을 보니 bmp 파일 내부에 저장되어있는 것을 가져오는 것일텐데 일단 hdc인 ecx 값이 저장되는 부분을 찾기로 했다.

 

HBITMAP CreateCompatibleBitmap
{
  HDC hDC, // 디바이스 콘텍스트의 핸들
  int nWitdh, // 폭
  int nHeight // 높이
}

 

 

함수 시작 부분에서 바로 ecx값이 쓰이는데 ss:[esp+8] 값이다. 

 

 

 

WinMain 부분에 bp를 걸어주고 실행시킨 후 esp+8 주소에 하드웨어 브레이크포인트를 걸어준 후 걸리는 곳을 살펴보았다. 쓰이는 곳이 많으므로 약간의 인내심을 갖고 보다보면 아래 부분에서 쓰이는 것을 알 수 있다.

 

 

 

그런데 이 함수가 대체 뭐하는 함수인지 user32 내부인데 이상하게 임포트하는 함수에 이 함수가 없다(?) 어쨌든 어떤 함수인지 정확히 알 수 없었다. 스택창을 쭉쭉내려 40영역대의 리턴주소를 찾았다.

 

 

 

해당 주소로 가보면, CreateWindowExA 함수 호출 후 내부 어딘가에서 hdc 값을 얻어온다는 것을 알 수 있다. 리버싱은 삽질이 빠지면 섭하지 않은가 ^^; 너무 길지는 않게 트레이싱을 좀 해보았다. 

 

 

 

쭉쭉 들어가던 중 RtlmageNtHeader 함수를 호출하는 부분이 있었다. NT 헤더...? 이제서야 PE 구조를 좀 봐야겠다는 생각이 들었다.

 

 

 

리소스 영역을 보는데 딱봐도 비트맵처럼 생겼다. 한참 12월에 파일 퍼징을 주구장창 돌리던 때가 있었는데 그때 bmp 파일에서 터진 SW가 있어서 본적이 있는데 색관련 부분이었나 저렇게 FF로 차있는 형태를 많이 봤다. 그런데 보면 알겠지만 앞에 bmp 매직바이트가 없다.

 

 

 

그리고 bmp 헤더 구조를 좀 보니까 앞쪽 36바이트가 매직바이트, 비트맵 크기, 헤더 크기 등을 포함해 헤더인데 위 데이터는 헤더 뒤쪽 데이터 부분인 것 같다. 컴퓨터에 .bmp로 검색해 아무 bmp나 그림판으로 연다음에 위에 IDA에서 봤던 Create~Bitmp 함수 호출시 지정했던 x,y 픽셀 정보대로 bmp 파일 크기를 수정한 후 저장했다.

 

 

 

그리고 hxd로 열어서 앞에 36바이트를 가져온 후 뒷부분을 rsrc 섹션에 있던 데이터로 붙였다.

 

 

 

뭔가 외쪽 불균형인 두개의 직선이 그리다말고 잘린듯한게 정확하게 푼 느낌은 아니지만 열어보면 그림판 연필로 대충 쓴듯한 글씨를 확인할 수 있다.

 

 

'리버싱 > reversing.kr' 카테고리의 다른 글

[reversing.kr] Direct3D FPS 풀이  (0) 2020.03.11
[reversing.kr] Position 풀이  (0) 2020.03.10
[reversing.kr] Replace 풀이  (0) 2020.03.09
[reversing.kr] Music Player 풀이  (0) 2020.03.08
[reversing.kr] Easy Unpack 풀이  (0) 2020.03.07

댓글

Designed by JB FACTORY