본문 바로가기

보안/리버싱 엔지니어링

[어셈블리어] 어셈블리어 기본

반응형

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파일의 대표적인 예

notepad.exe 파일을 HxD 도구로 열어본 화면

- 맨 처음 MZ 부분 : MS-DOS의 헤더 부분

- 그 밑 : “This program cannot be run in dos mode" 문자열도 확인 가능

- 도스 모드에서 실행 하였을 때 보았던 메시지임을 알 수 있음

 

※ 악성코드와 같은 프로그램은 실행압축 기법을 사용하기도 하는데 이러한 이유는 파일의 크기를 작게 하여 빠르게 전파되도록 하기도 하지만, 프로그램의 분석을 어렵게 하기 위한 것

반응형