본문 바로가기
Reverse Engineering

리버싱 기초

by 솥에 2009. 8. 13.
반응형

어셈 명령어

INC(increase)

피연산자에 1을 더한다.
연산결과에 따라 ZF나 OF가 세트 될수 있다.

INC reg
INC mem

피 연산자가 레지스터나 메모리가 될 수 있다는 의


DEC (INC반대 빼기 --1)


ADD

Destination에 source의 값을 더해서 Destination에 저장하는 명령이다
연산결과에 따라 ZF,OF,CF가 세트 될 수 있다.

SUB


MUL
부호없는 al,ax,eax의 값을 피연산자와 곱한다.
피연산자가 8비트이면 al과 곱해서 ax에 저장되고 16비트이면 ax와 곱하고 dx:ax에 저장된다.

IMUL
부호있는 al,ax,eax 값을 피연산자를 곱한다. 결과에 따라 CF,OF에 세트 될 수 있다.

DIV
8, 16, 32 부호 없는 정수의 나눗셈을 수정 결과에 따라 CF,OF,ZF에 세트 될수 있다.

MOV
mov eax,edx             1 , 2 로 데이터를 복사

MOVS(Move string)

MOVSB는 BYTE 단위로 복사
MOVSW는 WORD 단위로 복사
MOVSD는 DWORD 단위로 복사
방향플래그(DF)가 1로 세트되어 있으면 ESI와 EDI는 복사시 감소하게 되고 DF으로 세트되어 있으면,
ESI와 EDI는 복사시 증가하게 된다.

MOVSX
BYTE나 WORD 크기의 피연자를 WORD나 DWORD 크기로 확장하고 남은 비트는 0으로 채운다.

INT
소프트웨어 인터럽트를 발생시켜 운영체제의 서부루틴을 호출

TEST
두 피연산자 사이에 논리적인 AND연산을 수행하여 플래그 레지스터에 영향을 주지만 결과값을 저장하지 않는다.

OF, CF는 항상 0으로 세트되고 TEST연산결과 값이 0이면 ZF가 1로 세트 0이 아니면 ZF가 0으로 세트

STC : CF를 1로 세트
CLC : CF를 1로 세트
STD :  DF를 1로 세트
CLD :  DF를 0로 세트
STI  :   IF를 1로 세트
CLI :    IF를 0로 세트


PUSHAD(PUSH ALL)
모든 레지스터의 값을 PUSH한다.
- 레지스터의 값을 보관해야 할 필요가 있을때 사용
PUSHFD
-플래그 레지스터스택에 PUSH

어셈블러 조건 명령어

POPFD
XCHG
NEG
PTR
OFFSET
LEA
REP
JMP
REP
JMP
CALL
CMP
NO[




파일 바이러스의 종류
CIH, FUNLOVE,KRIZ,WIN32
4099,VIRUT

매크로 바이러스
SHIVER,MELISSA,LAROUX

부트바이러스
BRAIN, MONKEY,ANTICMOS, 미켈란젤로a


HYBRIS, HAPPY99, NAVIDAD,EXPLOREZ,PRETTYPARK

트로이
BACKORIFICE,NETBUIS,BYMER

백도어

스파이웨어


간략한 소개와 설명 그리고 증상 대표 ㅁ











mov eax, ecx (복사)

mov eax,dword ptr ds[eax + 59] (복사)

cmp eax , 0 EAX를 0과 비교

xor eax, eax (초기화) 1 , 1 = 0   0 , 0 =0

imul eax, ecx (곱하기)


movsx ecx, byte ptr ds:[esi + 4020FE]
//ECX Register에 [esi + 4020FE]가 가지고 있는 값을 읽어온다.




진수 변환

2진수가 영어로 binary이기 떄문에 뒤에 b를 붙여서 표기
16진수는 hexadecimal이기 떄문에 뒤에 h
10진수의 경우 ah

CPU 레지스터 

플래그 레지스터

CF : 부호연산 결과가 용량보다 클때 세트 (1)이 된다.

ZF : 연산결과가 0일때 세트(1) 된다. 연산결과가 0이 아닐때 해제(0) 된다.

OF : 부호 연산 결과가 용량보다 클때 세트(1) 된다.

SF : 연산결과가 음수가 되었을때 세트 (1) 된다. 연산결과가 양수가 되었을때 해제(0) 된다.

DF : 문자열처리에 연속된 문자열의 처리 방향에 따라 세트



어셈블리 언어


Data type


타입        설명

BYTE         8비트 부호가 없는 정수
SBYTE        8비트 부호가 있는 정수
WORD        16비트 부호가 없는 정수
SWORD        16비트 부호가 있는 정수
DWORD        32비트 부호가 없는 정수
SDWORD        32비트 부호가 있는 정수
FWORD        48비트 정수
QWORD        64비트 정수
TBYTE        80비트 정수



피연산자 타입

피연산자    설명
r8        8비트 범용레지스터
r16        16비트 범용레지스터
r32        32비트 범용레지스터
Reg        임의의 범용레지스터
srg        16비트 세그먼트레지스터
lmm        8,16,32 비트 즉시값
lmm8        8비트 즉시값
lmm16        16비트 즉시값
lmm32        32비트 즉시값
r/m8        8비트 범용레지스터, 메모리
r/m16        16비트 범용레지스터, 메모리
r/m32        32비트 범용레지스터, 메모리
mem        8,16,32비트 메모리





반응형