CodeEngn

CodeEngn.com Basic RCE L12

レ(゚∀゚;)ヘ=З=З=З 2024. 1. 3. 09:09
728x90

12번 문제 : key 값과 그 key 값이 MessageBox에 출력되도록 하기 위해 수정해야 할 주소 영역을 구하는 것

12.exe파일을 실행하였더니 Key를 입력하는 창이 나왔고, Check를 눌러도 변화가 없었다. About을 눌러보니 알맞은 key값을 구하라는 메시지가 나왔다.

PEiD를 통해 정보를 확인해 보았더니 패킹이 되어있지는 않았다.

올리디버거로 실행해서 Key값에 ‘1’를 입력하였다. 그랬더니 EAX1이 저장되는 것을 볼 수 있었다. , 내가 Key값으로 입력한 값이 EAX에 대입되는 것을 확인할 수 있다.

올리디버거로 12.exe을 열었다. “Congratulation ...”와 같이 성공을 나타내는 문자열이 보인다.

위쪽에 CALL <JMP &USER32.GetDlgItemInt> 부분이 있어서 그 부분을 break걸었다. GetDlgItemInt 함수는 정수 값 대화 상자에서 지정된 컨트롤의 텍스트를 변환한다고 한다.그 밑에 나와있는 부분들은 MOV를 통해 ESI에 어떤 문자열을 넣고, CMP를 통해 JMN, JMP를 한다. 그리고 ESI에 있는 값에 0x4를 더해준 다음에 다시 EBX에 넣는 것을 반복하는 부분이다. 근데, 계속해서 ESI0x4를 더해주므로 00401068에서 0x0을 비교했을 때 같을 수 없으므로 원하는 문자열로 갈 수 없다.

하지만 그 밑을 보면 EAX0x7A2896BF을 비교한 다음에 같으면 성공 문자열을 나타낼 수 있다. 입력한 값이 EAX에 저장되는데, 그 값과 0x7A2896BF을 비교해서 참이면 성공 문자열을 출력하는 것을 보아 0x7A2896BFkey값임을 알 수 있다.

0x7A2896BF16진수이므로 10진수로 바꾸기 위해 프로그램을 사용하였다. 10진수로 바꿨더니 key값인 ‘2049480383’이 나왔다.

확인을 하기 위해 12.exekey값을 넣어주니 원하는 문자열을 얻을 수 있었다.

HexEdit로 성공 문자열 대신 Key값이 나오도록 overwrite를 하라고 했기 때문에 실행한 후 “Con”을 통해서 문자열을 찾았다.

문자열이 해당하는 부분을 찾았다.

그 부분에 key값인 ‘2049480383’을 입력해주었다.

overwrite를 해주는 0x????~0x???? 영역을 찾는 것이므로 마지막 NULL00을 포함해서 0x0D3B ~ 0x0D45가 해당하는 것을 알 수 있다.

key값과 주소영역을 합친 값인 ‘20494803830D3B0D45’를 입력하였더니 성공하였다.

'CodeEngn' 카테고리의 다른 글

CodeEngn.com Basic RCE L18  (0) 2023.12.22
CodeEngn.com Basic RCE L15  (0) 2023.12.22
CodeEngn.com Basic RCE L11  (0) 2023.12.22
CodeEngn.com Basic RCE L10  (0) 2023.12.22
CodeEngn.com Basic RCE L09  (0) 2023.12.22