le0s1mba
[CodeEngn] Basic L12 본문

https://codeengn.com/challenge/rce_basic

파일을 실행시키면 저렇게 key를 입력하는 창이 뜬다.
대충 123을 넣고 check 버튼을 눌러봤더니 아무런 이벤트도 발생하지 않았다.

여기서 봐야 할 함수는 DialogBoxParamA와 ExitProcess 함수이다.
DialogBoxParamA 함수에서는 프로그램을 실행시키고, ExitProcess 함수는 이름만 봐도 프로그램 종료 함수이다.

EP에서 좀만 내려보면 주석 창에 "Congratulation, you found the right key"라는 문자열을 발견할 수 있다.
그리고 그 위에 있는 0x40107D에서 비교 연산을 진행한다.
해당 0x40107D로 가기 위해선 또 그 위에 있는 0x40106D 주소를 실행시켜야 한다.
때문에 0x401068에 bp를 걸고 분석을 시작했다.

이 부분을 보면 esi 주소의 값이 0이 될 때까지 0x40110F를 호출한다.

그럼 그렇게 반복하는 동안 0x40110F에서는 무슨 작업을 하는 지 보니
eax = (edx & -(eax + 1)) + (ecx & -(ebx + 1))
이러한 연산을 하고 있었다.
계속 반복하면서 보다보니 해당 연산은 내 입력 값과 아무런 연관이 없다는 것을 깨닫고 그냥 바로 0x40107D에 bp를 걸고 분석을 다시 시작했다.

분석해 보니 0x7A2896BF랑 비교하는 eax의 값이 내 입력 값의 16진수라는 것을 알게 되었다. (123 = 0x7B)

그래서 계산기에 저 0x7A2896BF 값을 넣어 10진수로 바꾼 후, 해당 값을 입력했더니 "Congratulation"이 떴다.
그럼 이제 key는 구했으니 주소 영역을 구해야 한다.

HxD로 열어서 좀 밑으로 내려 보면 저렇게 "Congratulation"이 보인다.
문제에서 구하라는 주소 영역은 MessageBox에서 key 값이 출력되는 영역이다.
때문에 저 부분을 key 값이 출력되도록 바꾸면 주소 영역을 구할 수 있다.

0xD3B에서 시작하여 2049480383을 넣고, 뒤에 있는 "tion, you found the right key"가 출력이 안되도록 00을 추가해서 넣어주면 주소 영역을 구할 수 있게 된다.

때문에 문제에서 요구하는 주소 영역은 0xD3B ~ 0xD45이다.
flag : 20494803830D3B0D45
'Security Challenges > CodeEngn' 카테고리의 다른 글
| [CodeEngn] Basic L14 (0) | 2025.03.14 |
|---|---|
| [CodeEngn] Basic L13 (0) | 2025.03.13 |
| [CodeEngn] Basic L11 (0) | 2025.03.13 |
| [CodeEngn] Basic L10 (0) | 2025.03.13 |
| [CodeEngn] Basic L09 (0) | 2025.03.12 |