CodeEngn Basic RCE L09 Write-Up
파일 링크: https://codeengn.com/challenges/
CodeEngn.com [코드엔진] - Challenges
코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.
codeengn.com
풀어보자.
abex 세 번째 파일이다. abex 세 번째 파일의 풀이는 다음 링크를 참고하면 된다.
참고 링크: https://jade9reen.tistory.com/31
abex` 3rd crackme Write-Up
사용 도구: 올리디버거 2.01 abex` 3rd crackme(이하 원본파일)를 풀어보자. 먼저 원본파일을 실행시키면 다음과 같은 메세지 박스가 뜬다. keyfile을 체크하라는 내용의 메시지 박스와 file을 찾을 수 없다는..
jade9reen.tistory.com
코드엔진에서 제공하는 파일은 UPX로 패킹되어 있다.
upx 도구로 언패킹하자.
그리고 파일을 실행하면 문자열들이 깨진다.
언패킹된 파일을 올리디버거로 열면 MessageBoxA 함수가 호출되기 전에 인자를 1개만 전달하고 있다. MessageBoxA 함수는 4개의 인자가 필요하다. OEP로 점프하기 전에 인자를 전달하는 것 같다.
원본파일을 올리디버거로 열면 PUSHAD 명령어로 레지스터 값들을 스택에 저장한다. 언패킹되고 OEP로 점프하기 전에 POPAD 명령어로 레지스터 값을 복구할 것이기 때문에 ESP 레지스터의 값에 하드웨어 브레이크 포인트를 설정하자.
그리고 실행하면 OEP 0x0040100C 주소로 점프하기 전에 익숙한 문자열들을 스택에 저장하는 것을 확인할 수 있다. 즉, 패커가 OEP로 점프하기 전에 MessageBoxA 함수가 필요한 인자를 스택에 저장하는 것이다. 따라서 upx 도구로 언패킹하게 되면 저 인자들이 없기 때문에 문자열들이 깨지는 것이다.
언패킹한 파일을 위와 같이 패치하면 된다.
Auth Key 값은 [사진 10]의 빨간 박스안의 값들이다.