상세 컨텐츠

본문 제목

[CodeEngn] Basic RCE L09 Write-Up

해킹공부/CodeEngn

by 밍구21 2022. 3. 29. 17:58

본문

음. Stolen Byte가 뭘까? 문제를 풀면서 알아보자!

 

 

 

일단 실행을 해보았다. 건방지다. 

 

디버거에 올려줬다.

PUSHAD로 시작하는 걸 보아 패킹된 것 같다. PEID를 사용해 패킹 여부를 확인해줄 수 있지만 패스하겠다.

 

POPAD 코드도 한 번.

 

UPX 패커 특징

PUSHAD - 언패킹 전 레지스터 값을 스택에 저장

압축해제 루프

POPAD - 언패킹 후 스택에 넣은 값을 레지스터에 복원

JMP OEP(Original Entry Point) - 파일 실제 시작 부분

 

언패킹 방법은 POPAD에 HWBP를 걸고 실행해준 후 F8키를 몇 번 반복해 수동 언패킹을 해줄 수도 있고

UPX 명령어를 통해 해줄 수도 있다. 나는 전자로 해주다가 불편해서 후자를 해줬다.

 

upx -d 실행파일명

언패킹 명령어가 잘 실행됐다.

 

언패킹을 해주고 F8로 한줄 실행을 하는데!

 

띠용. MessageBoxA를 호출하는 과정에서 오류가 났다. 이게 뭔가 싶어서 검색해보니 이걸 해결하는 것이 문제이다.

어쩐지 바로 PUSH가 안나오고 NOP코드만 12BYTE가 있더라니.

 

MessageBoxA를 호출하기 전 코드는 PUSH 0 하나 뿐이다. 즉 파라미터가 부족해서 저런 것이다. 

그럼 그 파라미터는 어디갔지? 누가 훔쳐갔다...훔쳐진 데이터를 바로 StolenByte라 한다.

 

정확히는 코드 일부분을 훔쳐 다른 위치로 옮기는 것인데, 언패킹 했을 때 프로그램이 정상적으로 작동하지 못하도록 하는 기법이다. 주로 StolenByte는 popad 이후에 위치한다고 한다.

 

아까 언패킹 이전의 코드를 다시 보자.

POPAD 뒤에 OEP인 JMP 09.00.40100C가 나오기 전까지 굉장히 길고 쓸 데 없는 인자값을 넣어주는 코드를 눈치 챘나?

40736D부터 407379까지 총 12BYTE 코드이다. 파라미터 입력 코드에... 12...BYTE?무언가 생각난다...

 

이 코드가 StolenByte일까? 긁어와서 EP코드 앞에 붙여주겠다.

 

NOP코드 대신 StolenByte로 추정되는 코드를 입력한 뒤 실행해줬다.

 

 

아까 같은 오류창 대신 제대로된 메시지창이 뜬다.

 

정답은 예시를 보니 StolenByte의 OPcode이다. 

이어 붙여서 6A0068002040006812204000를 입력해주었다.

정답!

'해킹공부 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L11 Write-Up  (0) 2022.05.01
[CodeEngn] Basic RCE L10 Write-Up  (0) 2022.03.29
[CodeEngn] Basic RCE L08 Write-Up  (0) 2022.03.29
[CodeEngn] Basic RCE L07 Write-Up  (0) 2022.03.24
[CodeEngn] Basic RCE L06 Write-Up  (0) 2022.03.24

관련글 더보기