'IT > Assembly' 카테고리의 다른 글

Reversing / 1일차  (0) 2016.04.13
2. 어셈블리어의 기초  (0) 2016.04.03
1. 어셈블리어의 장단점  (0) 2016.04.03

리버싱


파일을 뜯어서 이프로그램이 어떤 동작,기능을 하는지 분석하여 그원리를 보안하고 이것저것하는 작업을 리버싱이라고한다.


동적 분석

실행해가며 프로그램의 동작을 분석하는 방법


정적 분석

파일의 겉모습을 관찰하면서 분석하는 방법



과제 1






과제 2





과제 3



과제 4,5



과제 7


'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
2. 어셈블리어의 기초  (0) 2016.04.03
1. 어셈블리어의 장단점  (0) 2016.04.03

세그먼트 레지스터: 


CS(Code Segment) – 코드를 저장하는 메모리 블록 


DS(Data Segment) – 데이터를 저장하는 메모리 블록 


EX(Extra Segment) – 비디오와 관련된 것을 위해 사용됨 


SS(Stack Segment) – 루틴으로부터 리턴 어드레스를 저장하기 위해 프로세서에 의해 사용되는 레지스터  


인덱스 레지스터: 


SI(Source Index) – 문자열/배열의 소스를 지정하기 위해 사용됨. 


DI(Destination Index) – 문자열/배열의 목적지를 지정하기 위해 사용됨. 


IP(Instruction Pointer) – 다음 명령의 주소를 저장하고, 그래서 직접적으로 변경될 수 없음.   

 

스택 레지스터: 

BP(Base Pointer) – 스택 오퍼레이션을 위해 SP 와 연결되어 사용됨. 


SP(Stack Pointer)   


특별한 목적을 위한 레지스터: 

IP(Instruction Pointer) – 실행된 명령의 offset 를 가지고 있음. 


Flag – 분기(branching)를 위해 사용됨. 플래그 레지스터는 크기가 1 비트이다.

=============

EAX : 곱셈이나 나눗셈 연산 할 때 사용되는 레지스터

 

EBX : 주소 같은거 간접적으로 접근할 때 사용되는 레지스터 


ECX : 반복문 돌릴 때 루프 카운트 되는 레지스터 


EDX : EAX레지스터를 보조해주는 레지스터


EDI , ESI : 조작 , 복사시 소스데이터 주소가 저장


ESP , EBP : 스택프레임의 끝지점 주소가 저장

=========================================================================


' 해당 주소 피연산자를(로) 명령어 하라. '


피연산자란?

- 명령어의 대상과 목적

EX) 레지스터, 메모리, 레이블, 상수

Practice


※ 명령어 


 IA-32 어셈블리 명령어 모음.pdf


MOV : 원하는 곳으로 데이터를 이동 (메모리에서 메모리로는 이동 불가)

MOV 피연산자,값


XCHG : 두 레지스터의 값을 바꿈  

XCHG 레지스터1,레지스터2 


JMP : 원하는 주소나 라벨로 점프

JMP AX

JNE : 같지 않은 경우 점프

JE : 같은 경우 점프

JNZ : 0이 아닌경우의 점프

JZ : 0인 경우의 점프


CMP : 비교 명령

CMP AX ,0x8

점프 명령이 이뤄지기전에 100%일어남


ADD : 덧셈을 수행하는 사칙연산 명령

ADD 레지스터 1, 레지스터 2 

ADD 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

ADD AX,BX  ;AX 에 BX 를 더하고, 그 값을 AX 에 저장(5h + 4h = 9h = AX)


XOR : 초기화

XOR AX,AX


LEA : 주소값 가져오기

LEA AX,주소


SUB : 뺄셈을 수행하는 사칙연산 명령

SUB 레지스터 1, 레지스터 2 

SUB 레지스터, 값  

MOV AX,5h  ;AX 의 값은 5h 

MOV BX,4h  ;BX 의 값은 4h  

SUB AX,BX  ;AX 에 BX 를 빼고, 그 값을 AX 에 저장(5h - 4h = 1h = AX)


INC : 피연산자 값을 1 증가

INC AX


DEC : 피연산자 값을 1 감소

DEC AX


POP : 원래 값을 회복

POP AX


PUSH : 레지스터의 값을 잠시 저장

PUSH BX


Practice


MOV AX,51h 


MOV BX,4Fh  


XCHG AX,BX  


PUSH AX 


MOV AX,34h 


POP BX  


PUSH BX  


POP AX  

'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
Reversing / 1일차  (0) 2016.04.13
1. 어셈블리어의 장단점  (0) 2016.04.03

 

## 장점 ##


프로세서를 직접 제어할 수 있다. (레지스터 , I/O 에 접근)

동작을 하나하나를 정확하게 제어

효율적이고 최적화된 코드를 작성

고수준의 언어들로는 구현할 수 없는 부분까지 구현

어셈블리 언어를 통해 최적화된 소스는 가장 빠르고, 용량도 적음

 


## 단점 ##

프로그램 자체를 작성하기에는 복잡

만약 코딩을 재계획 하는 경우 , 코드 전체를 수정해야 함

다른 아키텍쳐나 프로세서로의 이식성이 부족


'IT > Assembly' 카테고리의 다른 글

Reversing / 2일차  (0) 2016.04.17
Reversing / 1일차  (0) 2016.04.13
2. 어셈블리어의 기초  (0) 2016.04.03

+ Recent posts