Hack/Reversing
-
Stack POPHack/Reversing 2015. 2. 9. 15:58
POP은 실제 스택내 저장된값을 꺼내올떄 사용되는 명령이다.꺼내올떄 스택 포인터는 반드시 가장 나중에 추가된 값부터 추출해야한다. 예를들어 A, B, C, D, E를 차례대로 넣었다고 치면 SP는 E를 가리킨다.제일 마지막에 저장된것이 E이기 때문에 E를 먼저 꺼내고 SP는 다시 D를 가리키게된다. POP의 특징 1.데이터항목을 삭제할때 스택의 꼭대기부터 하나하나 제거하고 SP를 하나씩 감소시킨다. 2.데이터항목을 삭제하기전에 스택이 비어있는지 검사해야한다. 3.만일 스택이 비어있는지 점검하지않으면 Segment fault가 발생한다.
-
Stack Full CheckingHack/Reversing 2015. 2. 9. 15:56
Stack Full Checking -스택포인터에 의해 push 명령이 실행될때 반드시 선언된 배열의 최대값을 점검해야하는데, 이 점검하는 요소가 Full Checking이다. 점검하지않으면 stack한계를 고려하지않고 push하기때문에 segment fault가 발생한다. 특징 1. 스택이 데이터로 가득차면 새로운 데이터 항목을 삽입할수 없다. 2. 데이터 항목 삽입전에는 먼저 스택포인터가 스택의 한계에 도달해있는지 검사해야한다. 3. 만일 스택포인터가 스택의 한계를 검사하지못하면 BOF가 발생한다.
-
메모리 구조 (data)Hack/Reversing 2015. 2. 9. 15:42
이 영역은 프로그램에서 각종변수를 모아두는 지역으로 DS 레지스터와 연결하여 변수 포인터를 지정하고 통제할수있다. DATA 영역의 특징은 아래와같다 1. 초기화 되었거나 되어있지않은 변수들을 저장한다. 2. 정적 유형의 변수들이나 문자열들이 이 영역에 저장되고, 코드영역에 존재하는 각종 실행명령어들이 이 영역과 함께 사용된다. 3.유닉스 시스템에서 초기 시스템콜(0x80)에 의해 크기가 조정될수있다. 4. 메모리가 소진되면 프로세스는 다시 스케줄링 되어 더 큰 영역의 메모리를 할당받게된다.이때 새로운메모리가 데이터영역과 스택 영역사이를 자동으로 삽입하게되어있다.
-
PE Header(4)Hack/Reversing 2015. 2. 2. 04:28
IMAGE_OPTIONAL_HEADER 1. Magic 해당 멤버는 IMAGE_OPTIONAL_HEADER32인경우 10Bh, IMAGE_OPTIONAL_HEADER64인경우 20Bh값을 가지고있다. 2.AddressOfEntryPoint EP(EntryPoint)의 RVA 값 3.ImageBase 프로세스의 가상메모리 범위는 32비트의 경우 0~FFFFFFFF까지이다. ImageBase는 pe파일이 로딩되는 시작주소를 나타낸다.EXE,DLL일경우 user memory영역인 0~7FFFFFFF범위를 가지고,SYS파일일경우 kernel memory영역인 80000000 ~ FFFFFFFF범위를 가진다. 비쥬얼스튜디오나 VC++등의 컴파일러를통해 EXE를만들면 ImageBase는 400000값을가진다DLL일..
-
PE Header(3)Hack/Reversing 2015. 2. 2. 03:44
NT Header IMAGE_NT_HEADER이다. IMAGE_NT_HEADERS구조체다. 4바이트만큼의 Signature라는 멤버가있는데 해당 멤버는 PE 시그니처를 나타낸다. EXE의 경우 PE 라는 문구를 볼수있는데 PE 헤더의 핵심이다. 004550이 Signature부분이다. IMAGE_NT_HEADERS의 구조체 크기는 F8h 이다. 멤버에 보면 IMAGE_FILE_HEADER와 OPTIONAL_HEADER32가있는데 딱보면 32비트용이라는것을 볼수있다. 64비트에는 IMAGE_OPTIONAL_HEADER64가 따로존재한다. IMAGE_FILE_HEADER구조체이다. 1. Machine 해당 멤버는 CPU의 고유한값이다. 32 bit intel일경우 014C라는 값을 가진다.(ARM: 01c0..