CodeEngn Write Up/Basic

CodeEngn Basic RCE L09 Write Up

서원근양학계정 2022. 1. 5. 16:25

문제:StolenByte를 구하시오 Ex) 75156A0068352040

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

 

일단 문제를 실행시켜보겠습니다.

 

확인을 눌러보겠습니다.

 

역시나 에러 창이 뜹니다.

이제 PEiD로 열어보겠습니다.

 

UPX로 패킹된 것을 확인할 수 있습니다.

언패킹 도구로 언패킹 해주겠습니다.

 

이제 Ollydbg로 열어주겠습니다.

그리고 F9를 이용해서 실행시켜보겠습니다.

그랬더니

 

이런 알 수 없는 창이 뜹니다.

어째서? 이런 일이 일어나는 것일까요?

 

그 이유는 StolenByte가 적용되어있기 때문입니다.

StolenByte에 대한 내용은 여기를 참고해주세요.

https://brainfreeee.tistory.com/35

 

StolenByte에 대하여

StolenByte란? StolenByte란 훔친 바이트라는 뜻으로 패킹된 프로그램에서 코드의 일부를 OEP로 점프하기 이전에 숨기는 것을 의미합니다. StolenByte를 적용하는 이유 패킹을 풀 때는 OEP를 찾아서 덤프를

brainfreeee.tistory.com

 

StolenByte에 대해서 간단히 설명하자면 코드의 일부를 OEP이전에 숨겨서 OEP를 찾은 뒤 덤프를 떠도 정상적으로 실행이 되지 않게 하는 것입니다.

 

이제 다시 OllyDBG로 돌아가서 패킹을 풀기 이전의 코드를 자세히 살펴보겠습니다.

 

위 사진은 OEP로 가는 JMP와 그 근처의 코드입니다.

JMP위에 PUSH가 보이는 것을 확인할 수 있습니다.

저 PUSH를 통해서 OEP로 점프한 이후에 호출할 함수에서 사용할 값을 스택에 넣습니다.

 

위의 사진은 언패킹 도구를 이용해서 패킹을 푼 상태의 코드입니다.

OEP의 위쪽 부분이 NOP으로 채워져 있습니다.

저 부분이 OEP이전에 있던 PUSH들이 있었던 자리입니다.

그리고 그 아래에서 MessageBoxA함수를 호출하는 것을 확인할 수 있습니다.

이 상태에서 실행시켜보겠습니다. 

 

이제 NOP로 채워진 공간에 OEP이전에서 봤던 PUSH들을 옮겨주겠습니다.

 

이 상태에서 실행시키니 정상적으로 실행되는 것을 확인할 수 있습니다.

 

Flag: 6A0068002040006812204000

'CodeEngn Write Up > Basic' 카테고리의 다른 글

CodeEngn Basic RCE L11 Write Up  (0) 2022.02.17
CodeEngn Basic RCE L10 Write Up  (1) 2022.02.10
CodeEngn Basic RCE L08 Write Up  (1) 2021.10.05
CodeEngn Basic RCE L07 Write Up  (0) 2021.09.30
CodeEngn Basic RCE L06 Write Up  (0) 2021.09.29