본문 바로가기
Security/Reversing

[CodeEngn] CodeEngn Basic RCE L11

by 단월໒꒱ 2022. 6. 25.

11번 문제이다.

 

 

 

 

OEP와 Stolenbyte를 찾으라고 하고 있다.

OEP (Original Entry Point)는 패킹된 파일의 실제 프로그램 시작 부분이고, 

StolenByte는 훔친 바이트라는 뜻으로 패킹된 프로그램에서 코드의 일부를 OEP로 점프하기 전에 숨기는 것을 의미한다.

 

일단 패킹되어있는 듯하니 Exeinfo로 패킹 상태를 확인해보았다.

 

 

 

 

UPX로 패킹되어있는 것을 확인할 수 있다.

 

구글링을 해보니 UPX 패킹의 특징은 PUSHAD ~ POPAD 명령어 내부에서 압축해제 코드가 실행되고 POPAD 명령어 실행 후 JMP 명령어를 통해 OEP로 이동한다고 한다.

 

또한 StolenByte 훔쳐진 코드는 OEP 주소로 JMP하기 전에 PUSH된다고 한다.

 

일단 Ollydbg로 파일을 열어보았다.

 

 

 

 

PUSHAD로 시작하는 것을 확인할 수 있다.

 

POPAD를 찾아서 해당 주소로 이동해주자.

 

 

 

 

POPAD 아래에서 세줄이 PUSH되고 있는 것을 확인할 수 있다.

또한 OEP 주소는 0040100C인 것을 확인할 수 있다.

 

OEP 주소로 이동해보자. 00407387에 BP를 걸어 실행시키면 이동할 수 있다.

 

 

 

 

OEP 주소 위쪽으로도 NOP으로 비어있는 상태이기 때문에 위에서 

 

 

 

 

앞에서 Stolenbyte라고 추정한 값들을 가져와서 OEP 바로 앞에 넣어주니 바이트가 딱 맞아떨어지는 것을 확인할 수 있다.

 

아무튼 구해야하는 Stolenbyte는 6A0068002040006812204000이 되는 것이다.

 

그리고 아까 OEP가 0040100C라고 했지만 방금 Stolenbyte를 앞에 넣어주었으므로 OEP는 00401000이 된다.

 

따라서 답은 004010006A0068002040006812204000이다.

 

 

 

 

 

 

'Security > Reversing' 카테고리의 다른 글

[Reversing.kr] Easy Crack  (0) 2022.06.25
[CodeEngn] CodeEngn Basic RCE L12  (0) 2022.06.25
[CodeEngn] CodeEngn Basic RCE L10  (0) 2022.06.25
[CodeEngn] CodeEngn Basic RCE L08  (0) 2022.06.25
[CodeEngn] CodeEngn Basic RCE L06  (0) 2022.06.25

댓글