[코드엔진] Basic RCE L12 풀이

비얌·2022년 3월 17일
0

어셈블리 게임

목록 보기
10/15
post-thumbnail

코드엔진 Basic RCE L12 문제를 풀어보았다.

문제는 다음과 같다. 키 값과 성공 메시지 대신 키 값이 MessageBox에 출력되도록 할 때 그 주소 영역을 찾는 문제이다.


1. 키 값 찾기

파일을 실행시켜보면 키를 입력할 수 있는 창이 뜨는데, 체크 버튼을 눌러도 아무것도 실행되지는 않는다.


DIE에 올려보았다. 패킹되어있지는 않다고 뜬다.


다음으로 IDA에 올려보았다. 그리고 F5를 눌러 디컴파일해보았다. win32api 소스코드가 뜬다. DialogBoxParamADialogFunc에 들어가보았다.


여러 줄의 코드가 나온다.


코드를 전체적으로 둘러보다가, 38번째 행의 MessageBoxA에서 Text가 Congratulation, you found the right key인 것을 발견했다. (이 메시지를 출력한다)


DlgItemInt를 시리얼 키라고 짐작했는데, MessageBoxA에 영향을 미치는 곳이 그것밖에 없었기 때문이다. 그래서 시리얼 키가 2049480383일 때 Congratulation, you found the right key를 출력한다고 했으므로 이게 시리얼 키일 것이라고 생각했다. → 정답이었다!


이제 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 파일을 패치해야 한다. x64dbg로 파일을 패치해보자. 아래의 사진처럼 성공메시지 자리에 key값을 덮어씌워주면 될 것 같다. 중요한 점은 끝에 NULL(0x00)을 넣어주어 문자열의 끝을 알려주어야 한다는 것이다.


Ctrl + E를 눌러 데이터를 편집해준다. 아스키코드 표를 보고 2049480383가 출력되도록 코드를 편집해준다. 그리고 마지막에는 문자열의 끝을 뜻하는 NULL(0x00)을 삽입해준다.


그리고 파일 - 파일패치 - 파일패치를 눌러 파일을 패치해준다.


패치한 파일을 열어서 키를 입력해주면 성공 메시지 대신 키가 출력되는 것을 알 수 있다!


2. 주소 영역 찾기

그런데 문제에서는 HexEdit으로 오픈한 다음 주소 영역을 찾으라고 했다. 패치한 파일을 헥스 에디터로 열어보자.

Ctrl + F를 눌러 key값을 검색해 키가 덮어씌워진 구역으로 이동했다. 키가 0x0D3B - 0x0D45 영역에 덮어씌워져있는 것을 알 수 있다.

따라서 답은 2049480383(키) + 0D3B(주소 시작) + 0D45(주소 끝)인 20494803830D3B0D45이다!

profile
🐹강화하고 싶은 기억을 기록하고 공유하자🐹

0개의 댓글