Information Security
주소 vs 메모리 C언어는 포인터를 통해 메모리에 대한 직접 접근이 가능하지만, 어셈블리어는 변수를 선언해서 사용하지 않고, 메모리를 직접 사용한다. 주소는 메모리 상의 위치(정수)를 나타낸다. 파일에서 오프셋과 동일한 의미를 가진다. 메모리는 데이터가 들어있는 실제 공간이다. ★ C언어 코드를 어셈블리어로 변환하기 int a; int b; int main() { scanf("%d", &a); scanf("%d", &b); printf("a: %d", a); printf("b: %d", b); return 0; } 두 변수를 입력받고 입력받은 변수를 출력하는 C언어 코드이다. 코드에서 사용할 함수는 printf, scanf 두 개이다. extern printf extern scanf extern을 통해 ..
C언어 프로그램 실행과정 이해하기 CPU가 프로그램을 실행하는 과정 중에 취약점이 발생하기 때문에, 소스코드가 실행 파일로 만들어지는 과정을 알아야 한다. IDE를 사용하지 않고 C언어로 작성된 소스 코드를 직접 컴파일, 어셈블하면서 과정을 파악해볼 것이다. ※ 우리가 이때까지 C언어를 배우면서 사용한 Visual Studio, 자바를 배우면서 사용한 이클립스는 컴파일러가 아니고 IDE(Integrated Development Environment: 통합 개발 환경)이다. IDE는 컴파일러, 편집기, 디버거를 하나로 묶은 소프트웨어이다. 일단 vi 편집기로 Hello World를 출력하는 소스를 작성한다. gcc 명령어로 해당 파일을 컴파일 한다. 명령어 실행 후 아무것도 출력되지 않으면 에러 없이 컴파..
System Hacking - 실습 환경 구성 오늘부터는 대표적인 시스템 취약점인 Buffer Overflow를 이해하기 위한 기초 공부를 할 것이다. 먼저 실습 환경을 구성해야 한다. 이번에는 과거(2000년?)에 사용하던 운영체제인 RedHat 6.2로 실습을 진행할 것이다. https://ko.wikipedia.org/wiki/%EB%A0%88%EB%93%9C%ED%96%87 1. Booting 부팅이 조금 오래걸린다. 기다리다가 부팅이 완료되면 root 계정으로 로그인한다. 2. 실습 도구 -GCC (GNU Compiler Collection) -NASM (Netwired Assembler) -GDB (GNU Debugger) 실습을 진행하기 위해서 필요한 도구는 위의 세가지이다. 이들 중 GCC..