[CodeEngine] Basic RCE L12
이번 문제는 지문이 좀 길다. 'Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다. 이때 성공메시지 대신 Key 값이 MessageBox에 출력되도록 하려면 파일을 HexEdit으로 오픈한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 문제: Key값과 + 주소 영역을 찾으시오.' 라고 되어 있다.
일단 12.exe를 열어서 아무 키나 입력하고 Check를 눌렀다. 틀린 Key인데도 아무 것도 안 뜨는 걸로 봐선 파일 안에 성공 메시지만 있고 오류 메시지는 없는 듯.
일단 12.exe를 PEiD에 올려서 패킹이 된 아이인지 아닌지 알아봤다. 이번엔 패킹 처리는 안 되어 있다. 따로 언패킹할 필요 없이 바로 Olly로 열어서 확인할 수 있다.
0040107D에서 EAX가 7A2896BF랑 같지 않으면 성공 메시지를 출력하지 않고 다른 주소로 점프한다고 되어 있다. 그럼 혹시 이 문자열이 Key인걸까? 근데 이건 16진수니까 10진수로 바꿔줘야 한다. 실제 프로그램에 넣을 때 16진수를 넣을 수는 없으니까... 그럼 Key는 2049480383이 된다.
HxD로 12.exe를 열어서 스크롤을 좀 내리다보면 성공 메시지가 있는 부분을 발견할 수 있다. 이 부분에 아까 Key를 덮어씌워주면 된다.
덮어씌워준 후에 빨간색 숫자가 어디 주소에 위치해 있는지 보면 된다. 0D3B ~ 0D44에 위치해 있는데, 문자열의 마지막을 나타내는 null도 포함시켜야하기에 마지막 주소는 0D45라고 볼 수 있다.
그럼 답은 20494803830D3B0D45가 될 것이다.
+) 이 문제를 풀면서 생각보다 오답을 많이 냈는데, 어디 부분에서 냈는지 정리해놔야 다신 안 틀릴 듯하다...
- 주소 범위 찾을 때 null 글자 포함시키지 않았다. Null은 항상 문자열의 마지막에 필수적으로 존재한다.
- Key값을 16진수 그대로 사용하려고 했다. 10진수로 바꾸도록 하자.
- Overwrite 안하고 'Congratulation~' 문자열의 주소를 그대로 답으로 사용하려고 했다.