SYSTEM (19) 썸네일형 리스트형 메모리 영역 c언어로 생성된 프로그램은 실행될 때 운영체제가 RAM에 메모리를 할당 → 크게 4가지로 구성되어있음. 1) code 영역 실제 작동하는 명령어인 오브젝트 코드와 전역 상수가 위치 프로그램이 시작될 때 메모리에 할당되며 프로그램이 종료될 때 해제 기계어로 제어되는 메모리 영역 (Hex파일이나 BIN 파일 메모리) 2) data 영역 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장 프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환 초기화 된 데이터는 data 영역에 저장 → 초기화 되지 않은 데이터는 BSS 영역에 저장 3) BSS 영역 전역 변수 중 초기화 되지 않은 변수들이 저장되는 공간 전역변수 혹은 모든 비트패턴이 0으로 .. 쉘코드를 널(\x00) 없이 제작 / getuid setreuid 추가 보호되어 있는 글입니다. 리틀엔디안, 빅엔디안 ▶엔디안이란? : 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법, 바이트 순서 리틀엔디안 빅엔디안 단위 작은 단위가 앞에 나옴 큰 단위가 앞에 나옴 0x1234 34 12 12 34 장점 메모리의 값을 보는데 편안함 별도의 계산 필요 x (메모리에 저장된 값의 하위 바이트만 사용) 숫자 비교 리틀 엔디안보다 빠름 수치 계산 빅 엔디안보다 빠름 스택 뒤에서부터 스택 PUSH 앞에서부터 스택 PUSH 빅 엔디안 – 사람이 숫자를 읽고 쓰는 방법과 같기에 디버깅 과정에서 메모리의 값을 보는데 편안함 리틀 엔디안 - 32비트 숫자를 리틀 엔디언으로 표현했을 때 바이트를 떼어내는 방식으로 하위 16비트, 8비트를 바로 얻을 수 있기에 별도의 계산 필요 X 숫자 비교시 가장 큰 값이 .. 함수 호출 규약 (Calling Convention) ▶함수 호출 규약 (Calling Convention) : 함수를 호출하는 방식에 대한 약속 규약 인자 전달 순서 인자 전달 매체 Stack을 정리하는 함수 Cdecl ← Stack Caller Stdcall ← Stack Callee Fastcall ← 레지스터 + Stack Callee + clrcall, thiscall, pascal, 등의 규약 존재 + Caller / Callee란? Caller – 콜러가 저장하는 레지스터, 값이 보존되지 않아도 되는 경우는 백업하지 않을 수 있음 Callee – 콜리가 저장하는 레지스터 , 콜러가 백업을 필요로하는 레지스터가 무엇인지 모르기에 무조건 백업해야함 # __CDECL 방식 C / C++ 함수에서 기본적으로 사용되는 호출 규약 호출자가 스택을 정리 인.. 파일 디스크립터, 실습 ▶파일 디스크립터 : 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값 - 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값 (최대값 – OPEN_MAX) - 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스 + 파일 – 유닉스 시스템에서 모든 것 (정규파일부터 디렉토리, 소켓, 파이브 등 모든 객체를 파일로 관리) 프로세스가 실행 중에 파일을 열면 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당함 → 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터 값을 이용해서 파일 지칭 가능 + 시스템 콜 – 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스 (C나 C++과 같은 고급 언어로 작성된 프로그램들은.. 패킹, 언패킹 ▶패킹 : 실행 압축 실행 파일 내부에 있는 코드를 압축하여 평소에는 코드를 압축한 상태로 저장 → 파일을 실행하면 메모리에서 압축을 해제 → 파일을 실행 Zip 파일처럼 압축을 해제해야 프로그램을 실행하는 방식 X 일반 프로그램처럼 바로 실행 가능 O 파일 압축시 용량을 더 적게 사용 – 프로그램의 크기를 줄임(전 후 3~4배의 차이) → 작은 용량으로 악성코드를 빠르게 전파할 수 있음 ▶언패킹 : 패킹했던 파일을 해체함 - 압축이 해제된 상태의 코드를 dump 함 실행 압축 프로그램이 실행되는 시점에서는 압축되기 전 상태로 돌아가야함 그때의 메모리 상태를 메모리 내용 그대로 파일에 저장함 → Entry Point 진입점을 파일을 압축하기 전 위치로 설정해줌 언패킹 루틴은 마지막에 EP로 점프.. 안디디버깅 종류 ▶안티디버깅이란? 디버깅을 방해해서 분석을 어렵게 하는 기술 디버깅을 당한다면 디버깅을 하지 못하도록 고의적으로 에러를 발생 or 디버거 프로그램을 종료시키는 등 다양한 방법 사용해서 방해함 크게 static 그룹과 dynamic 그룹으로 나뉨 1) Static - 디버거를 탐지하여 프로그램이 정상적으로 실행되지 못하게 함 - 디버깅을 시작할 때 한 번만 해체해주면 됨 #BeingDebugged PEB – (프로세스 정보를 담고 있는 구조체)값을 참조해서 할 수 있는 방식 디버깅 중일 때는 1(True)로 설정 / 디버깅 중이 아닐 때는 0 (False)로 설정 #Ldr PEB.Ldr에 있는 Ldr 구조체의 주소를 가리키고 있는 값을 참조 LDR – 프로세스가 디버깅 시에 메모리의 힙 영역에 디버깅 .. 프로세스, 스레드 차이 프로그램 ▶ 프로세스 ▶ 스레드 ▶프로세스 : 메모리에 올라와 실행되고 있는 프로그램 각각의 객체 (작업의 단위) 실행 시 운영체제로부터 프로세서, 메모리 영역(Code, Data, Stack, Heap) , CPU 시간 등의 자원을 할당 받음 같은 프로세스 내의 자원들을 스레드끼리 공유하면서 실행 다른 프로세스의 자원에 접근하기 위해선 프로세스 간의 통신 필요 (EX. 파일) ▶스레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위 프로세스 내에서 stack 부분만 따로 할당 받음, code, data, heap 영역은 공유 (X 프로세스는 다른 프로세스의 메모리에 접근 X) 하나의 프로세스가 생성되면 하나의 (메인) 스레드가 생성됨 사용 이유) # 작업들 간의 통신 비용 절감 →프로세스 간.. 이전 1 2 3 다음