본문 바로가기

Reversing

(3)
[리버스 엔지니어링] 80x86 CPU의 레지스터 종류와 뜻 레지스터(Register) 처리 중인 데이터나 처리 결과를 임시적으로 보관하는 CPU안의 기억장치이다. 레지스터에는 종류가 있고 종류마다 각각 기능이 따로 분류 되어있는데, 범용 레지스터, 세그먼트 레지스터, 포인터 레지스터, 인덱스 레지스터, 플래그 레지스터로 나뉘어 진다. 레지스터들 중에 앞에 E가 붙는것들이 있는데 이때 E는 Extended(확장된)을 의미한다. 범용 레지스터(General Register) -연산 장치가 수행한 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인등에 사용되는 레지스터이다. EAX(Extended Accumulator Register) 함수의 리턴 값 저장이나 산술 연산(+, -, *, /)에 이용된다. Win32 API 함수들은 모두 리턴값을 EAX에 저장한 ..
[리버스 엔지니어링] 프로그램 분석전 하면 좋은것들 1. 일단 무작정 파일을 실행 시켜보자. 무작정 실행 시켜보고 프로그램이 겉으로 어떻게 생겼는지 본 다음에 '이 파일은 어떻게 되어있을 것이다' 라고 구조를 생각해보고 나서 리버싱 툴로 열어본다. 2. 디버거로 열었을때 F8 과 F7을 적절히 사용해 가면서 직접 하나하나 눌러보며 어디가 어떻게 변화하는지 본다. F8이나 F7을 천천히 눌러가면서 레지스터, 플래그 값이 바뀌는 이유와 점프 구문에서 어디로, 왜 점프하는지를 보면서 분석한다.(올리, x32-64, 이뮤니티 디버거들에 해당되는 얘기이다.) 3. 모르는 함수가 나오면 무조건 구글에 검색해본다. 검색하지 않으면 파일이 어떻게 작동하는지 모르기 때문이다. 함수를 검색하고 이게 어떤식으로 작동하는지만 알면 풀 수 있는것들이 많게 된다. 마이크로소프트 ..
[리버스 엔지니어링] 스택, 스택프레임 Stack(스택) 메모리의 영역중 하나로써 후입 선출(Last In First Out)의 구조를 가지고 있다. 함수의 호출과 관련있는 지역 변수(Local Variable), 매개변수(Parameter), 복귀 주소(Return address)가 저장되는 영역이다. 스택 영역은 함수의 호출과 동시에 할당되며, 함수의 호출이 완료되면 없어진다. PUSH 명령으로 스택에 값을 추가하고 POP 명령으로 스택에 값을 제거한다. 스택에 맨 윗부분을 TOP 또는 SP(Stack Pointer)라고 부른다. 스택은 높은 주소에서 낮은 주소로 메모리를 사용한다. 스택에 값을 집어넣을때(PUSH) 4바이트 감소하고 스택에서 값을 뺄때(POP) 4바이트 증가한다. Stack Frame(스택 프레임) ESP 레지스터 대신 ..