le0s1mba

[CodeEngn] Basic L12 본문

Security Challenges/CodeEngn

[CodeEngn] Basic L12

le0s1mba 2025. 3. 13. 09:58

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