분류 전체보기 94

리버싱 4차시 과제

prob1 main 함수가 보인다. main 함수를 확인해보았다. sub으로 스택을 확장하고 rbp-0x8에 fs:0x28을 넣는다. 이게 스택 카나리다. 마지막에 fs:0x28과 rbp-0x8을 비교하는 것을 볼 수 있다. main+28에 puts를 호출한다. edi에 0x4007d4가 들어간다. 0x4007d4가 문자열이라고 추측할 수 있다. __isoc99_scanf@plt는 scanf의 plt를 말한다. 이 plt가 libc의 scanf의 실제 주소를 가리키는 got를 가리킨다. edi는 아마 포맷 스트링이 될 것이고, rbp-0xc는 저장되는 위치를 말할 것이라고 예측할 수 있다. 그리고 cmp를 통해서 rbp-0xc부터 4바이트와 0xdeadbeef와 비교한다. 다르면 끝내고 아니면 flag ..

POSIX 7월

실적 : X 공부한 내용 : Kernel of Linux Dreamhack Kernel of Linux Introduction - https://msh1307.tistory.com/57 Kern Koh Kernel of Linux Introduction 정리 What is an Operating System? user와 computer hardware 사이에서 intermediary 역할을 해주는 program이다. Operating System의 goals: - user program Execution - 문제 해결 쉽게 - computer system을 사용하.. msh1307.tistory.com System call - https://msh1307.tistory.com/58 Kern Koh Ker..

리버싱 3차시 과제

x86 VS x64 x86은 x86 계열 32비트 CPU(Intel, AMD)의 ISA이다. x86_32라고 부르는 것을 더 많이 본 것 같다. x64는 Intel이나 AMD 같은 x86 계열 64bit CPU들이 사용하는 ISA(Instruction Set Architecture)를 말한다. x64를 x86의 64비트 버전이라고 해서 x86_64라고도 많이 부른다. 기본적으로 x64는 x86을 지원한다. x64, x86 registers 레지스터는 되게 많다. 그런데 범용 레지스터(General Purpose Register)만 살펴보겠다. 그 이유는 사용자가 직접 사용할 수 있는 몇 안 되는 레지스터이기 때문이다. 실제로 디버깅할때도 거의 범용 레지스터만 본다. 가끔 eflags도 본다. cs, ss..

stdin, stdout, stderr bss segment 할당 및 _IO_FILE

1 int setvbuf(FILE *stream, char *buf, int type, size_t size); cs setvbuf 함수이다. FILE 구조체의 포인터, 사용자가 임의로 할당할 버퍼의 주소, 버퍼링 모드, 사이즈를 차례대로 받는다. 1 2 3 4 5 6 #include int main(){ setvbuf(stdout, 0, _IONBF, 0); printf("HI\n"); } cs CTF에서 주로 입력을 안 꼬이도록 하려고 stdin을 _IONBF로 설정하는 경우도 있다. stdout은 기본적으로 line buffering이지만 여기선 일부러 stdout을 setvbuf로 버퍼링 사용을 안 하도록 했다. 그래서 임시 버퍼가 heap에 할당되지 않는다. 명시적으로 stdout을 사용해서 s..

SYSTEM HACKING 2022.07.22

Kern Koh Kernel of Linux Scheduling 정리

Linux에서는 기본적으로 우선순위가 제일 높은애가 돌아감 근데 timeslice가 남아있는지도 고려함 timeslice 남았을때 preempted task가됨 ready 상태일때 나중에 remaining timeslice를 쓸 수 있음 20ms를 쓰다가 CPU가 다른 더 중요한 task한테 뺏기면 나중에 그 중요한 task가 끝나고 다시 80ms의 remaining timeslice를 쓸 수 있음 그래서 linux에서 CPU를 차지하려면 우선순위도 높아야되고 remaining timeslice가 0이 아니여야됨 timeslice다 쓰면 다른 tasks가 timeslice 다 쓸때까지 기다리고 우선순위에 기반해서 스케쥴링됨 Scheduling Algorithm Ready Queue라는 하나의 리스트에 P..

OS, Kernel 2022.07.20

리버싱 2차시 과제

리버싱이란? 리버싱 : Reverse engineering의 약자로 역공학이라는 뜻이다. 바이너리의 구조, 기능, 동작을 분석한다. 크게 두 가지 방법이 존재한다. 정적 분석 : 파일을 실행하지 않고 파일 종류, 헤더, 디스어셈블러, 디컴파일러로 코드를 분석 동적 분석 : 파일을 실행하면서 코드 흐름과 메모리 상태 등을 보면서 분석 gcc 사용 코드를 작성하고 조금 옵션을 줘서 컴파일을 해보겠다. layer7.c는 원본 소스코드 파일이다. layer7.i는 전처리된 소스코드 파일이다. layer7.s는 어셈블리어 파일이다. layer7.o는 어셈블러에 의해 기계어로 변환된 파일이다. layer7은 layer7.o가 링커가 링킹을 하고나서 나온 최종적인 바이너리 파일이다. 빌드는 이 전처리기, 컴파일러, ..

Kern Koh Kernel of Linux Process Management 정리

커널은 하드웨어을 관리해야 됨 또한 프로그램들이 잘 돌아갈 수 있도록 잘 받쳐줘야 함 하드웨어 관리를 위해 metadata를 가지는 내부적인 자료구조?를 가지고 있음 - ex) disk 같은 경우엔 어떤 섹터가 놀고 있는지에 대한 정보 프로세스 관리를 위한 데이터 구조인 PCB(Process Control Block)도 있음 PCB(Process Control Block) PCB가 가져야 하는 metadata의 집합 프로그램을 돌리다 예를 들어 disk에 대한 I/O 작업을 해달라 하면 disk wait queue에 들어가고 I/O가 끝났을 때 상태를 표시하기 위한 Status가 있음 I/O가 끝나서 CPU의 처리가 필요하면 ready queue라는 리스트에 들어감 process가 I/O 작업이 필요하면..

OS, Kernel 2022.07.19

Kern Koh Kernel of Linux Introduction 정리

What is an Operating System? 유저랑 컴퓨터 하드웨어 사이에서 중개자? 역할을 해주는 프로그램이다. Operating System의 목표: - user program 실행 - 문제를 쉽게 해결하기 위해서 - 컴퓨터 시스템을 잘 사용하기 위해서 - 하드웨어를 효율적으로 사용하기 위해서 Performance - Throughput : 처리량 --- jobs / sec - Utilization : CPU를 바쁘게 유지하는 것 --- % of time busy - Response time : 첫번째 Response 나오는데 걸린 시간 --- sec / job Kernel - Memory 상주 - 대부분은 C로 작성됨 - 나머지는 HW dependent, speed 등의 이유로 어셈블리 사용..

OS, Kernel 2022.07.18

하드웨어 3, 4차시 과제

임베디드 시스템 임베디드 자체는 atmega칩 같은 MCU를 포함하는 개념이지만, 일반적으로는 MCU보다 상위급 성능을 가진 프로세서를 가진 시스템을 자주 말한다. 요즘엔 기술이 발달해서 임베디드 쪽도 사용하는 프로세서 수준이 과거의 일반 컴퓨터급의 성능이 되어서 높은 티어의 임베디드 시스템은 아예 OS를 올리는 경우도 많다. 포괄적인 의미로는 특정한 기능을 수행하는 컴퓨터 시스템이다. 범용 컴퓨터의 반대말이다. 특정 기능에 집중해서 설계자들이 최적화해서 크기나 생산 비용을 줄이거나 성능을 향상시킬 수 있다. SoC를 통해 경량화, 소형화될 수 있다. 회로 설계에 관련이 많다 보니 이런 로직 게이트랑 관련이 깊다. and는 둘 다 1일 때 1을 출력하고, nand는 and에다 not을 한 거다. or은 ..