본문 바로가기

【 리버싱 】/[ CodeEngn ] Basic RCE 문제 풀이

[ CodeEngn ] Basic RCE 9 문제 풀이

URL : https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

9번 문제이고 밑 파일을  다운로드해서  압축을 풀어주자

압축을 풀어보니 실행파일 하나가 보인다.

 

더블 클릭하여 실행해 보자

"확인을 클릭하여 키 파일을 확인하십시오"라는 메시지 창이 보인다.

그러면 keyfile을 찾아야 하지만 CodeEngn 문제는 StolenByte를 구하는 것이기 때문에

keyfile은 찾지 않는다.

 

이제 'OllyDbg' 도구를 이용해 09.exe 파일을 뜯어보자

UPX 방식으로 패킹이 되었다는 것을 의심할 수 있었다.

PEiD로 확인 결과 UPX 방식으로 패킹이 되었다는 것을 확인할 수 있었다.

언 패킹 후 09.exe 파일을 실행시켜 본 결과 글자 깨짐을 확인할 수 있었다.

 

언 패킹 된 09.exe 파일을 'OllyDbg'로 뜯어보자

그러면 MessageBoxA 함수에 전달할 인자가 부족하다는 것을 알 수 있었다.

 

따라서 패킹 된 파일을 'OllyDbg'로 첫 번째 MessageBoxA를 확인 할 필요가 있다.

 

StolenByte : 훔친 바이트란 의미로 프로그램의 한 부분의 코드를 훔쳐 다른 부분으로 옮겨진 코드를 말한다.

 

맨 밑으로 내려보면 인자 3개를 넣고 점프 하는걸 확인 할 수 있다. 

그래서 BP를 걸고 확인해 본 결과

첫 번째 MessageBoxA인 걸 확인할 수 있었다.

 

그러면 언 패킹된 09.exe HEX를 수정을 해야 할 필요가 있다.

수정을 할 때 맨위에서 부터 수정해야한다.

즉. 00401000에서 부터 수정을 해야한다.

그렇지 않으면 밑에 있는 코드가 사라지는 현상을 알 수 있다.

언 패킹된 곳에다가 <Ctrl+e>를 눌러 필요한 인자를 넣어 주었다.

그 결과 글자 깨짐 현상을 발생하지 않고 제대로 된 글자나 나온 걸 확인할 수 있었다.

 

답 : 6A0068002040006812204000