본문으로 바로가기

[D+1] 리버싱 소개 (1)

category 해킹&보안/리버싱 2017. 3. 21. 22:41
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. 리버싱 소개


1) 어셈블리 언어


▣ 바이너리 디버거 (디스어셈블러)

- OllyDBG

- IDA Pro



2) 레지스터


▣ 레지스터

- 계산시 생성되는 임시값들을 저장 (임시공간)

- CPU가 자주 참조해야하는 값. 

ex) 다음 읽어올 코드의 위치(메모리 상의 주소), 스택의 위치들(스택프레임)

- 임시변수라고 생각하셈.


▣ 레지스터 종류

- 메모리의 Char 값을 불러와서 레지스터에 저장 후 다시 다른 메모리에 저장하려하니 레지스터는 4바이트임.

- 불필요한 값이 저장되는 사태가 발생.

- 이를 방지하기위해 EAX~EDX 레지스터는 값을 쪼개서 사용할 수 있다.

☞ C언어 상에서 레지스터명은 인식할 수 없음. 어셈블리어에서만 인식가능.

☞ int eax; 와 같은 문장은 나중에 에러가 됨. (c언어에서는 에러 x)

☞ 그래서 char ch; 와 같이 쓰게 되면 ECX의 상위비트로 처리가 되기 때문에 에러가남. 쓰지 않는게 좋음.

(1) EAX

- Accumulator. 누산기. 계산시 생성되는 임시값의 저장공간. 

☞ b = a + 1; 에서 a + 1의 결과 값과 같은 임시로 생성된 값을 잠시 저장해둠.

- 리턴값    ->  EAX 에만 저장 가능.


(2) EBX

- Base. 주소지정.

ex) b = *a; -> a에 저장되어 있는 주소를 EBX에 저장.

    EBX = a;

    b = [EBX];  -> [ ] : EBX에 들어있는 값을 주소로 인식하겠다는 의미.


(3) ECX

- Counter. 반복명령어의 반복횟수 지정.

- 하나의 동작이 여러번 실행!


(4) EDX

- Data. EAX의 보조 레지스터.

- 4바이트 이상의 크기인 리턴값을 리턴하려하면 EDX가 보조.

[여담] : 대부분 구조체의 리턴은 레지스터를 사용하지 않음.


=====> EBX, EDX를 누산기로 제일 추천.


(5) EBP

- Base Point. 스텍프레임의 기준점.

- 새로운 스텍프레임을 생성시 EBP를 바꿈.


(6) ESP

- Stack Point. 스택의 최상단 (다음 새로운 데이터의 추가를 위해)


=====> EBP와 ESP는 스택에서 사용된 스택을 알 때 사용됨.


(7) ESI

- Source Index. 원본의 인덱스(주소)


(8) EDI

- Destination Index. 목적지 인덱스(주소)


=====> ESI와 EDI는 대량의 data를 메모리상에서 다른 주소로 복사할 때 사용. ex) 문자열.

   짝으로 ECX와 사용됨. 반복되는 행위니까!








i2sec 대구지점 23기 수료생.

'해킹&보안 > 리버싱' 카테고리의 다른 글

[D+6] 리버싱 소개 (6)  (0) 2017.03.28
[D+5] 리버싱 소개 (5)  (0) 2017.03.27
[D+4] 리버싱 소개 (4)  (0) 2017.03.26
[D+3] 리버싱 소개 (3)  (0) 2017.03.23
[D+2] 리버싱 소개 (2)  (0) 2017.03.22