CodeEngn Write Up/Basic

CodeEngn Basic RCE L12 Write Up

서원근양학계정 2022. 2. 21. 14:25

Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다
이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다.
문제 : Key값과 + 주소영역을 찾으시오
Ex) 7777777????????

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com

 

일단 프로그램을 실행시켜보겠습니다.

 

Key를 입력하는 창이 뜹니다.

아무 값이나 입력해보겠습니다.

 

Check버튼을 눌러도 아무일도 일어나지 않습니다.

이제 OllyDBG로 분석해보겠습니다.

이 부분에서 입력한 값을 저장합니다.

 

함수의 이름 마지막에 Int가 붙어있는 것을 통해서 정수를 입력해야한다는 사실을 알 수 있습니다.

1234를 입력하고 함수를 실행시킨 다음에 EAX의 값을 확인해보니 이런 값이 들어있습니다.

 

레지스터는 16진수로 값을 저장하기 때문에 EAX의 값인 4D2를 10진수로 변환하면 1234가 됩니다.

따라서 입력받은 값이 EAX에 정상적으로 들어있다는 것을 확인할 수 있습니다.

그 아래에 반복을 하는 부분이 있는데 딱히 중요한 것 같지는 않아보입니다.

중요한 부분은 이 부분입니다.

 

EAX를 0x7A2896BF와 비교하는데 EAX에는 입력한 값의 16진수인 0x4D2가 들어있습니다.

따라서 입력해야하는 값은 0x7A2896BF를 10진수로 변환한 2049480383이 됩니다.

2049480383을 입력하니 정상적으로 성공메시지가 출력됩니다.

 

이제 Key값이 MessageBox에 출력되게 해보겠습니다.

일단 프로그램을 HxD로 열어보겠습니다.

성공했을때 출력되는 문자열을 찾아줍니다.

 

Key값이 출력되게 하기 위해서는 이 값을 Key값으로 바꿔주면 됩니다.

 

 

Key값이 10글자이므로 10글자만큼 선택해서 값을 바꿔주고 나머지는 Hex값을 0x00으로 바꿔줍니다.

 

이대로 저장해서 Key값을 입력해보겠습니다.

 

잘 작동하는 것을 확인했습니다.

Key값은 2049480383이고, 주소값은 0x0D3B ~ 0x0D45가 됩니다.

끝나는 주소의 값이 0x0D44가 아닌 0x0D45인 이유는 문자열의 마지막에는 끝을 알리는 NULL이 들어가기 때문에 1을 더해줍니다.

 

Flag: 20494803830D3B0D45

'CodeEngn Write Up > Basic' 카테고리의 다른 글

CodeEngn Basic RCE L14 Write Up  (0) 2022.03.11
CodeEngn Basic RCE L13 Write Up  (0) 2022.03.11
CodeEngn Basic RCE L11 Write Up  (0) 2022.02.17
CodeEngn Basic RCE L10 Write Up  (1) 2022.02.10
CodeEngn Basic RCE L09 Write Up  (1) 2022.01.05