본문 바로가기

네이버 블로그 글 이전

(4)
OllyDbg 디버거 명령어 디버거 동장 명령(Code Window에서 동작함) 명령어 단축키 설명 Restart Ctrl+F2 다시 처음부터 디버깅 시작(디버깅을 당하는 프로세스를 종료하고 재실행) Step Into F7 하나의 OP code 실행 (Call 명령을 만나면, 그 함수 코드 내부로 따라 들어감) Step Over F8 하나의 OP code 실행(Call 명령을 만나면, 따라가지 않고 그냥 함수 자체를 실행) Execute till Return Ctrl+F9 함수 코드 내에서 RETN 명령어까지 실행(함수 탈출 목적) Go to Ctrl+G 원하는 주소로 이동(코드/메모리를 확인할 때 사용. 실행되는 것은 아님) Execute till Cursor F4 cursor 위치까지 실행(디버깅하고 싶은 주소까지 바로 갈 수 ..
IA-32 Register 기본 Basic Program Execution registers ​ 1)범용 레지스터 범용 레지스터들의 크기는 32비트이며 보통은 상수/주소등을 저장할 때 주로 사용된다. 특정 어셈블리 명령어에서는 특정 레지스터를 조작하기도 한다. ​ EAX : 주소 산술연산(ADD,SUB,XOR,OR 등) 명령어에서 상수/변수 값의 저장 용도로 많이 사용된다. 함수의 반환값을 저장한다. EBX : ESI나 EDI와 결합해 인덱스에 사용된다. ECX: 반복 명령어를 사용할 때 반복 카운터를 저장한다. EDX: EAX와 같이 사용되며 부호 확장 명령 등에 활용된다. ​ 밑의 4개는 주로 메모리 주소를 저장하는 포인터로 사용된다. EBP: 하나의 스택 프레임의 시작 주소가 저장된다. 현대 사용되는 스택 프레임이 살아있는 동안 ..
바이트 오더링 바이트 오더링이란 데이터를 저장하는 방식을 말합니다. 크게 두 가지가 있습니다. 빅 엔디언(Big Endian)과 리트엔디언 (Little Endian)방식입니다. ​ 빅엡니던 방식은 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장하지만 리틀 엔디언 방식은 데이터를 저장할 때 역순으로 저장합니다. 즉 저장되는 바이트의 순서가 뒤집어져있습니다. 그러나 리트 엔디언일지라도 바이트 자체는 정상적인 순서로 저장이됩니다. 오로지 2바이트 혹은 4바이트 자료형과 멀티바이트인 경우 각 바이트가 역순으로 저장되는 것입니다. *str 문자열은 엔디언 형식에 상관없이 동일 TYPE Name SIZE 빅 엔디언 리틀 엔디언ㅠ BYTE b 1 [12] [12] WORD w 2 [12][34] [34][12] DWORD..
스택 프로세스에서 스택 메모리의 역할 ​ 1. 함수 내의 로컬 변수 임시 저장 2. 함수 호출 시 파라미터 전달 3. 복귀 주소(return address)저장 ​ (출처. 리버싱 핵심원리) ​ 프로세스에서 스택포인터(ESP)의 초기값은 Stack Bottom 쪽에 가깝습니다. PUSH 명령에 의해서 Stack에 값이 추가되면 Stack Top을 향해 움직이고, POP 명령에의해 스택에서 값이 제거되면 스택 포인터는 Stack Bottom 을 향해 아래쪽으로 움직입니다.\ 중요! 스택은 높은 주소에서 낮은 주소 방향으로 자라난다!! ​ 예제 !) ​ ESP=12FF8C PUSH 100 명령 실행 -----------------------------------------------ESP의 값 4바이트만큼 감소 ..