본문 바로가기

About Programing/04. Device Driver

ZwCreateFile 함수 ZwCreateFile( __out PHANDLE FileHandle, //파일을 가리키는 핸들 CreateFile의 리턴값 __in ACCESS_MASK DesiredAccess, //객체에 접근하기 위한 권한 __in POBJECT_ATTRIBUTES ObjectAttributes, // __out PIO_STATUS_BLOCK IoStatusBlock, //요청 처리된 결과값 __in_opt PLARGE_INTEGER AllocationSize, //초기 할당 크기를 포함하고 있는 라지 인티저의 포인터 __in ULONG FileAttributes, //dwFlagsAndAttributes __in ULONG ShareAccess, //dwShareMode __in ULONG CreateDispos.. 더보기
OBJECT_ATTRIBUTES 구조체 typedef struct _OBJECT_ATTRIBUTES { ULONG Length; //sizeof HANDLE RootDirectory; PUNICODE_STRING ObjectName; //열 핸들의 유니크 객체 이름 ULONG Attributes; //속성 PVOID SecurityDescriptor; //보안 서술자의 포인터 PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; ※InitializeObjectAttributes() 매크로를 통해 초기화 할수 있다. 더보기
SDT 수정을 이용한 Native API Hooking OS : Windows XP SP3 Tool : Microsoft Visual Studio 2008 SP1 / Windows Driver Kit (WDK) Version 7.1.0 Native API Hooking은 SDT를 수정하는 방법을 통해서 이루어 집니다. SDT에 대하여 이야기 하기 전에 User Application Programming을 할때 우리는 WinXX API를 많은 DLL들, 예를들면 KERNEL32,GDI32,USER32같은 것들이 Export해주는 API들을 호출하여 씁니다. 이런 DLL들이 Export해주는 API들을 Disassemble하여 보면, 예를들어서 KERNEL32가 Export해주는 API인 WriteFile()를 Disassemble하여 보면, 내부적으로는 NTD.. 더보기
WinDbg 명령어 정리 WinDbg Command option usage Desc 종료 q 디버깅 종료 qd 디버깅 종료;연결해제 디버깅 환경정보 vertarget 타겟 컴퓨터 정보 표시 version 디버그 환경 정보 표시 .lastevent 마지막 디버그 이벤트 정보 표시 || 디버깅 세션 정보 표시 sumble & sorurce .symfix MS 심볼경로 설정 .sympath 심볼경로 확인/설정 .sym noisy 심볼파일 검색 과정을 출력 .srcpath 소스경로 설정 .srcnoisy .srcnoisy 1 소스경로 검색 과정을 출력 모듈 lm l 로드된 모듈만 표시 m [pattern] 패턴과 일치되는 모듈만 표시 v 모듈 상세정보 표시 !lmi !lmi ntdll.dll 모듈 상세정보 표시 .reload /f [m.. 더보기
완전 신기! 진짜 되는구나!ㅎㅎ 더보기
5월 22일 SOURCES 파일 출처 : 루트킷 - 에이콘 50page  SOURCES파일은 파일 이름이 항상 대문자로 SOURCES이어야 하고, 파일 확장자가 없다. 다음은 SOURCES파일이 포함해야 하는 내용을 보여주고 있다. TARGETNAME=MYDRIVER TARGETPATH=OBJ TARGETTYPE=DRIVER SOURCES=mydriver.c TARGETNAME 변수에는 드라이버의 이름을 할당한다. TARGETNAME에 설정된 이름은 드라이버 바이너리에 포함되기 때문에 TARGETNAME에 MY_EVIL_ROOTKET_IS_GONNA_GET_YOU와 같은 이름을 할당하는 것은 좋은 생각이 아니다. 드라이버 파일의 이름을 변경하더라도 바이너리 안에 포함된 이름은 변경되지 않는다. TARGETPATH 변수는 일반적으로 O.. 더보기
[TDI_FW] 예제 분석 5월 19일 int main (void) { SC_HANDLE schSCManager; SC_HANDLE schService; SERVICE_STATUS serviceStatus; char Path[256]; HANDLE hDevice; schSCManager = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!schSCManager) { return 0; } GetCurrentDirectory (255, Path); strcat (Path, "\\FILTER.SYS"); schService = OpenService (schSCManager, "FILTER", SERVICE_ALL_ACCESS); if (schService == NULL) { schService =.. 더보기
[TDI_FW] 예제 분석 5월 18일 참고 자료 : 윈도우 디바이스 드라이버 - 이봉석(한빛미디어) 604쪽 - 서비스를 생성하는 목적으로 사용되는 Win32 API 함수 정리 OpenSCManager() : 서비스를 생성하거나 제거, 중지 등의 일을 하기 위해서 사전에 사용하는 서비스 컨트롤 관리자(Service Control Manager) 핸들을 얻는 함수다. OpenService() : 기존에 생성한 서비스 핸들을 얻는 함수다. 디바이스 드라이버 서비스를 생성하기 전에 이 함수를 먼저 사용하여 드라이버를 위한 서비스가 이미 생성되어 있느닞를 알아보는 용도로 사용한다. CreateService() : 서비스를 생성하는 목적으로 사용하는 함수다. StartService() : 서비스를 실행하는 목적으로 사용하는 함수다. NT 구형(Leg.. 더보기