1. CPU와 레지스터
- CPU는 기계어로 쓰여 진 컴퓨터 프로그램의 명령어를 해석하여 실행하는 역할
- 컴퓨터의 두뇌 역활로 연산, 비교, 해석 등과 같은 처리를 제어하며 소프트웨어는 CPU에 메시지를 보내고 그 메시지를 받아 명령을 수행
-이때 CPU에서는 레지스터를 이용하여 연산 및 저장
- 레지스터 종류
○ 범용 레지스터 : EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP
○ 세그먼트 레지스터 : CS, DS, SS, ES, FS, GS
○ 플래그 레지스터 : CF, PF, AF, ZF, SF, OF, DF
○ Instruction Pointer Register : EIP
2. 어셈블리어
명령어 |
설 명 |
MOV |
데이터 전송 |
PUSH |
스택에 값 입력 |
POP |
스택의 최상위 값을 가져옴 |
XCHG |
첫 번째와 두 번째 피연산자의 값이 교환 |
IN |
첫 번째 피연산자가 가리키는 포트주소에서 한 바이트나 워드를 AL, 혹은 AX로 입력받는다 |
OUT |
첫 번째 피연산자가 가리키는 포트주소로 출력한다. 0~FF 범위일 경우 상수를 사용하고, 0~FFFFh 범위이면 DX에 주소를 넣어서 사용 |
XLAT, XLATB |
AL의 값을 DS:BX가 가리키는 표의 인덱스로 사용한다 |
LEA |
메모리 피연산자의 16비트 혹은 32비트 유효주소를 계산하고 레지스터에 탑재 |
ADD |
덧셈(캐리 미포함) |
SUB |
뺄셈(캐리 미포함) |
DEC |
피연산자의 값을 1감소 |
INC |
피연산자의 값을 1증가 |
NEG |
부호반전(2의 보수) |
CMP |
두 번째 피연산자에서 첫 번째 피연산자의 값을 가상으로 빼서 크기 비교 |
ADC |
덧셈(캐리 포함) |
SBB |
뺄셈(캐리 포함) |
MUL |
AL, AX 혹은 EAX에 대해 부호가 없는 정수 곱셈을 수행 |
DIV |
8, 16 혹은 32비트 부호가 없는 정수 나눗셈을 수행 |
IMUL |
AL, AX 혹은 EAX에 대해 부호가 있는 정수 곱셈을 수행 |
IDIV |
8, 16 혹은 32비트 부호가 있는 정수 나눗셈을 수행 |
NOT |
비트 반전(1의 보수) |
SHL(SAL) |
왼쪽으로 오퍼랜드만큼 자리 이동(최하위 비트는 0) |
SHR |
오른쪽으로 오퍼랜드만큼 자리 이동(최상위 비트는 0) |
SAR |
오른쪽 자리이동, 최상이 비트는 유지 |
ROL |
왼쪽으로 오퍼랜드 만큼 회전 이동 |
ROR |
오른쪽으로 오퍼랜드 만큼 회전 이동 |
RCL |
왼쪽으로 회전, 캐리플래그는 최하위비트에 복사, 최상위비트는 캐리플래그가 복사 |
RCR |
오른쪽으로 회전, 캐리플래그는 최상위비트에 복사, 최하위비트는 캐리플래그 복사 |
AND |
논리 AND |
OR |
논리 OR |
XOR |
논리 XOR |
CALL |
프로시저 호출 |
JMP |
무조건 분기 |
RET |
CALL로 스택에 PUSH되었던 주소로 다시 복귀 |
JA |
결과가 크면 분기 |
JNA |
결과가 크지 않으면 분기 |
JAE |
결과가 크거나 같으면 분기 |
JNAE |
결과가 크지 않거나 같지 않으면 분기 |
JB |
결과가 작으면 분기 |
JE |
결과가 같지 않으면 분기 |
JZ |
결과가 0이면 분기 |
JNZ |
결과가 0이 아니면 분기 |
JS |
부호 플래그가 1이면 분기 |
JNB |
결과가 작지 않으면 분기 |
JBE |
결과가 작거나 같으면 분기 |
JNBE |
결과가 작지 않거나 같지 않으면 분기 |
... |
... |
LOOP |
CX를 1씩 감소 시키면서 9이 될 때까지 지정된 라벨로 분기 |
LOOPE, LOOPZ |
CX를 감소시키고 만약 CX>0이고 제로 플래그가 1이면 SHORT 레이블로 분기 |
LOOPNE, LOOPNZ |
CX를 감소시키고 만약 CX>0이고 제로 플래그가 0이면 SHORT 레이블로 분기 |
JCXZ |
CX가 0이면 분기 |
INT |
인터럽트 |
INTO |
오버플로우 발생시 인터럽트 |
IRET |
인터럽트 복귀(리턴) |
HLT |
정지 |
NOP |
오퍼랜드 없음 |
WAIT |
일시정지 |
ESC |
이스케이프 |
3. 운영체제
- 기본적으로 소프트웨어는 운영제제를 바탕으로 동작
- 리버스 엔지니어링을 해야 할 해당 소프트웨어가 동작하고 있는 운영체제(windows, unix 등)의 구조와 원리에 대하여 아는 것이 중요
4. PE 파일 구조
- PE 파일 형식은 Win32의 기본적인 파일 형식이며 윈도우 운영체제에서 실행되는 프로그램이 모두 PE 파일 형식
- EXE, DLL과 같은 확장자의 파일이 PE파일의 대표적인 예
- 맨 처음 MZ 부분 : MS-DOS의 헤더 부분
- 그 밑 : “This program cannot be run in dos mode" 문자열도 확인 가능
- 도스 모드에서 실행 하였을 때 보았던 메시지임을 알 수 있음
※ 악성코드와 같은 프로그램은 실행압축 기법을 사용하기도 하는데 이러한 이유는 파일의 크기를 작게 하여 빠르게 전파되도록 하기도 하지만, 프로그램의 분석을 어렵게 하기 위한 것
'보안 > 리버싱 엔지니어링' 카테고리의 다른 글
[리버스 엔지니어링] IDA pro Tool 단축키 (0) | 2020.06.04 |
---|