EASY7
[CodeEngn] Basic RCE L05 본문
실습환경
VMware Workstation
OS : Window XP
OllyDbg(shadow)
IDA 32
문제
이 프로그램의 등록키는 무엇인가
파일에 대한 이해
EP:0x55BB0
ImageBase:0x400000
<주요 동작>
시리얼 넘버가 틀리면 Wrong Serial, try again! 뜬다.
<파일 특징>
UPX 패킹되어있다.
OllyDbg로 열었을 때, 처음에 나오는 PUSHAD 명령어로 보아 UPX 패킹되어있는 것을 알 수 있다.
<패킹의 원리>
패킹된 파일의 EP에 PUSHAD 명령어로 레지스트리 값들을 스택에 넣고 패킹을 풀고
POPAD 명령어로 앞서 스택에 넣어두었던 레지스트리 값들을 복원시킨다..
PUSHAD~POPAD사이에 합축해제 코드가 실행되고
POPAD 이후 JMP명령어를 통해 OEP로 이동한다.(OEP는 패킹된 파일의 원래 EP임)
* Section UPX0 : 메모리에 로드된 후 압축코드가 해제 될 공간
* Section UPX1 : 압축코드가 저장되는 공간
문제 풀이-함께 UPX 언패킹을 해보자
어려운 작업이니 친절하게 설명하겠다.. (친절하지 않는 블로그라서 드문 케이스다)
1. 패킹된 파일을 올리디버거에서 열기
2. 커서를 아래로 내리면서 "POPAD"명령어를 찾는다.
3. POPAD를 클릭 -> F2(breakpoint 설정) -> F9(breakpoint까지 실행)
4. JMP 00441270 : 점프될 주소(00441270)이 패킹되기전 원래 EP로 점프하라
F7 두번 입력
5. ollydbg plugin인 OllyDump->Dump debugged process 클릭
Entry Point 를 OEP의 RVA(Relative Virtual Address)로 변경.
Dump 클릭.
파일 저장.
자동으로 덤프 떠주고 파일을 지정한 자리에 던져줌!
문제 풀이
오른쪽 마우스->Search for ->Text strings referenced
누가봐도 시리얼넘버 같은 것이 있다...!
'Project > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L07 (0) | 2019.12.26 |
---|---|
[CodeEngn] Basic RCE L06 (0) | 2019.11.15 |
[CodeEngn] Basic RCE L04 (0) | 2019.11.10 |
[CodeEngn] Basic RCE L03 (0) | 2019.11.05 |
[CodeEngn] Basic RCE L02 (0) | 2019.11.05 |