본문 바로가기
Reversing/Wargame

[CodeEngn] Basic RCE L09

by sseddi 2021. 2. 23.
728x90

StolenByte를 구하라고 한다.

그게 뭐지??

muhan56.tistory.com/80

 

StolenByte

StolenByte는 패커가 위치를 이동시킨 코드로써 보호된 프로그램의 코드의 윗부분(보통은 엔트리 포인트의 몇 개의 명령어) 이다. 이 부분의 명령어는 이동된 곳 이나 할당 받은 메모리 공간에서

muhan56.tistory.com

블로그 글을 봤는데 잘 모르겠다.

 

+) 패킹된 바이너리의 언팩을 방해하기 위해 일부 명령어를 조작하는 것 (안티 디버깅의 일종)

 

일단 디버거에 얹어보자

 

PUSHAD가 있고 한 줄씩 디버깅이 되지 않는 것으로 보아 패킹되어있는 것 같다.

 

Exeinfo PE 프로그램을 사용해서 어떤 방식으로 패킹되어있는지 살펴보자

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

 

UPX 사용해 언패킹 해주자

언패킹 해줬으니까 다시 디버거에 넣어서 살펴보자

 

잉 근데 에러가 뜬다 ...

 

HxD에서 살펴봐야겠다.

 

보니까 헤더 시그니처는 맞는데 바로 뒤에 50이라는 값이 붙어있었다.

그래서 50값을 00으로 바꿔주고 저장 후 디버거에 올려보았다.

 

 

그랬더니 잘 들어갔다 !

이제 여기서 StolenByte를 구해야 한다.

 

언패킹 후 디버거에 넣으면 바로 OEP 부분인데 이 프로그램은 NOP 명령어가 많다.

아까 StolenByte 관련 블로그 찾은 걸 보면

https://muhan56.tistory.com/80

NOP 명령어 부분이 Code 부분인 것을 알 수 있다.

 

근데 언패킹한 프로그램이 조금 이상하다

 

실행시켜보면 메시지 박스가 이렇게 깨져있는 것을 확인할 수 있다.

 

확인을 누르면

이건 또 멀쩡하다.

 

그래서 패킹되었던 프로그램도 실행해봤는데

얘는 안깨지고 확인을 눌러도

멀쩡하다.

 

UPX 툴로 언패킹 하게 되면 oep부터 덤프를 뜨는데 복호화 과정에서 무슨 문제가 생긴 것 같다.

패킹된 프로그램 자체가 원래의 프로그램을 실행하기 위해 복호화를 하는 과정에 주의해보자

 

패킹된 프로그램을 디버거에 넣어보면 PUSHAD로 시작하는데 이때 POPAD도 존재한다.

POPAD가 나타나면 복호화 끝났구나 / 메모리에 원래 프로그램의 코드를 적어놨구나 생각할 수 있다.

 

POPAD가 있고 밑에 JMP 명령어가 있다. 

이 부분에서 OEP로 이동한다.

 

--------------------------------------------------------------------------------------------------------------

이 부분에서 한 줄씩 f8로 실행하면

저기 걸리는 부분이 생긴다. 저 부분이 왜 필요할까 ???

----------------------------------------------------------------------------------------------------------------

 

언패킹한 프로그램을 디버거에서 살펴보자

NOP부분도 수상했지만 오른쪽에 MessageBoxA 부분도 요상하다.

 

이렇게 인자가 하나만 있다.

 

좀만 밑에 내리면 

 

또 다른 MessageBoxA를 볼 수 있는데 얘네들은 다 똑같이 인자가 4개가 있다.

아마 아까 언패킹한 프로그램 실행했을 때 첫 번째 팝업은 깨졌는데, 두 번째 팝업은 안깨진 것과 연관이 있는 것 같다.

메세지 박스에 출력해야 할 값들이 인자 4개가 있어야하는데 1개가 있어서 스택에 저장하는 과정이 없으므로 쓰레기 값이 출력된 것 같다.

 

이 사라진 부분을 패킹된 프로그램에서 찾아보자.

아까봤던 POPAD 부분에 바로 밑 부분!

POPAD는 PUSH로 스택에 넣은 값들을 다시 레지스터에 채우는 역할을 하기 때문에 바로 밑에 있는 PUSH 3줄을 의심해볼 수 있다. 

3줄 바이트를 순서대로 적고 다시 언패킹 했던 프로그램을 넣은 디버거 창으로 가자.

6A0068002040006812204000

 

NOP의 시작 주소인 401000으로 가서 적어놓았던 바이트를 패치하자

 

그러면 NOP였던 부분도

이렇게 바뀐다.

 

실행해보면 언패킹 한 프로그램도

 

이렇게 안깨지게 된다.

성공!

 

hec-ker.tistory.com/128

 

Basic RCE L09

09.exe 파일이 주어진다. 일단 실행해보자. 확인을 누르면 파일을 찾을 수 없다는 메시지가 뜬다. 올리디버거로 열어봤다. 많이 봤던 00401000이 아니라 004071F0이 EP로 잡혔다. 그 곳에는 PUSHAD가 있다.

hec-ker.tistory.com

정말 큰 도움이 된 마띠언니 블로그,,,

728x90

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

[CodeEngn] Basic RCE L07  (0) 2021.02.25
[CodeEngn] Basic RCE L15  (0) 2021.02.24
[CodeEngn] Basic RCE L04  (0) 2021.02.22
[CodeEngn] Basic RCE L02  (0) 2021.02.22
[CodeEngn] Basic RCE L06  (0) 2021.02.19

댓글