본문 바로가기

전체 글

(8)
[리버싱핵심원리] 스택프레임 스택 프레임이란 ESP(스택 포인터)가 아닌 EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다. 스택 프레임의 구조 스택 프레임을 이용해서 함수 호출을관리하면, 아무리 함수호출 depth가 깊고 복잡해져도스택을완벽하게 관리할수 있습니다. StackFrame.cpp 파일을 열어 코드를 살펴보겠습니다. 코드를 살펴보면 간단한 두 정수의 덧셈 결과를 반환하는 함수를 만들어 호출하고 그 결과를 출력하는 함수입니다. Ollydbg 실습 Ollydbg에서 StackFrame.exe 파일을 열고 Go to 명령으로 401020주소로 갑니다. 401020주소에 Break Point를 걸고(F2) 실행(F9)해보면서 스택의 변화를 살펴보겠습니다. 먼저 pus..
[리버싱핵심원리] abex' crackme 우선 코드 파악을 위해 Ollydbg에서 코드를 실행해 보았더니 순서대로 창이 뜹니다. Ollydbg 에서 파일의 디스어셈 코드를 살펴보겠습니다. Entry Point에 main함수가 바로 나타나는 것을 보면 어셈블리 언어로 개발되었다는 것을 알 수 있습니다. 본격적으로 코드를 분석하기 전에 기본적인 명령어를 정리해봤습니다. 명령어 설명 PUSH 스택에 값을 입력 CALL 지정된 주소의 함수를 호출 INC 값을 1 증가 DEC 값을 1 감소 JMP 지정된 주소로 점프 CMP 주어진 두개의 operand 비교 JE 조건 분기(Jump if equal)
[리버싱핵심원리] 스택 스택이란 로컬 변수 저장, 함수 파라미터 전달, 복귀 주소 저장 등의 다양한 용도로 사용됩니다. 프로세스에서 스택 메모리의 역할 함수 내의 로컬 변수 임시 저장 함수 호출 시 파라미터 전달 복귀 주소 저장 스택의 특징 스택 포인터(ESP)의 초기 값은 Stack botton쪽에 가깝습니다. PUSH 명령을 하면 Stack에 값이 추가되면서 Stack Top(위쪽)으로 움직이고, POP 명령을 하면 Stack 값이 제거되면서 Stack bottom(아래쪽)으로 움직입니다. Ollydbg 실습 (”리버싱 핵심원리” 저자의 블로그에서 stack.exe라는 파일을 받아서 ollydbg로 열어봤습니다.) 위 화면은 초기 상태의 스택입니다. 스택 포인터(ESP)의 값은 19FF74이고, 스택 창에서 19FF74가 ..
5/10 서버구축 cmd 창에서 nslookup naver.com 쳐보면 네이버의 ip주소들을 알수 있다. 223.130.200.104 223.130.195.95 223.130.1952.200 223.130.200.107 [서버구축 공식] 1. 패키지 설치 2. 방화벽 3. 데몬 실행 aot-get update - 업데이트 하는 명령어 apt-get install [패키지 이름] - 패키지 설치 명령어 dpkg -l | grep apache2 ufw allow port 번호 ufw allow service service apache2 start/restart/stop 웹서버 시작/재시작/중지 멧 ex) apt-get install apache2 ufw allow port 이름 fuw allow service netstat..
[리버싱핵심원리] 리틀 엔디언 표기법 컴퓨터에서 메모리에 데이터를 저장하는 방식을 의미하는 비이트 오더링(Byte Ordering)에는 리틀 엔디언 표기법과 빅 엔디언 표기법이 있다. 바이트 오더링 TYPE Name SIZE 빅 엔디언 Style 리틀 엔디언 Style 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] 빅 엔디언과 리틀 엔디언의 차이점 BYTE B변수를 저장 할 때는 두 방식의 차이가 없습니다. (2BYTE 이상부터 차이가 있음) 빅 엔디언은 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장하고,..
레지스터 이해 레지스터란? 레지스터는 CPU가 요청을 처리하는데 필요한 데이터를 "일시적으로" 저장하는 공간이다. CPU 처리를 위해 데이터를 레지스터라는 기억 공간에 저장해두었다가 CPU에서 처리를 하고 해당 결과값 역시 레지스터에 저장하게 된다. 레지스터의 종류 1. 범용 레지스터 범용 레지스터는 작은 데이터의 임시 저장 공간이며 연산 처리 및 번지 지정을 도와주고 컴퓨터의 장치들을 제어한다. 8개의 레지스터로 구성되며, 산술/논리 연산, 오퍼랜드(피연산자)를 저장하거나 포인터 역할함(메모리 주소 저장) EAX(Accumulator) : 곱셈과 나눗셈 명령에서 자동으로 사용, 함수의 리턴 값이 저장(누적 연산기). 32비트인 EAX의 오른쪽 16비트 부분이다. AX 도 두 영역으로 구분되는데 왼쪽 8비트 상위(Hi..
5/3 OverTheWire Bandit Level 0 → 5 초기 설정 처음 PuTTY를 실행 시키고 Hostname에 bandit.labs.overthewire.org, Port에 2220를 입력하고 Open하면Bandit 서버로 들어갈 수 있습니다. Bandit Level 0 https://overthewire.org/wargames/bandit/bandit0.html user id는 bandit0, password는 bandit0입니다. password는 보안상의 이유로 표시되지 않습니다. (user id와 password는 bandit0 링크에 나와있습니다.) Bandit Level 0 → Level 1 https://overthewire.org/wargames/bandit/bandit1.html pwd로 현재 위치를 확인하고 ls -l로 bandit0의 ..
리눅스 멘토링 1 4/5 리눅스 멘토링 수업 내용 SCP 리눅스 멘토링 pwd : 현재 위치 ls : 목록 보기 ls -l : 자세히 목록 보기 파일 디렉토리(=폴더) #절대 경로, 상대 경로 절대 경로 : / 장점 : 내 현재위치 상관없음 단점 : 모든 경로를 다 써줘야함 기준이 최상위 ex) cd /floppy/cdrom 상대 경로 : ./ ../ ./ : 현재 위치 ../ : 이전 위치 기준이 현재 위치 mkdir(make directory) : 디렉토리 생성 mkdir [경로] 파일명 cp(copy) cp의 단점 : 같은 파일명 중복 복사 x ex) cp home/study/Dockerfile /home/study/docker (절대경로) cp ./Dockerfile ./docker (상대경로) ㄴ현재 경로에 있는..