전체 글 69

[Windows System] 프로세스간 통신(IPC) 기법_파이프(Pipe) 방식

이름없는 파이프(Anonymous Pipe) : 단방향 통신방식이며, 파이프를 통해서 생성된 핸들을 기반으로 통신하기에 프로세스들 사이에 관계가 있어야 한다. BOOL CreatePipe( PHANDLE hReadPipe, // 데이터를 읽기 위한 파이프 끝 핸들 PHANDLE hWritePipe, // 데이터를 쓰기 위한 파이프 끝 핸들 LPSECURITY_ATTRIBUTES lpPipeAttributtes, // 보안 정보 DWORD nSize // 파이프의 버퍼 사이즈 ); (참고 : 파이프는 두 개의 끝을 가지고 있다. 한쪽 끝에는 데이터가 들어가고 다른 한쪽에서는 들어간 데이터가 흘러 나온다) 이름있는 파이프(Named Pipe) : 주소 정보가 있어 관게없는 프로세스들 사이에서도 통신이 가능하..

[Windows System] 프로세스간 통신(IPC) 기법_메일슬롯(MailSlot) 방식

IPC (Inter-Process Communication) : 프로세스 사이의 통신 메일 슬롯(Mail Slot)의 원리 : 프로세스는 자신에게 할당된 메모리 공간 이외에는 접근할 수가 없다. 따라서 Mail Slot (우체통)을 이용하여 데이터를 송·수신한다. 데이터를 수신하고자 하는 프로세스 A(Receiver)가 Mail Slot 을 생성한다. 데이터를 송신하고자 하는 프로세스 B(Sender)가 프로세스 A의 Mail Slot 의 주소로 데이터를 송신한다. 프로세스 A가 자신의 Mail Slot 을 통해 데이터를 얻게 된다. 메일 슬롯(Mail Slot) 구성 : Recevier : Mail Slot 를 생성한다. HANDLE CreateMailslot( LPCTSTR lpName, // 메일슬..

[Windows System] 커널 오브젝트(Kernel Objects)_0x01

커널 오브젝트 : Windows 운영체제에서 리소스(Resource : 프로세스, 쓰레드, 파일)들을 관리하기 위한 데이터를 저장하는 메모리 블록 Windows에서 관리하는 리소스 특성을 변경하기 위해서는 해당 리소스의 커널 오브젝트를 조작해야한다. 해당 리소스의 정보를 저장하고 있는 커널 오브젝트에 접근하기 위해서는 커널 오브젝트들을 구별하는 커널 오브젝트 핸들(Object Handle)을 얻어야 한다. 커널 오브젝트와 핸들 : 커널 오브젝트는 Windows 운영체제에 종속적이다. 사용자가 리소스 생성을 요청하면 운영체제에서 사용자가 요청한 대로 리소스를 생성하게 되고 이를 관리하기 위해 커널 오브젝트를 생성한다. 즉, 커널 오브젝트는 Windows 운영체제에 의해 생성 및 소멸이 결정된다. 리소스가 ..

[Windows System] 프로세스 생성함수_CreateProcess()

CreateProcess Process A -------> Process B (부모 프로세스) CreateProcess (자식 프로세스) BOOL CreateProcess( LPCTSTR lpApplicationName, // 생성될 프로세스의 이름 LPTSTR lpCommandLine, // 생성될 프로세스에 인자 전달(변수만 가능) LPSECURITY_ATTRIBUTES lpProcessAttributes, // 프로세스의 보안 속성 지정 LPSECURITY_ATTRIBUTES lpThreadAttributes, // 쓰레드의 보안 속성 지정 BOOL bInheritHandles, // TRUE : 부모 프로세스가 소유하는 상속 가능한 핸들을 상속한다. DWORD dwCreationFlags, // ..

[Windows System] 프로세스의 생성과 소멸

프로세스(Process)란 실행 중에 있는 프로그램을 의미한다. 하드디스크에 존재하는 특정 프로그램에 대해서 실행을 요청한 경우, 이 프로그램의 바이너리 코드들이 메모리에 적재되어 명령어를 실행하게 되는데 이를 프로세스라 한다. 프로세스 구성요소 - 메모리 구조 : 프로그램의 실행으로 생성되는 프로세스에 대해 제공되는 메모리 공간은 다음과 같이 나뉜다. 。Data 영역 : 전역변수나 static 변수의 할당을 위한 영역 。Stack 영역 : 지역변수 할당과 함수 호출 시 전달되는 인자값들의 저장을 위한 영역 。Heap 영역 : 동적 할당(malloc, calloc, new에 의한 할당)을 위한 영역 。Code 영역 : 실행파일을 구성하는 명령어들이 올라가는 메모리 영역 위 그림은 프로세스 생성 시 만들어..

[Windows System] 64비트 기반 프로그래밍

1. 64비트와 32비트 구분 : 1. I/O BUS를 통해서 한번에 송 · 수신할 수 있는 데이터 크기 2. 데이터 처리능력 32비트 -> 64비트 : 1. 더 넓은 메모리 공간(가상 메모리) 활용(32비트 : 표현할수 있는 주소 4GB -> 64비트 : 표현할수 있는 주소 16TB) 2. 연산속도의 증가(32비트 : 최대 32비트 데이터 처리 --> 64비트 : 최대 64비트 데이터 처리) 2. 64비트 기반 프로그래밍 1) LLP64, LP64 : 운영체제 모델 char short int long 포이터 Windows LLP64 1바이트 2바이트 4바이트 4바이트 8바이트 UNIX LP64 1바이트 2바이트 4바이트 8바이트 8바이트 Windows에서는 포인터만 8바이트로 표현함으로써 32비트 시스..

[Windows System] 문자셋 (Character Sets)

1. 문자셋(Character Set)의 종류와 특성 SBCS(Single Byte Character Set) : 1바이트로 문자를 표현한다. 대표적으로 아스키 코드(ascii code)가 있다. MBCS(Multi Byte Character Set) : 문자를 표현 하는데 있어서 아스키 코드는 1바이트로, 그 외에는 2바이트로 처리한다. WBCS(Wide Byte Character Set) : 모든 문자를 2바이트로 표현한다. 대표적으로 유니코드(UNICODE)가 있으며, 전세계의 모든 문자를 표현할 수 있다. 2. WBCS 기반 프로그래밍 기본적으로 운영체제에서는 문자열을 MBCS 기반으로 처리한다. 예) #include #include int main() { char str[] = "AB가나"; i..

[리버스_0x0b] 스택 구조 및 특성

작성자: JohnG 편집자: 엔시스 출 처: 보안인닷컴 팀 블로그[http://boanin.tistory.com] 요즘 회사일때문에 포스팅 해야지 해야지 한다면서 이제야 시간내서 글올리네요 많이 부족하지만 공부하면서 정리한내용 올립니다. 1. 프로그램 실행시 메모리의 구조 일반적인 스택의 구조는 다음과 같습니다. /--------------------/ ← 메모리의 높은 숫자의 주소 | | | Stack | | | /------------------/ | | | Heap | | | /--------------------/ | | | Data | | | /--------------------/ | | | Text | | | /--------------------/ ← 메모리의 낮은 숫자의 주소 Heap영역..

[리버스_0x0a] 악성코드 분석

작성자: JohnG 편집자: 엔시스 출 처: 보안인닷컴 팀 블로그[http://boanin.tistory.com] JohnG 입니다. 먼저 이번 블로그의 악성코드 샘플은 지난 5월 13~14일 2009 KISA 해킹방어대회 및 컨퍼런스때 "나도 정보보호 분석가"라는 이벤트로 사용되어진 문제입니다. 환경 : Windows XP (32bit) VMware 가상 컴퓨터 분석 대상: Backdoor/W32.Prorat.525824 (nProtect) Backdoor.Prorat.19.AC (BitDefender) Backdoor.Win32.Prorat.19ac (Kaspersky) BackDoor.ProRat.32 (바이러스 체이서) 사용 툴: ProcessExplorerNt IceSword122en Filem..

[리버스_0x09] 함께 공부하는 Reversing_6

작성자: Dear. Tom 편집자: 엔시스 출 처: 보안인닷컴 팀 블로그[http://boanin.tistory.com] 1. abstraction 이번 4장에서는 가상이 아닌 진짜 어플리케이션을 분석할 것이다. 왜냐하면, 이것은 최고의 연습이 될 것이기 때문이다. 항상 그럴 것은 아니지만, 앞으로도 기본 기술을 설명할 때 이와 같은 방법을 사용할 것이다. 이 강좌는 리버싱을 할 때 필요한 기초를 제공하고, 기술을 향상 시켜줄 수 있을것이다. 이 프로그램은 2001년 1월 이후로 업데이트 되지 않고 있기 때문에 이번 강의에서 목표로 삼았다. 하지만, 이것은 오로지 리버싱을 하기 위함과 교육적인 목적만이 있을 뿐이다. 2. Tools and target - Tool: OllyDbg - Lecture : L..