반응형

나도 처음 리버싱을 접할때 어셈블리어에 대해서 조금 학습을 하고 공부를 시작했는데 이해하기 힘들엇던 부분이 아마 레지스터와 관련된 부분이라고 생각을 한다.

레지스터는 CPU 안에 다목적 저장공간을 뜻한다.

처음에는 EAX 등등 그냥 변수를 저장하는 공간이라고 생각했지만 공부를 해보니 정말 많은 정보들을 내포하고 있었다.

 

초급 리버싱에서는 Basic program execution register 에 대해서 알아야 한다.

하위그룸에서 4가지로 분류가 가능하다.

General Purpost registere(32bit - 8)

Segment Register(16bit - 6)

Program Status and Control Register(32bit - 1)

Instruction Pointer(32 bit - 1) 

 

범용 레지스터는 다양하게 사용이된다.

EAX

EBX

ECX

EDX

가 있는데 

EBX,EDX 는 주로 산술연산과 변수 저장등의 일을 한다.

ECX는 반복문(loop)에서 카운트 하는 역활을 담당하고

EAX는 함수의 리턴값을 저장한후 리턴하는 역활을 한다.

 

EBP:스택 프레임

ESI :메모리 복사

EDI :메모리 복사

ESP : 스택 메모리주소 = 스택 포인터 

 

스택프레임이란 함수가 호출되었을떄 ESP에 주소를 저장하고 함수를 리턴할때 주소로 돌려주어 스택이 깨지지 않게 해주는 역활을 담당한다. 이 글을 읽으면 이해가 매우 쉽다. 특히 ESP 같은 경우 매우 자주 나와서 알아두면 디버깅시에 매우 편하다.(http://blog.naver.com/PostView.nhn?blogId=hermet&logNo=56227646)

 

세그먼트 레지스터는 메모리 관리 모델에서 나온 말이라고 한다.

이부분은 설명이 짧게 되어있고 고급 리버싱에서 자세히 다룬다고 한다. 한번 구글링을 해봤는데 아직 접근할 영역은 아닌듯하다...

 

EFLAGS

플래그 레지스터는 각 비트마다 1은 on/True 0은 off/False 를 나타낸다. 오버플로등 다양하게 사용은 되는데... 사실 아직 감이 잡히는 부분은 아니다.

 

EIP

cpu가 처리할 명령어의 주소를 가르킨다.

값을 직접 변경할수 없다.

이 2가지 특징을 가진다.

 

스택은 메모리를 저장하는 방법중 하나이며 프로세스에서 스택 메모리의 역활은

1. 함수 내의 로컬변수 임시 저장

2. 함수 호출 시 파라미터 전달

3. 복귀 주소(return address)저장

 

 

스택은 크게 두가지 특징을 가진다.

스택에 값을 입력하면 스택포인터는 감소하고 반대로 스택에 값을 꺼내면 스택 포인터는 증가하낟.

스택포이터의 초기 값은 스택 메모리 아래쪽에 있다.

 

 

반응형
Posted by 53C
,
반응형

두가지 개념은 컴퓨터가 바이트를 저장하는 방식을 의미한다.

컴퓨터가 바이트를 저장하는 방식을 바이트 오더링이라 칭하고 빅엔디언 방식과 리틀 엔디언 방식으로 나뉘어 진다.

 

빅 엔디언 방식의 경우 사람이 읽는 순서과 같이 바이트를 저정합니다. 하지만 

리틀엔디언의 경우 반대로 저정하게 됩니다.

 

빅엔디언의 경우 대형 유닉스 서버와 많은 서비스에 사용이 됩낟. 하지만 32비트 운영체제의 경우 리틀 엔디언 방식을 많이 사용을 합니다. 그리고 데이터 통신에도 많이 사용이 됩니다.

제가 생각하기에는 컴퓨터의 메모리느 스택의 형태로 저장이 된다고 알고 있습니다.

그래서 리털 엔디언 방식으로 디버깅을 할때 높은 효율이 나는 것 같습니다.

반대로 만약 자바로 프로그램을 만들었다고 생각한다면 빅 엔디언 방식이 더 효과적이라고 생각이 듭니다. 자바의 경우 자료구조가 힙의 형태를 띄고 있기 때문입니다.

 

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

스택 프레임  (0) 2020.02.26
abex' crackme #1 크랙  (0) 2020.02.25
레지스터와 스택  (0) 2020.02.25
2. 메인함수를 빨리 찾는 4가지 방법과 나의 접근방법  (0) 2020.02.21
1. 메인 함수 찾기  (0) 2020.02.21
Posted by 53C
,
반응형

나는 올리디버거가 아니라 x32dbg 을 주로 사용을 한다. 그래서 책의 내용과는 조금 달라서 내가 찾아보면서 하게 되었다.. 좋은건가? 이번 기회에 자바 도 중요하지만 c++ 도 배워야 겠다는 생각을 했다.. 다 c++이더라... 

 

1. 코드 실행 방법

 

코드를 실행 시키다 보면 hellwold 라는 창이 뜨게 된다. 즉 어떤 함수를 call 했을떄 메세지 창이 뜨므로 그 함수 안에 main이 있다는 뜻이다.

 

2. 문자열 탐색

hellowold 라는 문자열이 나타나는 것은 알고 있다. 그러므로 해당 문자열이 있는 메모리 위치를 찾아내는 방법이다.

동적 분석을 실행한 상태에서 찾는 방법이니.. 정적 분석이라 하기좀 애매하다.

 

3. api 검색

이부분이 가장 막혔다. 나의 컴퓨터 시스템 비주얼 스튜디오의 버전 디버거의 종류가 달라서 나와는 완전 다른 함수명으로 작성이 되어 있었다.. 아직 이방법이 뭐라 편하다고 하기는 어렵다고 생각이 든다.. 시스템을 공부하지 않은 이상...

 

4. api 에 bp설정

이부분도 마찬가지로 나는 api를 찾을 수 없었다.

 

이책을 보면 볼수록 잘만들었다는 생각이 든다. 정말 깊지도 않고 그렇다고 얇지도 않다. 딱필요한 지식을 알려준다. 

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

스택 프레임  (0) 2020.02.26
abex' crackme #1 크랙  (0) 2020.02.25
레지스터와 스택  (0) 2020.02.25
빅 엔디언/ 리틀 엔디언  (0) 2020.02.24
1. 메인 함수 찾기  (0) 2020.02.21
Posted by 53C
,
반응형

이책의 서론을 읽으면서 리눅스 os와 네트워크는 그정도만 알고 진도를 나가볼생각이다. 이책의 서론에는 아주 좋은 내용이 많으니 꼭 읽고 넘어가면 좋을 것 같다.

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

내가 사용한 프로그램은 x64dbg 한글까지 되었어서 완전 좋다. 

처음에는 너무 많은 함수에 빠져서 정말 찾지가 어려웠다.

비주얼 C로 만들면 코드가 ㅈㄴ 좃같아지는 것 같다.

그래서 옛날에 배운것을 활용했다.

 

프러그램을 실핼하면 "helloword" 가 뜬다.

그래서

문자열을 찾고 그곳으로 가게 해주는 함수를 찾아다니다 보니 비교적 쉽게 접근이 가능했다.

사실상 책의 내용과 실제 코드는 완전 달라서... 고생 많이 했다..

저 주소로  jm하는 구간을 찾는게 정말 힘들었다. 이상하게

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

스택 프레임  (0) 2020.02.26
abex' crackme #1 크랙  (0) 2020.02.25
레지스터와 스택  (0) 2020.02.25
빅 엔디언/ 리틀 엔디언  (0) 2020.02.24
2. 메인함수를 빨리 찾는 4가지 방법과 나의 접근방법  (0) 2020.02.21
Posted by 53C
,