Iriton's log

[Reversing.kr] ImagePrc 본문

Reversing/Wargame

[Reversing.kr] ImagePrc

Iriton 2024. 5. 15. 14:00

프로그램을 실행해 보니 그림판처럼 사용자가 그림을 그릴 수 있다.

Check 버튼을 누를 때 Wrong 이라고 뜨는 걸 보니,

Flag와 연관이 있을 것이라 생각하고 올리디버거를 열었다.

 

Wrong 문자열이 사용되는 함수로 이동하여 살펴 보기로 했다.

 

보니까 Wrong 메세지 박스를 띄우기 전에 어떤 분기문에 의해 점프한 것을 볼 수 있다.

DL과 BL을 비교하는 비교연산자 CMP가 보인다.

그럼 이 DL과 BL은 어디서 온 무슨 값인지 알아 보기 위해 코드를 역순으로 읽어보며 파헤쳐 봤다.

 

여기서 MOV 명령어로 오른쪽 값을 왼쪽에 넣는다. 즉 ECX와 EAX 값에 초점을 두면 된다.

코드를 살펴 본 결과 EAX와 ESI의 대조를 추측했지만 그건 너무 복잡해져서 구글링을 해 봤다.

그 결과 PEview가 필요해서 추가로 다운로드 했다.

  • PEView : 윈도우 용 실행 파일인 PE(Portable Executable)의 구조를 분석할 수 있는 프로그램
  • PE File Header의 내용을 볼 수 있고 여러 정보들을 얻을 수 있다.

FindResourceA에서 어떤 값이 전달됐길래 해당 함수의 인자를 살펴 보았다.

FindResourceA는 hModule(현재 실행도는 프로세스에 대한 핸들), IpName(resource의 ID), IpType(resource의 type) 총 세 개의 인자가 있다. 여기서 resource의 ID에 주목하여 ID가 0x65인 리소스를 가지고 있는지 확인해 봐야 된다고 한다.

 

그 결과 해당 아이디에 대한 리소스 값이 존재했다.

 

비트맵 만드는 함수에서 가로 세로를 지정하는 것이 보인다. 이 값에 따라 그림판 크기를 정해서 저장해 주고

PEview에 보이는 리소스값을 붙여넣으면 Flag가 뜬다고 한다.

 

이렇게 맞춰 두고 저장을 한다.

HxD(헥스 에디터 프로그램)으로 저장한 bmp파일과 exe파일을 열어서 exe 파일에서 아까 아이디에 해당한 리소스값들만 복사하여

그림판 파일에 붙여 넣어서 수정한다.

이때 크기를 초과하지 않게 적정한 위치(0x36)부터 붙여넣기 해야 된다.

 

성공적으로 수정이 되면 Flag 값이 뜬다

 

 

(+ 내가 직접 해결하려면 기초 지식이 더 필요할 거 같다.)

'Reversing > Wargame' 카테고리의 다른 글

[Reversing.kr] Music Player  (0) 2024.05.15
[CodeEngn] Basic RCE - L07  (0) 2024.05.07
[CodeEngn] Basic RCE - L03  (0) 2024.05.07
[Dreamhack] Beginner: simple-operation  (0) 2024.04.02
[Dreamhack] Reversing Basic Challenge #1  (0) 2024.03.27
Comments