미사용
-
[C언어] HelloWorld 를 분석해보자미사용/##프로그래밍 2016. 3. 5. 16:22
이번엔 C언어 책 앞부분에 항상 등장하는 HelloWorld를 한번 분석하는 시간을 가져봅시다. 사실 그 짧아 보이는 코드에는 굉장히 많은 개념이 담겨있어요. 우선 코드를 봅시다. #include int main(){printf("Hello World!\n");return 0;} 지난번 글이었던 "C언어 진입장벽 부수기" 에 있던 코드라 익숙하죠? 우선은 Visual Studio 에 입력하고 실행시켜 봅시다.단축키 기억나시나요? Ctrl + F5 실행 결과가 어떻게 나오나요? 이렇게 잘 나오나요? 지난번에 printf 함수의 역할이 쌍따옴포(") 사이에 있는 글자를 출력하는 기능을 한다고 했었어요. 그리고 "\n" 은 출력할 때 개행(줄바꿈)을 하는 기능을 한다고 했구요.그런데 printf 말고 그 주위..
-
[C언어] C언어 진입장벽 부수기미사용/##프로그래밍 2016. 3. 3. 01:35
C언어를 시작하려는데 너무 힘들어하는 사람이 많아서 이렇게 글을 써봅니다.처음에 외울게 조금 있고, 생소한 용어들이 나와서 그렇지 그것들을 있는 그대로 받아들이면 않습니다!찬찬히 들여다 볼까요? (입문자들을 위해 중간 중간 생략된 개념이 있을 수 있습니다.) 1. 준비물 컴퓨터, 컴파일러, 에디터, 손가락2. 기본 개념 탑재여기서 잠깐 기본적인 용어와 C언어 프로그래밍의 개요를 살펴보고 가도록 하죠. 소스 코드 -> 컴파일 -> 링크 -> 실행파일 프로그램이 만들어지는 큰 과정은 위와 같습니다. 사용된 용어들을 정리해보죠. 소스 코드(Source Code) == 프로그래머가 타이핑한 코드 그 자체컴파일(Compile) == 코드를 컴퓨터가 이해하는 기계어로 변환링크(Link) == 기계어를 이용해서 실행..
-
[OS기초] 커널 로드미사용/##컴퓨터 기본 2016. 2. 1. 22:36
2. Kernel Load 1. 개요 앞에서 간단한 프로그램 만들어서 MBR 영역에 넣은 뒤, 부팅을 해 보았다. 이번에는 좀 더 나아가서 커널을 만들어서 로드하는 작업을 해본다. 512byte 크기의 MBR영역에 방대한 커널을 넣기에는 공간이 부족하므로 MBR 밖의 영역을 사용하는데 커널이 로드되는 과정은 아래와 같다. MBR 영역의 코드가 메모리에 적재된다. MBR 에 있던 부트로더가 MBR 뒷 부분을 메모리로 적재한다. CPU가 KERNEL을 실행할 수 있도록 KERNEL로 점프한다. 2. 코드 작성 boot.asm kernel.asm 3. 부트 이미지 만들기 nasm을 이용해서 boot.asm과 kernel.asm 을 각각 boot.bin, kernel.bin 으로 어셈블한다. 이어서 cmd 창을..
-
[OS 기초] 코드 분석미사용/##컴퓨터 기본 2016. 1. 18. 17:50
[Operating System] 참고 도서 - 만들면서 배우는 OS 커널의 구조와 원리 - OS구조와 원리 (OS개발 30일 프로젝트) 이번에는 저번에 썼었던 어셈블리어를 한 줄 한 줄 동작을 분석해 본다. 준비해야 할 것은 어셈블리어 작성한 것과 컴파일한 boot.bin 의 디컴파일한 txt 파일이다. [그림 1] 디컴파일은 [그림 1]과 같이 cmd 에서 명령어를 입력하면 disasm.txt 라는 파일에 boot.bin 을 디스어셈블 내용이 저장된다. –b16 옵션은 16bit 모드로 컴파일 된 바이너리기 때문에 이를 그대로 16bit 환경에서의 디스어셈블 결과를 얻기 위해 넣어준 옵션이다. " > disasm.txt " 을 빼면 파일로 저장이 안되고 cmd 화면에 디컴파일한 내용이 모두 출력 된다..
-
[OS 기초] OS 개발의 시작미사용/##컴퓨터 기본 2015. 12. 29. 19:45
[Operating System] 참고 도서 - 만들면서 배우는 OS 커널의 구조와 원리 - OS구조와 원리 (OS개발 30일 프로젝트) 보안을 공부하는데에 있어서 기초가 되는 OS를 공부하기 위해 효율적으로 공부하는 방법을 알아보던 중 직접 제작해보라는 추천이 있었고, 실제로 OS를 한번 만들어 보고싶은 마음에 프로젝트 아닌 프로젝트를 시작하게 되었다. 주 참고 도서는 '만들면서 배우는 OS 커널의 구조와 원리 - 김범준' 이며 부수적으로 참고하는 도서로는 'OS 구조와 원리 (OS 개발 30일 프로젝트) – 카와이 히데미' 를 선택했다. 이 두 책을 선택한 이유는 먼저 공부해본 형의 추천과 인터넷 리뷰를 참고해 선택했다. 카와이 히데미 저자의 책은 저자가 직접 개발한 툴을 이용해 OS를 만들어야 한다..
-
[FTZ]해커스쿨(HackerSchool) LEVEL20 풀이(Solution)미사용/##Security 2015. 8. 15. 01:22
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL20 (level19는 기존의 버퍼 오버플로우와 같아서 보고서 작성하지 않았습니다 level11 참조 해주세요 :) ) [그림 1] hint 를 열어보면 [그림 1]과 같이 출력이 된다. 이번 문제의 hint를 읽어보면 fgets 에서 bleh 배열에 79byte 만큼의 데이터만 가져와서 저장을 하게 되는데 중요한 것은 bleh 배열의 크기가 80byte 밖에 안된다는 것이다. 기본적으로 버퍼 오버플로우를 하려면 기본 배열의 크기와 dummy 메모리 공간까지 합한 영역을 오버플로우 시켜야 하는데 배열보다 크기가 작은 데이터를 가져오도록 코딩이 되어있다. 즉 버퍼 오버플로우를 발생시키기에 적합하지 않는 즉,..
-
[FTZ]해커스쿨(HackerSchool) LEVEL18 풀이(Solution)미사용/##Security 2015. 8. 15. 01:21
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL18 [그림 1] hint를 열어보면 [그림 1]과 같이 꽤 긴 코드가 출력된다. 코드에 나온 함수를 검색해보니 네트워크 소켓 프로그래밍에서 사용되는 다중 입출력에 사용되는 함수였다. 이를 풀기 위해선 다중 입출력에 대해 공부를 해야 했는데 시간이 너무 오래걸려 주요 함수 부분이 하는 역할정도만 파악을 하고 문제를 풀었다. 우선 count가 100 이상이 되면 어떤 동작을 하든 "what are you trying to do \n"이 출력이 되는데 이 코드는 버퍼 오버플로우를 방어하기 위한 방어 코드라는 것을 알 수 있다. 그리고 check 변수의 값이 0xdeadbeef 일 경우 shellout() 이라..
-
[FTZ]해커스쿨(HackerSchool) LEVEL17 풀이(Solution)미사용/##Security 2015. 8. 15. 01:21
HackerSchool FTZ WARGAME Solution Start : 15.07.03 LEVEL17 [그림 1] hint 파일을 열어보면 [그림 1]과 같이 출력이 되는데 앞에 level16과 흡사한 코드가 출력이 되는데 다른점은 방금과 다르게 shell 함수가 정의 되어 있지 않고, call 함수 포인터에 printit 포인터를 저장해서 호출하고 있다. shell 함수가 없더라도 직접 만들어서 주소값을 call 에 덮어쓰면 된다. [그림 2] 환경 변수에 쉘 코드를 저장한다. [그림 3] gdb로 attackme 를 열어서 call 변수의 위치와 buf 배열의 위치를 확인한다. 이번에도 두 변수의 겨리는 40byte 이기 때문에 버퍼 오버플로우 공격이 가능하다. [그림 4] [그림 5] 환경 변수..