dreamhack

    [Dreamhack-System] Return to Library WriteUp

    보호되어 있는 글입니다.

    [Dreamhack-System] Return to Shellcode WriteUp

    보호되어 있는 글입니다.

    [Dreamhack-System] basic_exploitation_001 WriteUp

    보호되어 있는 글입니다.

    [Dreamhack-System] Return Address Overwrite WriteUp

    보호되어 있는 글입니다.

    [Dreamhack] Memory Corruption: Stack Buffer Overflow 정리

    [Dreamhack] Memory Corruption: Stack Buffer Overflow 정리

    먼저 스택 오버플로우와 스택 버퍼 오버플로우의 차이점. 스택 오버 플로우는 스택 영역이 너무 많이 확장돼서 발생하는 버그를 뜻하며, 스택 버퍼 오버플로우는 스택에 위치하 버퍼에 버퍼의 크기보다 많은 데이터가 입력되어 발생하는 버그를 뜻한다. 스택 버퍼 오버플로우 스택의 버퍼에서 발생하는 오버플로우를 뜻한다. 버퍼(Buffer)란? 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소이다. 데이터의 처리속도가 다른 두 장치가 있을 때, 둘 사이에 오가는 데이터를 임시로 저장해 두는 것은 일종의 완충 작용을 한다. 예시로 키보드 입력보다 데이터 처리 속도가 더 느릴경우 데이터가 유실 될 수 있수 있어, 수신 송신 측 사이에 버퍼라는 임시 저장소를 두고 간접적으로 데이터를 전달한다. 빠른 속도로 이동하던 데이..

    [Dreamhack] Calling Convention 정리

    함수 호출 규약 함수의 호출 및 반환에 대한 약속. 함수의 흐름에 따라서, 함수를 호출하면 함수로 이동하고, 반환하면, 다시 원래 함수로 돌아가는 흐름을 보인다. 그래서 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 한다. 그리고 호출자는 피호출자(Callee)가 요구하는 인자를 전달 해줘야하고, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. 일반적으로 컴파일러가 호출 규약에 맞게코드를 컴파일한다. 컴파일러는 CPU의 아키텍터에 적합한 호출규약을 선택한다. 하지만, 컴파일러의 도움 없이 어셈블릴 코드를 작성하려 하거나, 어셈블리로 작성된 코드를 읽으려면 함수 호출 규약을 알아야 한다. 함수 호출..

    [Dreamhack-System] Shell_basic WriteUp

    보호되어 있는 글입니다.

    [Dreamhack] x86 Assembly (2) 정리

    자료구조인 스택, C언어의 함수에 대응되는 프로시저, 시스템콜에 관한 어셈블리 내용이다. 스택 push val : val을 스택 최상단에 쌓음 pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 프로시저 Procedure는 특정 기능을 수행하는 코드 조각을 말한다. 프로시저를 사용하면 반복되는 연산을 프로시저 호출로 대체할 수 있는 장점이 있다. 그리고 기능별로 코드 조각에 이름을 붙여 가독성을 높일 수 있다. 프로시저를 부르는 행위를 호출(Call)이라고 하고, 돌아오는 것을 반환(Return)이라 한다. 프로시저를 실행 하고 나서 원래 실행 흐름으로 돌아와야 하므로 call 다음의 명령어 주소 즉, 반환 주소(return address)를 스택에 저장하고 프로시저로 rip를 이동시킨다. cal..

    [Dreamhack] x86 Assembly (1) 정리

    어셈블리 언어와 어셈블러가 있다. 어셈블러는 어셈블리어 코드를 컴퓨터가 이해할 수 있는 기계어로 코드를 치환해준다. 소프트웨어를 역분석 하기위해, 기계어를 어셈블리 언어로 번역하는 역어셈블러(Disassembler)를 개발했다. 어셈블리 언어는 아키텍처마다 여러 종류가 있다. x64 어셈블리 언어의 기본 구조 구조는 명령어 즉, Operation Code(Opcode)와 피연산자(Operand)로 구성 된다. mov eax, 3 mov는 opcode로 대입하라. eax와 3은 각각 operand1, operand2를 나타낸다. operand1에 operand2를 대입하라는 문장이다. 명령코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add,..

    [Dreamhack] Computer Architecture 정리

    컴퓨터 구조와 명령어 집합구조, 인텔의 x86-64에 대한 내용 정리이다. 컴퓨터 구조 중에서 CPU가 사용하는 명령어와 관련된 설계를 명령어 집합구조(Instruction Set Architecture)라고 한다. 가장 널리 사용하는 ISA 중 하나가 인텔의 x86-64 아키텍처이다. 컴퓨터 구조와 명령어 집합 구조 Computer Architecture란 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법이다. 컴퓨터 구조는 컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. 컴퓨터의 기능구조에 대한 설계란 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에..