Wargame/CodeEngn Basic RCE

CodeEngn Basic RCE L09 Write-Up

0xe82de_ 2019. 8. 19. 00:15
728x90
728x90
728x90

파일 링크: https://codeengn.com/challenges/

 

CodeEngn.com [코드엔진] - Challenges

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.

codeengn.com

[사진 1]

풀어보자.

 

 

[사진 2]
[사진 3]

abex 세 번째 파일이다. abex 세 번째 파일의 풀이는 다음 링크를 참고하면 된다.

참고 링크: https://jade9reen.tistory.com/31

 

abex` 3rd crackme Write-Up

사용 도구: 올리디버거 2.01 abex` 3rd crackme(이하 원본파일)를 풀어보자. 먼저 원본파일을 실행시키면 다음과 같은 메세지 박스가 뜬다. keyfile을 체크하라는 내용의 메시지 박스와 file을 찾을 수 없다는..

jade9reen.tistory.com

 

[사진 4]

코드엔진에서 제공하는 파일은 UPX로 패킹되어 있다.

 

 

[사진 5]

upx 도구로 언패킹하자.

 

 

[사진 6]

그리고 파일을 실행하면 문자열들이 깨진다.

 

 

[사진 7]

언패킹된 파일을 올리디버거로 열면 MessageBoxA 함수가 호출되기 전에 인자를 1개만 전달하고 있다. MessageBoxA 함수는 4개의 인자가 필요하다. OEP로 점프하기 전에 인자를 전달하는 것 같다.

 

 

[사진 8]

원본파일을 올리디버거로 열면 PUSHAD 명령어로 레지스터 값들을 스택에 저장한다. 언패킹되고 OEP로 점프하기 전에 POPAD 명령어로 레지스터 값을 복구할 것이기 때문에 ESP 레지스터의 값에 하드웨어 브레이크 포인트를 설정하자.

 

 

[사진 9]

그리고 실행하면 OEP 0x0040100C 주소로 점프하기 전에 익숙한 문자열들을 스택에 저장하는 것을 확인할 수 있다. 즉, 패커가 OEP로 점프하기 전에 MessageBoxA 함수가 필요한 인자를 스택에 저장하는 것이다. 따라서 upx 도구로 언패킹하게 되면 저 인자들이 없기 때문에 문자열들이 깨지는 것이다.

 

 

[사진 10]

언패킹한 파일을 위와 같이 패치하면 된다.

 

Auth Key 값은 [사진 10]의 빨간 박스안의 값들이다.

728x90
728x90