본문 바로가기
리버싱/CodeEngn 문제해결

Basic L12

by 멍청이 개발자 2026. 9. 18.
반응형

문제는 다음과 같다.

그림0. 문제화면

DIE로 봤는데 따로 패킹이 되어있는것 같진 않았다.

그림1. OEP

OEP에서 바로 보이는 코드는 GetDlgItemInt였다.

입력창에서 사용자가 입력한 키를 숫자로 가져와서 읽는 함수다. 그리고 밑에 Congratulation이라는 문자열이 보이는걸로 봐서 여기가 키를 읽고 비교하는 부분이 확실하다.

 

우선 숫자를 입력으로 받는 프로그램이므로 12345를 입력해봤다.

그림2. 암호화 및 비교문

GetDlgItemInt의 반환값으로 EAX레지스터에 0x3039 (12345)가 저장되었다.

그 후 뭔가 특이한 반복문을 통해서 EAX의 값을 변조시키는 부분이 있는데 cmp eax, 7a2896bf 시점에서 GetDlgItemInt의 반환값으로 EAX는 다시 되돌려져있었다.

즉. 중간에 있는 반복문은 아무의미 없는 페이크 였다. 그래서 결국은 사용자의 입력이 7a2896bf 이면 성공이다.

7a2896bf2049480383이므로 입력해보면 성공 메시지가 뜬다.

그림3. 성공

이제 문제에서는 성공메시지 대신에 키값이 화면에 나오도록 원본 파일을 수정하라고 했으므로 HxD로 열어보겠다.

그림4. HxD 화면

성공메시지가 적혀있는 부분이다. Congratulation... 부분을 우리의 키값으로 대체하면 된다.

그림5. 키값을 입력

키값을 입력한뒤 null값을 뒤에 추가하여 문자열을 종료시켰다.

수정한 범위는 D3B~D45이다. 

그림6. 수정완료

성공적으로 패치가 되었다.

 

범위는 16진수이므로 0D3B0D45가 맞을것이다.

그러므로 정답은 키값 + 주소영역 = 20494803830D3B0D45  이다.

반응형

'리버싱 > CodeEngn 문제해결' 카테고리의 다른 글

Basic L14  (0) 2026.09.18
Basic L13  (0) 2026.09.18
Basic L11  (0) 2026.09.18
Basic L10  (0) 2026.09.16
Basic L09  (0) 2026.09.15