Background: Calling Convention # 서론 1. 함수 호출 규약 함수 호출 규약: 함수의 호출 및 반환에 대한 약속 한 함수에서 다른 함수를 호출할 때, 프로그램 실행 흐름은 다른 함수로 이동함 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나감 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack Frame) 및 반환 주소(Return Address)를 지정해야 함 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 함 2. 함수 호출 규약 종류 컴파일러는 지원하는 호출 규약 중, CPU 아키텍처에 적합한 것을 선택함 x86(32bit) 아키텍처는 레지스터를 ..
Tool: pwntools # 서론 1. pwntools의 등장 배경 - 파이썬으로 페이로드를 생성하고, 파이프(|)를 통해 이를 프로그램에 전달할 수 있음 - 그러나 익스플로잇이 조금만 복잡해져도 위와 같은 방식은 사용하기 어려워짐 - 그래서 해커들은 펄, 파이썬, C언어 등으로 익스플로잇 스크립트, 또는 바이너리를 제작하여 사용함 - 파이썬으로 여러 개의 익스플로잇 스크립트를 작성하다 보면 자주 사용하게 되는 함수들이 있는데, 이런 함수들을 반복적으로 구현하는 것은 비효율적임 - 그래서 시스템 해커들은 이들을 모아 pwntools라는 파이썬 모듈을 제작함 > 이제는 익스플로잇의 대부분이 pwntools를 이용하여 제작 및 공유됨 2. pwntools 설치 - pwntools는 깃헙에 오픈 소스로 공개..
x86 Assembly🤖: Essential Part(2) # 서론 - 운영체제의 핵심 자료구조인 스택, C언어의 함수에 대응되는 프로시저, 그리고 시스템 해킹의 관점에서 매우 중요한 시스템콜과 관련된 어셈블리를 배움 스택: push, pop 프로시저: call, leave, ret 시스템콜: syscall # x86-64 어셈블리 명령어 1. Opcode: 스택 🧱 - x64 아키텍처에서는 다음의 명령어로 스택을 조작할 수 있음 push val // val을 스택 최상단에 쌓음 스택은 확장 될 때 기존 주소보다 낮은 주소로 확장되기 때문에 아래로 자람 pop reg // 스택 최상단의 값을 꺼내서 reg에 대입 2. Opcode: 프로시저 📜 - 프로시저(Procedure): 특정 기능을 수행하는 코드..