본문 바로가기

전체 글

(75)
6주차_시스템 버퍼 버퍼(Buffer)는 일상에서 ‘완충 장치'라는 뜻으로 사용되며, 컴퓨터 과학에서는 ‘데이터가 목적지로 이동되기 전에 보관되는 임시 저장소’의 의미로 쓰다.  버퍼 오버플로우 버퍼가 넘치는 것을 의미한다. 버퍼는 제각기 크기를 가지고 있는데, int로 선언한 지역 변수는 4바이트의 크기를 갖고, 10개의 원소를 갖는 char배열은 10바이트의 크기를 갖다.   중요 데이터 변조버퍼 뒤에 중요한 데이터가 있다면, 해당 데이터가 변조됨으로써 문제가 발생할 수 있다. 데이터 유출 C언어에서 정상적인 문자열은 널바이트로 종결되며, 표준 문자열 출력 함수들은 널바이트를 문자열의 끝으로 인식한다. 만약 어떤 버퍼에 오버플로우를 발생시켜서 다른 버퍼와의 사이에 있는 널바이트를 모두 제거하면, 해당 버퍼를 출력시..
6주차 암호 RSA 암호 알고리즘두 개의 키가 사용된다. 하나는 공개키이고 다른 하나는 비밀키이다.공개키(Public key): 모든 사용자에게 공개되며, 평문을 암호화할 때 사용비밀키(Private key): 타인에게 노출되어서는 안 되며, 공개키로 암호화된 암호문을 복호화할 때 사용됩니다. 키 생성 공개키와 비밀키를 생성하는 키 생성 과정이 필요하다.  RSA는 소인수분해를 어렵게 만들기 위해 복잡한 연산을 거쳐 키를 생성해야 한다.  1. 먼저 서로 다른 두 소수 p와 q를 선택한다. 일반적으로 1024비트 이상에서 비트 길이가 같은 수로 생성한다. 그 뒤, p와 q를 곱하여 n을 구하고, ϕ(n)을 계산합니다.2. ϕ(n)보다 작은 수 중 ϕ(n)과 서로소인 e를 선택하고, d≡e^(−1)modϕ(n)인 d를..
5주차_시스템 SYSV리눅스는 SYSTEM V(SYSV) Application Binary Interface(ABI)를 기반으로 만들어졌다.SYSV에서 정의한 함수 호출 규약은 3가지 특징을 가진다. 6개의 인자를 RDI, RSI, RDX, RCX, R8, R9에 순서대로 저장하여 전달합니다. 더 많은 인자를 사용해야 할 때는 스택을 추가로 이용한다.Caller에서 인자 전달에 사용된 스택을 정리한다.함수의 반환 값은 RAX로 전달한다.// Name: sysv.c// Compile: gcc -fno-asynchronous-unwind-tables -masm=intel \// -fno-omit-frame-pointer -S sysv.c -fno-pic -O0#define ull unsigned long ..