오늘 알아볼 것 - BoF가 무엇인지 알아본다. BoF? - Buffer overFlow의 준말로써, 연속된 메모리 공간을 사용하는 프로그램에서 할당된 메모리 범위를 넘어선 위치에 자료를 읽거나 쓸 떄 발생하며, 오작동 또는 '악의적 코드'를 실행할 수 있게 하는 공격기법. 종류 Stack BoF - 스택 구조상, 할당된 버퍼들이 정의된 버퍼 한계치를 넘는 경우, 복귀 주소를 변경하여 공격자가 임의 코드를 수행할 수 있는 종류. Heap BoF - 힙(내가 쓴 메모리 구조편 참조..)구조 상, 최초 정의된 힙의 메모리 사이즈를 초과하는 문자열들이 힙의 버퍼에 할당될 시, 공격자가 데이터 변경 및 함수 주소를 변경시켜서 그 변경시킨 곳에 미리 준비한 악의적인 코드를 수행하게 만드는 종류. Stack BoF..
오늘 알아볼것 x86 과 x64 '레지스터' 알아보기. 열어가는 글. 이전에 나는 x86, AMD64(x64) '아키텍처'에 대해 알아본적 있다. 하지만 이 아키텍처에서 쓰이는 명령어와 레지스터는 제대로 알아본적이 없었다. 그러므로 오늘 알아볼것은 x86/ x64에서 쓰이는 레지스터를 알아볼것이다. 다시보는 '레지스터'란? - 레지스터는 특정한 목적에 사용되는 '일시적인 기억장치' 를 의미하며, 데이터를 읽고 쓰는 기능이 매우 빠르고, CPU내부에서 사용된다. 전에 쓴 글인 '아키텍처에 관한 '간단한' 고찰편 참고.https://bulletproofyuri.tistory.com/6 근데 여기서 나온 지식이 약간 잘못된것이 있어서 약간 고치는 방향으로 알아볼것이다. 더보기 CPU내에 있는 범용 레지스터 종..
오늘 알아볼 것 - GCC 컴파일러는 대체 뭐하는 물건일까? - 저 컴파일러 알아보면서 나온 .so, .a, .o, .c파일은 대체 뭘까? (중간에 섞듯이 쓸 예정) 목차 더보기 - 열어가는 글 - GCC란? - 컴파일 과정 - 열어가는 글. 이 gcc. 1학년때 컴공개론과 code block이라는 프로그램을 쓰면서 많이 들어봤던 이름이다. 그때 내가 듣기로는 여러가지 장점이 많았던거로 기억한다. 오늘은 이 gcc가 뭔지, 그리고 여기서 배우면서 나오는 여러 파일들에 대해 살펴보는 시간을 가지도록 하겠다. GCC란? - GCC는 GNU 컴파일러 모음(GNU Compiler Collection)의 약자다. - GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러다. 더보기 GNU는 또 뭔가? - ..
오늘 알아볼 것 - dll파일은 도대체 뭘까? 목차 더보기 - 열어가는 글. - dll 파일이란? - dll의 장점. - 결론 열어가는 글. 많은 프로그램을 보다보면 .dll파일을 발견할 수 있다. 당장 배틀넷 오류로 dll파일을 찾을 수 없습니다가 떴던적도 있고, 옛날 초등학교 시절에 rpgxp가지고 아오오니할때도 저 dll파일 몇개 없어서 실행 못해서 그 dll 파일 찾으려고 엄청 해맸던 기억이 있었으니 말이다. 오늘은 이 .dll파일이 도대체 어떤 역할을 하는지 알아보는 시간을 가질것이다. dll 파일이란? - Dynamic link library의 준말로써 동적 링크 라이브러리로 불린다. - 함수들을 모아 놓은 라이브러리 파일. 더보기 라이브러리 파일? - 함수, 데이터,타입 등 여러가지 프로그래..
오늘 알아볼 것 - 어셈블리 핸드레이란 무얼까? 어셈블리 핸드레이란? - 어셈블리어를 C언어로 복원시키는 작업. 여기서 나는 저번에 어셈블리어를 정리하면서 쓴 명령어를 다시 상기 시켜야 했었다. 더보기 mov : 데이터 이동 시에 사용. lea : 주소 값을 옮길 때 사용 --> 데이터 이동에 쓰이는 명령어. add : 레지스터나 메모리의 값을 덧셈할 때 쓰는 명령어. (사용법 = add a,b) sub : 레지스터나 메모리의 값을 뺄 때 쓰는 명령어. (사용법 = sub a,b) dec : 값을 1 감소 시키는 명령어 (사용법 = dec a) inc : 값을 1 증가 시키는 명령어. (사용법 = inc a) --> 논리 연산에 쓰이는 명령어. cmp : 레지스터와 레지스터 값을 비교 할때 쓰는 명령어...
오늘 알아볼 것 - 함수 프롤로그, 에필로그란 뭘까? 열어가는 글 저번까지는 메모리 구조에 대해 알아봤다. 이번에는 함수 프롤로그, 에필로그에 알아볼 시간이다. 근데 여기서 함수 프롤로그/에필로그를 알기전에 스택 프레임이란 걸 꼭 알고 넘어가야 한다고 한다. 더보기 stack frame = 함수 자기 자신만이 가지는 공간. 스택에서 함수가 호출되면 생기는 공간? 이랄까..? 여기서 EBP란? -> stack 상의 한 데이터의 주소가 저장되어 있는 레지스터. 그 데이터 위부터 한 함수가 실행된 이후의 값들이 쌓인다. = 그 해당 함수의 시작 지점. = 함수가 종료되지 않는 한 EBP값은 변하지 않는다. 여기서 ESP란? -> stack에 맨 꼭대기의 주소가 저장되어있는 레지스터. -> 여기서 push또는 ..
오늘 알아볼 것 - 컴퓨터 메모리구조는 어떻게 이뤄져있을까? +@@ 목차 더보기 - 열어가는 글.(컴퓨터 메모리?) - RAM? ROM? - 시스템 동작 구조 - 메모리(RAM) 구조 - 각 영역별 역할 - 스택 / 힙 오버플로우? - 결론. 열어가는 글.(컴퓨터 메모리?) 메모리. 정말 중요한 컴퓨터 자원중 하나이다. 프로그램이 실행될때 그 코드와 결과값등을 저장하는데 쓰이고, 하다못해 보조기억장치로 쓰이니 말이다. 여기서 나는 이 메모리중에서 주기억장치중 RAM과 ROM이 어떻게 동작하는지 알아보는 시간을 가질것이다. 일단 이 메모리중 주기억장치(RAM)가 어떻게 이용이 되는지 알아보자. RAM(Random Access Memory)? 컴퓨터를 이루고 있는것 중 중요한 부품중 하나이다. 우리들의 뇌로..
오늘 알아볼 것 - 어셈블리어란 무엇인가? 열어가는 글(어셈블리어 돌아보기) 저번 고급언어, 저급언어, 기계어를 다루는 글을 썼을때 어셈블리어를 한번 다뤘었다. 어셈블리어는 기계어와 1:1로 대응되는 기호로 이뤄진 언어라 했었다. 이번에는 이 어셈블리어에 대해 더 자세히 알아볼 예정이다. 어셈블리어란 무엇인가? (A.K.A. 기호 언어) 기계어에서 한 단계 위의 언어. 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어. CPU안에 명령어 집합체를 사용하기 때문에 아키텍처마다 어셈블리어랑 어셈블러가 다르다. 어셈블리어 명령어 종류와 기능 mov : 데이터 이동 시에 사용. lea : 주소 값을 옮길 때 사용 --> 데이터 이동에 쓰이는 명령어. add : 레지스터나 메모리의 값을 덧셈할 때 쓰는 ..