전체 보기
[OS 개발] 1일차: 세팅 및 skeleton 작성하기
개요 커널 공부만 하고 있다가 C언어 실력도 같이 늘려야겠다고 생각해서 미니 플젝할까 생각했지만 그냥 제대로 해보려고 「임베디드 OS 개발 프로젝트」(이민우 저) 책 가지고 OS를 만들어보려고 합니다. 중간에 끊어지지 않게(제발ㅎㅎ) 해보겠습니다. 자세한 설명은 많이 하지 않을 예정입니다. 중요하거나 상기시키고 싶은 부분은 하겠지만 기본적으로 설명은 책에 있는 것을 봐주시기 바랍니다. Setting 1. 윈도우에 WSL 2 설치하고 리눅스 세팅 - Ubuntu 20.04 2. 컴파일러 설치 - gcc-arm-none-eabi (명령어로는 arm-none-eabi-gcc) 3. QEMU 설치 - qemu-system-arm qemu-system-arm -M ? 으로 사용 가능한 머신 확인. ARM 사의 A..
[Linux Kernel] alloc_thread_stack_node() 함수 분석
'디버깅을 통해 배우는 리눅스 커널의 구조와 원리' 책을 읽으면서 정리를 하다가 한 가지 코드 상의 차이를 발견했다. 커널 버전은 책에 나온 대로 v4.19다. 개요 프로세스가 새로 생성될 때 불리는 _do_fork() 함수 내 copy_process() 함수에서 일어나는 동작 중 하나로 프로세스가 이용할 스택을 할당하는 게 있다. 태스크 디스크립터 생성하고 slab cache에서 스택 공간 할당받는 함수인 alloc_thread_stack_node() 함수가 있는데 책에 있는 코드와 구현 상의 차이가 있길래 초보자 입장에서는 흥미롭게 다가왔다. Before static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, int node) {..
[Linux Kernel] 공부에 도움되는 사이트 / 책 / 블로그
LAST UPDATE: 2022.01.28 SITE 1. 커널 연구회 커뮤니티 (https://kernel.bz/) 커널연구회 커뮤니티/기술교육/쇼핑몰/협동프로젝트 커널연구회는 리눅스 커널과 디바이스드라이버를 연구하고 머신러닝 및 지능형로봇 관련 프로젝트를 수행하면서 관련 내용들을 공유하고 있습니다. kernel.bz 커널의 기초에 대한 설명이 잘 나와있다. 계단을 올라가려 할 때 어떻게 생긴 계단인지 살펴보는 단계 정도라고 생각하면 될 것 같다. '리눅스커널' 탭에 나온 내용들로 아쉽다면 이 연구회에서 출간한 책도 있다. 읽어보진 않아 평을 할 수는 없지만 정말 아무것도 모르는 사람이라면 접해보는 데에 무리는 없을 것 같다. 2. ★ Kernel of Linux (https://olc.kr/course..
[reversing.kr] Music Player
File Format : WINDOWS 32-bit 파일 내에 README.txt를 살펴보면 음악 파일의 길이가 1분인지 체크하는 루틴이 있다고 한다. 모든 체크 루틴을 우회하면 플레그를 볼 수 있다고 한다. 🧭 Execute & Analyze 실행하고 아무 음악이나 넣은 상태에서 1분까지 가면 다음과 같은 창이 뜬다. 처음 시작을 저 창이 뜨지 않게 우회하는 것으로 시작해보자. Step 1. Remove the pop-up window 사용하는 string 중에 "1분 미리듣기"가 포함된 것을 찾고 근처 어셈블리어로 가본다. rtcMsgBox 함수가 해당 창을 띄워주고 있다는 걸 알 수 있다. 이제 해당 분기로 점프하는 곳이 어딘지 찾아야 한다. 조금 위를 보다 보면... 하이라이트 된 부분(00404..
[reversing.kr] Replace
File Format : WINDOWS 32-bit 이전부터 리버싱 제대로 파일 분석해보고 싶었지만 그 시점에 딱 군대 오는 바람에 접었던 리버싱 다시 시작하려 한다. 안 그래도 큰 바이너리 분석 위해서는 조금씩 조작된 바이너리 보면서 익숙해진 다음 도전해보고 싶다는 생각은 가지고 있었다. 이번 문제부터 리버싱 계속 연습해보자. 🏒 Analyzing Dynamic Analysis 뭔가를 입력할 수 있다. 참고로 문자는 안되고 only 숫자만 된다. 문제는 입력하고 나서 check 버튼을 누르면 그대로 꺼진다. 루틴 분석해서 어떻게 동작하는지 보도록 하자. Static Analysis 먼저 에러나는 부분부터 어딘지 확인해봤다. 0x40466F 주소에서 넘어가질 않는다. [eax] = 0x90 을 하려고 하..
[reversing.kr] Easy ELF
File Format : LINUX 말 그대로 쉬운 ELF 파일 분석이다. 🏒 Execute Dynamic Analysis 딱히 실행하지 않아도 된다. Static Analysis 함수 이름은 내부 루틴에 따라 조금 변경시켰다. scanf() 함수는 내부에서 scanf("%s", &input)를 호출한다. input은 전역 변수다. input 다음에도 여러 전역 변수들이 char형으로 선언되어 있다. scanf에서 %s로 받으니 five까지 입력이 충분히 가능하다. 이제 check() 함수에서는 어떻게 검증하고 있는지 확인해본다. 이 함수에서 return 값으로 1이 나와야 flag를 얻을 수 있을 것 같다. 그냥 루틴대로 그대로 적거나 xor 해서 char로 바꿔보면 flag가 뭔지 바로 알 수 있다...
[FwordCTF 2021] Blacklist Revenge + 후기
FwordCTF 2021에 참여하게 되었다. To-Do List에 있는 목표 중 하나 달성해볼까라는 마인드로 참여해봤다. 얼마나 풀 수 있을까 고민됐지만 시간 내 2문제 그리고 아래에서 설명할 문제, 해서 pwn에서는 총 3문제 풀었다. 문제 풀이 환경 : Ubuntu 20.04 Note에 적혀있는 말 보면 사용자가 입력에 대한 리턴을 받을 수 없다는 말로 해석된다. 그래서 구글링 결과 리버싱 쉘(reversing shell)을 이용해야 한다는 결론을 얻었다. 📝 Analysis Mitigation & File Spec mitigation은 별거 없는데, 무려 static 파일이다. Code · main init_0()과 vuln() 함수로 이루어진 간단한 main이다. · init_0 대충 seccom..
[Git] How to use?
git이란 소스코드의 버전을 관리하기 위한 시스템이다. 컴퓨터 업계에 종사하는 이라면 거의 필수로 알아야 할 도구다. 이전부터 대충 사용하고는 있었지만 앞으로 있을 개인 프로젝트를 위해 이번 기회를 통해 마스터해보려 한다. 사용 방법들은 정리해놓은 많은 사이트들이 있으므로 생략하고, 필자가 공부하는 데에 도움받은 사이트들을 소개한다. 도움받은 사이트들: https://learngitbranching.js.org/?locale=ko Learn Git Branching An interactive Git visualization tool to educate and challenge! learngitbranching.js.org - 직접 실습 가능 https://backlog.com/git-tutorial/kr..