워게임/CodeEngn

[CodeEngn] Basic RCE L11

name2965 2022. 7. 3. 00:30
728x90

 

 

 

이번 문제는 다음과 같습니다.

 

먼저 주어진 실행파일을 exeinfope로 열어봐야합니다.

 

 

 

32비트 기반 실행파일에 UPX 패킹이 되어있습니다

 

 

일단 프로그램을 실행시켜보면

 

 

 

다음과 같이 확인을 누르면 키파일을 체크한다고 한뒤

 

 

확인버튼을 누르면 파일을 찾을수 없다는 메세지박스가 나오면서 프로그램이 종료됩니다.

 

이제 정확한 분석을 위해 x32dbg로 분석해보겠습니다.

 

 

 

 

F9를 한번 눌러서 실행시켜보면 pushad로 시작하는 언패킹 루틴이 나옵니다.

 

여기서 F8을 한번 눌러서 진행한뒤

esp 주소에 하드웨어 중단점을 걸어줍니다.

 

 

 

 

이 다음에 F9를 눌러서 실행시키면

 

 

 

 

popad 바로 아래에서 중단합니다.

이제 여기에서 스택에 푸쉬되는 3개의 값들이 바로 StolenByte 입니다.

 

이유는 아래에 있는 jmp문으로 OEP로 가면 알수 있습니다.

 

 

 

 

UPX는 아까와 같은 자체 언패킹과정이 끝난뒤에는 이렇게 OEP로 점프를 합니다.

그런데 MessageBoxA 함수를 호출하는 부분을 잘 보면 스택에 인자를 하나만 푸쉬합니다.

 

그런데 공식 docs를 보면 

 

이 함수는 다음과 같이 인자가 4개 필요합니다.

 

그러므로 나머지 인자 3개는 아까전에 언패킹 루틴에서 스택에 푸쉬된 3개의 인자들인 것이고

이 인자들을 바로 StolenByte 라고 부르는 것입니다.

 

그리고 StolenByte로 인해서 원래있어야할 push 대신 nop 으로 채워져있기 때문에

OEP는 0040100C가 아닌 00401000 입니다.

 

 

 

그러므로 StolenByte는 6A0068002040006812204000 입니다.

그리고 OEP는 00401000 이므로 

이 문제의 정답은 OEP + StolenByte 인 004010006A0068002040006812204000 입니다.

 

 

728x90

'워게임 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Crypto Analysis L01  (0) 2022.07.03
[CodeEngn] Basic RCE L12  (0) 2022.07.03
[CodeEngn] Basic RCE L10  (0) 2022.07.02
[CodeEngn] Basic RCE L09  (0) 2022.05.19
[CodeEngn] Basic RCE L08  (0) 2022.05.19