Reversing/crackme

CodeEngn Basic RCE 09 문제 풀이

string_ 2022. 5. 8. 22:35

디버거 : x64dbg

분석환경 : Window 10

 

문제 내용

StolenByte를 구하는 문제입니다. 여기서 StolenByte 란 패커가 훔친 바이트를 의미 합니다.

프로그램의 일부 바이트를 다른영역에서 실행되게 하여 

덤프를 쉽게 하지 못하도록 언패킹을 방해하는 기술 입니다.

패킹 여부

pe툴로 열어본 결과 UPX(2.03)으로 패킹 된 프로그램이란 걸 확인했습니다.

 

EP 주소

해당 프로그램의 EP 주소로 이동했습니다.

동일하게 ESP 주소에 중단점을 걸어 원본 코드로 이동하는 주소를 찾도록 하겠습니다.

 

OEP로 이동하기전 문자열이?

OEP로 가기전에 어떤 문자열을 PUSH로 주고 있는 것을 확인 할 수 있었습니다.

아마 이번 문제 핵심과 관련있어보이네요.

 

OEP 주소로 이동했습니다. 근데 위로 스크롤 올려보니 12바이트 만큼 NOP 명령어로 되어있고

함수 시작부분에 MessageBoxA 함수가 호출되는걸 확인 할 수있습니다.

 

그럼 해당 OEP 주소로 이동하기전에 문자열을 PUSH 하는 코드가 StolenByte 가 된다는 소리가 되겠네요.

 

이 상태로 그대로 덤프를 한다면 0040100C 주소 부분부터 바로 실행되기 떄문에

프로그램 동작에 오류가 생기니

StolenByte 부분을 원래대로 복구 해야 합니다.

 

StolenByte

 

이전 주소로 돌아가 12바이트 크기만큼 바이트를 복사후 다시 넣어줬습니다.

 

StolenByte 복구

 

 

OEP 주소를 재설정후 덤프를 진행해줍니다.

 

 

언패킹 완료

정상적으로 언패킹을 완료했고 StolenByte 또한 복구하였습니다.