전체 글

전체 글

    [Reversing] 06. abex'crackme #1 분석

    보호되어 있는 글입니다.

    [Reversing] 05. 스택

    [Reversing] 05. 스택

    1. 스택 프로세스에서 스택 메모리의 역할은 아래와 같다. 함수 내의 로컬 변수 임시 저장 함수 호출 시 파라미터 전달 복귀 주소(return address) 저장 위와 같은 역할을 수행하기에는 스택의 FILO(First In Last Out) 구조가 아주 유용하다. 1.1 스택의 특징 일반적으로 스택 메모리는 그림과 같이 표현한다. 프로세스에서 스택 포인터(ESP)의 초기값은 Stack Bottom쪽에 가깝다. PUSH 명령어에 의해 Stack에 값이 추가되면 스택 포인터는 Stack Top을 향해(위쪽으로) 움직이고, POP 명령어에 의해 스택에서 값이 제거되면 스택 포인터는 Stack Bottom을 향해 (아래쪽으로) 움직인다. 즉 높은 주소에서 낮은 주소 방향으로 스택이 자라난다. 이러한 스택의 ..

    [Reversing] 04. IA-32 Register 기본 설명

    [Reversing] 04. IA-32 Register 기본 설명

    1. CPU 레지스터란? 레지스터란 CPU 내부에 존재하는 다목적 저장 공간이다. CPU가 RAM에 있는 데이터를 액세스하기 위해서는 물리적으로 먼 길을 돌아가야 하기 때문에 시간이 오래 걸린다. 하지만 레지스터는 CPU와 한 몸이기 때문에 고속으로 데이터를 처리할 수 있다. 1.1 레지스터에 대해 알아야 하는 이유 IA-32(Intel Architecture 32비트)에서 제공하는 어셈블리 명령어 어셈블리 명령어의 대부분은 레지스터를 조작하고 그 내용을 검사하기 떄문에 레지스터를 모르면 명령어 자체도 이해하기 힘들다. 2. IA-32의 레지스터 애플리케이션의 디버깅의 초급 단계에서는 Basic program executio register에 대해 알아두어야 한다. 2.1 Basic program exe..

    [Reversing] 03. 리틀 엔디언 표기법

    [Reversing] 03. 리틀 엔디언 표기법

    1. 바이트 오더링 바이트 오더링이란 컴퓨터에서 메모리에 데이터를 저장하는 방식을 의미 바이트 오더링 방식에는 크게 빅 엔디언(Big Endian)과 리틀 엔디언(Litle Endian) 방식이 있다. 총 4개의 (크기가 다른) 자료형은 각 엔디언 방식에 따라서 저장하는 방식이 다르다. Type Name Size 빅 엔디언 리틀 엔디언 BYTE b 1 [12] [12] WORD w 2 [12][34] [34][12] DWORD dw 4 [12][34][56][78] [78][56][34][12] char [] str 6 [61][62][63][64][65][00] [61][62][63][64][65][00] 📌 ASCII 문자 'a'는 0x61과 같고, 'e'는 0x65와 같다. 그리고 문자열 마지막은 ..

    [Reversing] OllyDbg 기초 사용법

    [Reversing] OllyDbg 기초 사용법

    디버거 동작 명령(Code Window에서 동작함) 명령어 단축키 설명 Go to Ctrl+G 원하는 주소로 이동(코드/메모리를 확인할 때 사용, 실행되는 것은 아님) Execute till Cursor F4 커서 위치까지 실행(디버깅하고 싶은 주소까지 바로 갈 수 있음) Comment ; comment 추가 User-defined commnet 마우스 우측 메뉴 Label : 라벨 추가 User-defined label 마우스 우측 메뉴 Set/Reset Breakpoint F2 BP 설정/해제 Run F9 실행(BP가 걸려있으면 그곳에서 정지됨) Show the currnet EIP * 현재 EIP 위치를 보여줌 Show the previous Cursor - 직전 커서 위치를 다시 보여줌 Previ..