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 |