SMALL
[문제]
[풀이]
문제를 실행하면 error 메시지 출력 후 종료된다.
이에 IDA를 통해 UPX 패킹이 되어 있는 것을 확인할 수 있었고, unpacking을 진행한 뒤 ollydbg로 실행하였다.
6A0068002040006812204000
[핵심]
StolenByte란?
: 훔친 바이트란 의미, 프로그램의 한부분의 코드를 훔쳐내어 다른 부분으로 옮겨진 코드
- 주로 옮겨지는 코드는 엔트리 포인트위의 몇개의 코드임
- 옮겨진 코드들은 OEP 주소로 점프하기 전에 위치에서 PUSH 됨.
-> 주로 OEP 주소의 코드를 따로 분리해서 OEP로 점프 직전에 PUSH로 넘겨주
- 패커가 이동시킨 코드의 윗부분 (보통 OEP 로부터 몇 개의 명령어)
- 프로그램을 패킹 시 확인 가능.
- 숨겨진 코드를 다시 제자리에 갖다 놓고 덤프, IAT 복구 하면 언패킹 후 정상 실행 됨
- Upx 에서는 마지막 JMP 전 POPAD이후 일정 바이트의 코드 의미
마지막 JMP문으 통해 원본 코드로 들어온 상태에서 0040100C번지 위로 12바이트가 NOP인 것을 볼 수 있는데, 이것이 Stolen byte임.
[출처]
코드 엔진 Challenges : Basic 09
이 글은 코드엔진(http://codeengn.com/) 에서 제공하는 리버스 엔지니어링 관련 다양한 문제들을 풀어보면서 리버스 엔지니어링을 공부하는 목적으로 작성되었습니다. 이글을 작성하는 필자도 리
stih.tistory.com
LIST
'Wargame > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L08 (0) | 2021.08.04 |
---|---|
[CodeEngn] Basic RCE L07 (0) | 2021.07.30 |
[CodeEngn] Basic RCE L05 (0) | 2021.07.29 |
[CodeEngn] Basic RCE L04 (0) | 2021.07.22 |
[CodeEngn] Basic RCE L03 (0) | 2021.07.22 |