[정보 보안] 리버싱

[Reversing] 기초 이론_CPU와 레지스터_2

ITsubin 2022. 8. 18. 18:35

Paging?

> 총 32비트 선형주소 중 10비트의 Page Directory와 CPU CR3 Register를 통해 Page Table의 시작 주소를 얻는다.

   (Page Directory의 수 : 2^10 =1024)

> Page Table의 시작 주소 + 이전 세그먼테이션에서의 선형주소의 Page Table 값 = 실제 물리 주소의 페이지


Byte Ordering?

> 컴퓨터에서 메모리에 데이터를 저장하는 방식

> 데이터가 메모리에 저장되는 순서에 따라 2가지로 구분

> [ Little Endian(리틀 엔디언)  /  Big Endian(빅 엔디언) ]


Big Endian

> 데이터가 상위 바이트부터 메모리에 적재 (Network Ordering)

> 높은 비트열 먼저 들어와서 연산 시 데이터를 다 받아야 한다.

> 연산속도가 느리다.

> 비교연산 시 높은 비트열 먼저 비교하면 되므로 유리하다.

 

Little Endian

> 데이터가 하위 바이트부터 메모리에 적재(Host Ordering)

> 낮은 비트열 먼저 들어와서 바로바로 연산 진행이 가능하다.

> 연산속도가 빠르다.

> 비교연산 시 불리하다.


Reversing 시 필수 Register

> IA32 Register (Intel Architecture 32bit Register)

> 데이터 처리 시 32비트 크기의 데이터를 처리

> 32비트 크기의 주소를 사용. (즉, CPU의 레지스터 크기 = 32Bit)


CPU에서 Register를 사용하는 이유

> 데이터(연산에 필요한 주소, 연산자 등)의 저장공간 용도로 사용

> CPU가 용도에 맞는 각각의 Register들이 존재

> Register는 CPU 안에 구성되어 있기에 데이터를 고속으로 처리 가능

> Register를 알아야만 어셈블리어로 구성되어 있는 명령어 해석 가능


Register 사전 용어 - [CPU 메모리 레지스터]

> EAX = accmulator

    산술연산 ,실제 값 가장 많이 사용

> EBX = base regist

    메모리 주소 지정을 확장 , 포인터

> ECX = count register

    반복횟수

> EDX = data register

    입출력 연산 , EAX와 같이 쓰임  (OEP값이 입력)

 

> OEP (Original entry point) 

    image base + address of entry point) 시작지점

> image base

    PE 파일 저장되는 시작주소 (exe파일 0x00400000)

> address of entry point

    메모리 실제 시작

 

> EBP = base pointer

    스택 시작 주소 값

> ESP = stack pointer

    스택 끝 주소 값

> EIP = instruction point

    다음 명령어가 실행될 메모리주소 저장

> ESI = source index

    데이타 출발지 주소에 대한 값 (복사,조작)

> EDI = destination index

    데이타 목적지 주소에 대한 값


Register 사전 용어 - [세그먼트 레지스터 (Segment Register)]  16bit  4byte ,  8bit  2byte

 

> CS = code segment   코드 시작

> DS = data segment   데이터 시작

> SS = stack segment   연산작업 임시저장소


Register 사전 용어 - [Basic program execution register]

 

> General Purpose Registers (32비트 - 8개)

> Segment Registers (16비트 - 6개)

> Program Status and Control Register (32비트 - 1 개)

> Instruction Pointer (32비 트 - 1 개)


General Purpose Registers (범용 레지스터)?

> 범용 레지스터의 크기는 4Byte (32Bit)이며, 8개로 구성되어 있다.

> 필요에 따라 자유롭게 사용이 가능한 Register이다.