OllyDBG
PE 파일 동작한다는 것은 메모리에 올라간 PE 데이터 중에서 .text 섹션에 기록되어 있는 기계어 코드가 실행되는 것이다.
1. Disassemble 영역
- 어셈블리 코드를 실행 또는 중지할 수 있도록 한다.
- 왼쪽부터 차례로 Address(명령어가 실행될 주소), 기계어 코드, 어셈블리 코드(기계어를 어셈블리어로 바꿔놓음)로 구성된다.
2. 레지스터
- 레지스터는 CPU 내부에 존재하는 다목적 저장 공간
- 이러한 레지스터 값을 표시해주는 곳
3. Memory Dump
- Address 주소, Hex dump, 각 Hex에 따른 ASCII코드로 해석된 창을 보여준다.
- 프로세스 동작과정에서 읽고 쓰는 값들을 확인 및 수정이 가능
4. Stack
- Stack 영역은 임시 저장 공간
- 스택 주소, 스택 값, comment 순으로 표시된 창
- 함수 호출 시 필요한 인자 정보를 전달
어셈블리어
:: 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어
기계어를 어셈블리어로 번역하는 작업은 디버거가 알아서 해주기 때문에 기계어를 알아야 하는 경우는 잘 없다.
명령어 | 설명 |
PUSHAD | 8개의 범용 레지스터 값을 Stack에 저장 |
POPAD | PUSHAD 명령에 의해서 Stack에 저장된 값을 다시 레지스터에 입력 |
PUSH A | A값을 Stack에 넣음 |
POP 레지스터 | Stack에서 값을 꺼내서 레지스터에 넣음 |
INC A | A값을 1 증가 |
DEC A | A값을 1 감소 |
명령어 | 설명 |
ADD A B | A와 B를 더해서 그 결과를 A에 저장 |
SUB A B | A에서 B를 빼고 그 결과를 A에 저장 |
IML A B | A와 B를 곱한 후 그 결과를 A에 저장 |
LEA A B | A를 B로 만듬(레지스터에서 주로 사용) |
MOV A B | B를 A로 복사 |
XCHG A B | A와 B를 바꿈 |
TEST A B | A와 B를 AND 연산 (연산 결과 값이 a에 저장되지 않지만 ZF 플래그 설정에 영향을 줌) (연산 결과가 0이면 ZF가 1이 되고 연산 결과가 0이 아니면 ZF는 0이 된다) |
AND A B | A와 B를 AND 연산 (연산 결과 값이 a에 저장되고 ZF 플래그 설정에 영향을 줌) (연산 결과가 0이면 ZF가 1이 되고 연산 결과가 0이 아니면 ZF는 0이 된다) |
CMP A B | 비교 구문. A와 B가 같은지 판단 (같을 경우 ZE는 1이 되고 다를 경우 ZE는 0이 된다.) |
명령어 | 설명 |
JMP Address | 해당 주소로 무조건 이동 |
JZ(Zump if Zero) Address | 연산 결과가 0이면(ZE=1)이동하고, 아니면(ZF=0) 다음 명령을 실행 |
ZE(Zump if Equal) Address | 연산 결과가 0이면(ZE=1)이동하고, 아니면(ZF=0) 다음 명령을 실행 |
JNZ(Zump if not Zero) Address | 연산 결과가 0이 아니면(ZF=0)이동하고, 0이면 (ZE=1) 다음 명령을 실행 |
JNE(Zump if not Equal) Address | 연산 결과가 0이 아니면(ZF=0)이동하고, 0이면 (ZE=1) 다음 명령을 실행 |
명령어 | 설명 |
MOVE DWORD PTR DS:[Address], EAX | Address부터 4Byte 값을 EAX로 복사 |
CALL DWORD PTR DS:[Address] | Address부터 4Byte 주소 값을 호출 |
DWORD ; 크기 값 (BYTE : 1byte, WORD : 2byte, DWORD: 4byte)
PTR ; 기준
주요 단축키
단축키 정보 | 설명 |
F2 | BreakPoint를 설치하고 해제 |
F7 | 하나의 명령어 실행, Call 명령어 실행 시 해당 함수 내부로 들어감 |
F8 | 하나의 명령어 실행, Call 명령어 실행 시 해당 함수 내부로 들어가지 않음 |
F9 | 실행(Execute) |
Ctrl + F2 | 디버깅을 처음부터 다시 시작(재실행) |
Ctrl + F9 | 해당 함수 내에서 RETN 명령어까지 실행 |
Ctrl + G |
원하는 주소로 이동 |
Alt + M | Memory Map 확인 |
'Study > Reversing' 카테고리의 다른 글
Reversing.kr 1번 풀이 (0) | 2021.03.24 |
---|---|
main 함수 찾기 (0) | 2021.03.23 |
IAT & EAT (0) | 2021.01.25 |
PE 헤더 (0) | 2021.01.24 |
PE File Format 이해 (0) | 2021.01.23 |