SuperVingo

CodeEngn.com Basic RCE L09 WriteUp 본문

Wargame[워게임]/CodeEngn

CodeEngn.com Basic RCE L09 WriteUp

SuperVingo 2020. 7. 29. 02:33
728x90

이번 문제는 StolenByte를 구하는 문제이다.

 

* StolenByte란?

StolenByte란 언패킹 과정중에 프로그램의 일부를 다른 부분에서 실행시켜 언패킹을 어렵게 하기 위해서 숨긴 바이트라고 생각하면된다. 

 

이를 쉽게 확인하는 방법은 단순하다. 언패킹을 해보면된다.

 

0. 실행화면

정상적으로 잘 실행된다.

 

1. ExeInfoPE 분석

 

익숙한 UPX다. 빠르게 언패킹을 진행해보자.

 

2. UPX 언패킹 후, ExeInfoPE

UPX 언패킹을 진행했고, ExeInfoPE에서도 UPX가 언패킹된것을 볼 수 있다.

 

3. 실행하면....

첫 화면이 깨져 나온다. 이런 식으로 언패킹을 어렵게 진행한다는 이야기이다. 이렇게 StolenByte가 존재할 경우, 언패킹을 직접 들여다 보아야한다.

 

4-1. 올리디버거 분석

이 파일이 언패킹이 진행된 파일이다. EP부터 특정 구간이 NOP(NO Operation)으로 적혀있다. MessageBoxA에 인자 3개가 사라졌다. 이부분에 들어가야할 내용이 바로 StolenByte가 되겠다. 그럼 이제 언패킹을 하기 위해서 패킹되어있는 프로그램을 올리디버거에 실행시켰다.

UPX의 경우에는 많이 나와있듯이 크게 PUSHAD, 언패킹 루틴, POPAD, JMP순으로 이루어진다.

PUSHAD

    .
    .
    Routine
    .
    .
    .
POPAD

    .
    .
JMP OEP

그러면 JMP OEP부분을 찾아 BP를 걸고 실행시켜보겠다.

POPAD와 JMP를 찾았고, BP를 걸고 실행해보니 BP에 걸렸을 때, 3개의 인자를 넘겨주는 어셈블리어가 있었다.

728x90