본문 바로가기

전체 글270

[Dreamhack Reverse Engineering] STAGE 1 [소개] 1. 리버스 엔지니어링 1) 리버스 엔지니어링 - 엔지니어링 : 완성품과 이를 구성하는 부품들의 기능과 설계를 고안하고 제작하는 과정 - 리버스 엔지니어링 : 엔지니어링 과정을 거꾸로 하는 행위 - 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악 - 리버스 엔지니어링 or 리버싱이라고 함 2) 리버싱의 분야 - 약의 성분을 분석하는 것 - 자동차의 주행 원리를 이해하는 것 - 전자 제품의 회로를 분석하는 것 - 등등...이 있지만 여기서 다룰 것은 소프트웨어를 대상으로 한 리버싱 2. 리버싱의 용도 1) 좋은 사례 - 판매된 지 너무 오래되어 제작사가 이미 개발을 중단한 프로그램에 대한 패치가 필요할 때 매우 효과적 - 각종 프로그램의 보안성 평가 (얼마나 안전하게 설계되었는지 알아.. 2022. 4. 28.
[BOJ] #1972. 놀라운 문자열 보호되어 있는 글 입니다. 2022. 4. 28.
[Digital Forensic] 네트워크 1. 네트워크 기초 1) 네트워크 - Net + work의 합성어 - 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용 형태를 의미 - 두 대 이상의 컴퓨터들을 연결하고 서로 통신할 수 있는 것 - 어떤 연결을 통해 컴퓨터의 자원을 공유하는 것 2) 네트워크의 장단점 ① 장점 - 파일 공유를 통해 다른 네트워크에 있는 컴퓨터의 파일에 접근 가능 - 미디어 스트리밍으로 디지털 미디어를 네트워크를 통해 재생할 수 있음 - 광대역 인터넷 연결을 공유할 수 있게 되어 각 PC마다 별도의 인터넷 계정을 구입할 필요가 없음 - 무선전파를 이용한 무선 네트워크로 책상에서 벗어나 웹작업을 할 수 있음 ② 단점 - 바이러스나 악성코드, 원치 않는 정보를 받게 됨 - 해킹으로 인한 개인 정보 유출 - 데이터 변.. 2022. 4. 28.
[BOJ] 2022 SISS 1학기 스터디 - 2주차 # 10828 : 스택 (Class 2 Silver 4) [문제] [코드 및 결과] import sys n = int(sys.stdin.readline()) #주어지는 명령의 수 입력 받기 stack = [] #스택 리스트 선언 for i in range(n): cmd = sys.stdin.readline().split() #명령 입력 받기 if cmd[0] == "push": #push 명령 stack.append(cmd[1]) #cmd 리스트 맨 뒤에 해당 정수 추가 elif cmd[0] == "pop": #pop 명령 if len(stack) == 0: print(-1) else: print(stack.pop()) #stack 리스트 제일 마지막 원소 출력 후 제거 elif cmd[0] == "si.. 2022. 4. 9.
[Digital Forensic] 기초암호학 1. 암호학 기초 1) 암호학 - 암호에 관련된 기술 - 정보 보호와 관련된 수학적 방법론 등을 다룸 2) 암호학 용어 - 평문 (Plain Text) : 암호화되지 않은 원본 텍스트 - 암호문 (Cipher text) : 암호화된 판독할 수 없는 텍스트 - 암호화 (Encryption) : 평문을 암호문으로 바꾸는 것 - 복호화 (Decryption) : 암호문을 평문으로 바꾸는 것 3) 암호학 기본 요소 ① 평문 ② 알고리즘 : 암복호화할 때 사용하는 순차적인 계산 절차 ③ 키 : 암호화에 임의성을 추가하기 위한 임의의 값 다른 사용자가 같은 알고리즘을 가지고 있더라도 키를 이용하여 암호화를 했다면 복호화할 때 같은 알고리즘 + 키가 필요 4) 암호학 기능 - 기밀성 : 허가 받은 사용자가 아니면 내.. 2022. 4. 5.
[Dreamhack System Hacking] STAGE 12 - tcache_dup [혼자실습] tcache_dup // gcc -o tcache_dup tcache_dup.c -no-pie #include #include #include #include char *ptr[10]; void alarm_handler() { exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int create(int cnt) { int size; if(cnt > 10) { return -1; } printf("Size: "); scanf("%d", &size); ptr[cnt] = malloc(size.. 2022. 4. 5.
[Dreamhack System Hacking] STAGE 12 - tcache_dup2 [혼자실습] tcache_dup2 #include #include #include #include char *ptr[7]; void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); } void create_heap(int idx) { size_t size; if( idx >= 7 ) exit(0); printf("Size: "); scanf("%ld", &size); ptr[idx] = malloc(size); if(!ptr[idx]) exit(0); printf("Data: "); read(0, ptr[idx], size-1); } void modify_heap() { size_t size, idx; pr.. 2022. 4. 5.
[Dreamhack System Hacking] STAGE 12 - 함께실습 [Exploit Tech: Tcache Poisoning] 1. Tcache Poisoning 1) Tcache Poisoning - tcache를 조작하여 임의 주소에 청크를 할당시키는 공격 기법 - 중복으로 연결된 청크를 재할당하면, 그 청크가 해제된 청크인 동시에, 할당된 청크라는 특징을 이용한 공격 - 이런 중첩 상태를 이용하면, 임의 주소에 청크를 할당할 수 있으며, 그 청크를 이용하여 임의 주소의 데이터를 읽거나 조작할 수 있음 - 실습 코드 // Name: tcache_poison.c // Compile: gcc -o tcache_poison tcache_poison.c -no-pie -Wl,-z,relro,-z,now #include #include #include int main() { .. 2022. 4. 5.
[Dreamhack System Hacking] STAGE 12 Backgorund: ptmalloc2 1. ptmalloc2 1) ptmalloc2 (pthread malloc 2) - 리눅스에서 사용됨 - GLibc에 구현되어 있음 - 사용 목표 : 메모리의 효율적인 관리 ① 메모리 낭비 방지 ② 빠른 메모리 재사용 ③ 메모리 단편화 방지 2) 메모리 낭비 방지 - 메모리의 동적 할당과 해제는 매우 빈번하게 발생하지만 컴퓨터 전체 메모리는 한정적이므로 메모리를 무한히 할당할 수 없음 - 메모리 할당 요청이 발생 시, ptmalloc은 먼저 해제된 메모리 공간 중에서 재사용할 수 있는 공간이 있는지 탐색함 - 해제된 메모리 공간 중에서 요청된 크기와 같은 크기의 메모리 공간이 있다면 이를 그대로 재사용 3) 빠른 메모리 재사용 - 가상 메모리 공간은 매우 넓어, 특.. 2022. 4. 5.