DAY 1 - 어셈블리언어

i2sec/Reverse Engineering 2014. 4. 25. 23:21

1.리버스 엔지니어링이란?

- 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일을 말한다.

  즉, 실행파일을 분석해 소스코드를 알아내는 일


2.어셈블리언어란?

-기계어와 1:1 대응관계에 있는 언어를 말한다.

3.바이너리 디버거 종류

- Olly DBG

  =http://ollydbg.de

  =동적 악성코드 분석시 사용


- IDA Pro

  =http://hex-rays.com/odapro/idadown.htm

  =그래프뷰 기능 존재, 정적 악성코드 분석시 사용


-WinDBG

  =http://www.microsoft.com/whdc/devtools/debugging/default.mspx

  =MS사에서 제작

 =Kernel + User 디버깅 가능 (명령어로 입력해야되는 것이 단점)


4.레지스터

-cpu내에 존재하는 저장공간으로 읽는 속도가 가장 빠르다



32bit General-Purpose Resgisters (32bit 범용 레지스터)

 EAX

EBP 

 EBX

ESP 

 ECX

ESI 

 EDX

EDI 


 EFlAGS

 

 AF

 CF

OF 

PF 

SF 

ZF 


 EIP

 

 


*EAX 

 =누산기, 산술연산을 저장 하는 공간

 =리턴값 저장에 주로 사용


*EBX

 =간접 주소 저장 공간

 = ex> JMP 1000(1000 주소로 이동) == EBX =1000, JMP EBX


*ECX

 = 반복 카운터(반복문에서 사용)

 = 반복이 한번 진행될때마다 안의 값은 하나씩 감소

 = ECX>0

 = ECX=5  == 5번 반복


*EDX

 = EAX의 보조역할

 = ex>64bit의 값을 EAX에 담을 시 상위 32bit는 EAX에 저장되고 하위 32bit는 EDX에 저장된다.


//EBP와 ESP는 stack과 연관

*EBP

=스텍 프레임의 기준점(고정)


*ESP

=스텍 프레임의 최상단(유동적)


*스텍은 높은 곳에서 낮은 곳으로 변수 생성(그림에서는 올라가고 있지만 실질적으로는 주소 감소)


//ESI 와 EDI는 주소와 연관

*ESI

=시작 주소 저장


*EDI

=도착 주소 저장


*EFALGS

=상태값 저장(0,1) -> 1:set , 0:clear

=종류 : AF,CF,OF,PF,SF,ZF


*AF,CF,OF

=>자리올림=1, 자리내림=0


*PF

=> 짝수=1, 홀수=0


*SF

=> 음수:1, 양수 :0


*ZF

=> 산술 연산 결과 저장

=> (산술연살 결과 = 0) == 1 , 나머지 == 0 


*bit별 명칭 분류

EAX 

 

 4byte(32bit)


 AX

 

 2byte(16bit)

 AH / AL

 

 1byte(8bit)

 

 1byte(8bit)



*64bit 레지스터

=32bit 레지스터 앞에 'E'가 붙는데 이것을 'R'로 바꾸면 된다.

=ex> RAX,RCX,RDX


출처 == i2sec



'i2sec > Reverse Engineering' 카테고리의 다른 글

Day-02 어셈블리어  (0) 2014.04.28