본문 바로가기

Programming/WDK4

SSDT 후킹 [ref - SSDT_Hooking.pdf - Written by 백구] Native API의 호출과정은 위의 그림과 같다. 1. INT 0x2E나 SYSENTER 같은 시스템 콜이 호출된다. (XP 이후는 SYSENTER를 사용)- http://luckey.tistory.com/86 !idt 2e Dumping IDT: 2e:8053f481 nt!KiSystemService kd> rdmsr 176 //SYSENTER_EIP_MSR : 0x176msr[176] = 00000000`8053f540kd> ln 00000000`8053f540(8053f540) nt!KiFastCallEntry | (8053f649) nt!KiServiceExitExact matches: nt!KiFastCallEntry =.. 2014. 2. 22.
가상주소-선형주소-물리주소 변환 1. 가상 주소 세그먼트 레지스터 (16bit) 메모리 주소 (Virtual Address) [*] 세그먼트 레지스터 -> GDT 또는 LDT의 Segment Descriptor 을 참조 (GDTR -> GDT, LDTR-> LDT) - GDT : 모든 프로그램이 참조 가능한 세그먼트 디스크립터 테이블- LDT : 태스크당 독립적으로 세그먼트 디스크립터 테이블 정의 - 세그먼트 레지스터가 참조한 세그먼트 디스크립터의 Base Bits와 가상 주소를 더해서 선형 주소를 구하게 된다. (이를 Sementation이라고 함) * Segment Register (16bit) INDEX (13bit)TI (1bit)RPL (2bit) - INDEX는 디스크립터 테이블 배열의 index 값으로 사용.- TI bit.. 2014. 1. 25.
메모리 접근 [ 메모리 접근 검사 ] [ 디스크립터(세그먼트) 검사 ] - GDT의 Segment Descriptor검사 해당 페이지 테이블 전체에 적용되는 속성 [ 페이지-테이블 엔트리 ] - 하나의 메모리 페이지에 대응.- U비트(2번째 비트) : 0이면 해당 페이지는 커널에 의해서만 접근 가능.- W비트(1번째 비트) : 0이면 해당 메모리 영역은 읽기 전용 영역.- P비트(0번째 비트) : 0이면 해당 메모리 페이지는 현재 디스크로 페이지 아웃됨. 2014. 1. 19.
WDK빌드 환경 ( + Visual Studio ) ===== Windows XP, Visual Studio 2010 ===== [ OSR Online에서 DDKBUILD ] [출처] 비주얼 스튜디오 환경에서 드라이버 개발 (VS2003, DDKBUILD)|작성자 제풍 1. ddkbuild에 설정된 이름으로 환경 변수를 추가해준다. (재부팅 필요) XP의 경우 "WXPBASE" -> "C:\WINDDK\7600.16385.1" 2. 비주얼 스튜디오에 메이크 파일 프로젝트 생성 3. 빌드 속성 NMake탭에 명령줄 추가. - ddkbuild -WXP checked . - ddkbuild -WXP checked . -cZ 4. VC++ 디렉토리에 포함 디렉토리, 라이브러리 디렉토리 추가 - 포함 디렉토리 C:\WINDDK\7600.16385.1\INC\DDK.. 2014. 1. 13.