목록Hacking/DreamHack 시스템 해킹 강의 (13)
미역줄기의 이모저모
Opcode: 스택 push val: val을 스택 최상단에 쌓음 #예제 [Register] rsp = 0x7fffffffc400 [Stack] 0x7fffffffc400 | 0x0
어셈블리 언어 컴퓨터의 기계어와 치환되는 언어이다. 기계어의 종류만큼 어셈블리어의 종류도 존재한다. x64 어셈블리 언어 기본구조 동사에 해당하는 명령어와 목적어에 해당하는 피연산자로 구성된다. movr4, r0 해석: r4에 r0를 대입해라! ( r4,r0는 레지스터이다 ) 그럼 여기서 명령어는 뭘까? 바로 mov이다. 피연산자는? r4, r0이다~ 명령어 명령코드 데이터 이동 mov, lea 산술 연산 inc, dec, add, sub 논리 연산 and, or, xor, not 비교 cmp, test 분기 jmp, je, jp 스택 push, pop 프로시져 call, ret, leave 시스템 콜 syscall 피연산자 상수 레지스터 메모리 이렇게 세 가지의 종류가 있다. ( 좀 전의 예시에도 레지..

리눅스 프로세스의 메모리 구조 세그먼트(Segment) 세그먼트란 적재되는 데이터의 용도별 메모리의 구획이다. 리눅스에선 프로세스의 메모리를 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트 이렇게 5개로 구분한다. 각 용도에 맞게 권한을 부여할 수 있다. 그럼 CPU는 메모리에 대해 권한이 부여된 행위를 한다. 코드 세그먼트 실행 가능한 기계 코드가 위치하는 영역이다. 텍스트 세그먼트라고도 불린다, 읽기와 실행 권한이 부여된다. 쓰기권한이 없는 이유는 공격자가 악의적인 코드를 삽입하는 것을 막기 위해서이다. int main() { return 31337; } 31337을 반환하는 main함수가 컴파일 되면 31337은 기계코드로 변환되고 이것은 코드 세그먼트에 위치한다. ..
Background: Computer Architecture 서론 CPU가 사용하는 명령어와 관련된 설계를 명령어 집합구소(Instruction Set Architecture, ISA)라고 한다. 그 중 가장 널리 사용되는 ISA 중 하나가 x86-64 아키텍쳐이다. 컴퓨터 구조 💻 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법이다. 컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. 컴퓨터의 기능 구조에 대한 설계 명령어 집합구조 마이크로 아키텍처 하드웨어 및 컴퓨터 방법론 효율적인 연산을 위한 기능을 설계하는 분야 폰 노이만 구조 하버드 구조 수정된 하버드 구조 CPU..

강의 세션을 시작하자마자 문제 코드가 나를 반겨줬다 ^^.. 아래의 두 코드를 읽고 "welcome Hackers :)"가 출력되는 입력값을 찾으세요. #include #include #include int main() { int sz = 0x30; char *buf = (char *)malloc(sizeof(char) * sz); puts("Hello World!"); printf("Education + Hack = ?\\n"); fgets(buf, sz, stdin); if (!strncmp(buf, "DreamHack", 9)) printf("Welcome Hackers :)\\n"); else printf("No No :/n"); return 0; } 훔.. fgets(buf, sz, stdin)..