본문 바로가기

전체 글171

[ROOTKIT #4] 디바이스 생성 유저 모드와 커널 모드 사이에 의사소통을 하려면 드라이버는 디바이스를생성해야 합니다. 디바이스를 생성할때 IoCreateDevice 함수를 사용하는데인자중에 UNICODE_STRING 구조체를 요구합니다. 이 구조체를 만드는데는RtlInitUnicodeString 함수가 사용되며 인자로 디바이스 이름을 Unicode String 형태로전달해야 합니다. [ 코드 해석 ] 5 디바이스 이름을 MyDevice 로 정하고 앞에 붙은 L 은 Unicode String 을 의미6 IoCreateDevice 함수가 생성해주는 디바이스 객체를 담을 변수13 NTSTATUS 타입의 ntStatus 변수 선언14 UNICODE_STRING 타입의 deviceNameUnicodeString 변수 선언16~17 RtlInit.. 2014. 6. 22.
[ROOTKIT #3-2] 자신의 Driver를 분석해보자! 우리는 이전에 이렇게 코드를 작성하였습니다.그리고 컴파일을하여 드라이버파일을 얻어냈구요.이번 강의는 따라하지않으셔도 됩니다.강의 흐름상 Hex-ray로 보여드리겠습니다. IDA로 DriverEntry함수를 바로 찾아들어갔습니다. 코드가 매우 유사합니다.그런데 DriverEntry의 형과 인자가 아~~주 조금다르네요.그리고 return STATUS_SUCCESS; 부분에는 return 0;으로 변환되어있습니다.#define STATUS_SUCCESS 0정도로 생각하시면 되겠네요! return은 누구에게로 해주는걸까요?DriverEntry는 누가 불러준걸까요? GsDriverEntry라는 함수가 불러주네요__security_init_cookie함수는 BufferOverFlow를 방지하기위한 Canary를 설.. 2014. 5. 29.
[ROOTKIT #3] "Hello, world!" 드라이버 ################################################강의는 City님의 강의를 기반으로함을 재차 말씀드립니다.################################################ 어느 프로그래밍이나 단골로 나오는 "Hello, world!" 드라이버를 만들어 봅니다.우선 첨부한 InstDrv.zip 을 다운받아서 자신의 룻킷 폴더에 풀어주세요. 자신의 c 소스 파일을 열어서 아래와 같이 코딩하고 저장합니다. (제 경우는 empier.c)코드를 올릴까 하다가 코딩하면서 얻는게 있을거라는 생각에 이미지로 올렸습니다 ;) [ 코드 해석 ] 대문자는 이미 선언된 데이타 타입이나 상수, 매크로에 해당합니다.예) VOID, NTSTATUS, IN PDRIVER_O.. 2014. 5. 29.
[ROOTKIT #2] 드라이버 제작을 위한 필수 파일들 프로그램이 실행되는 영역에는 크게 두가지가 있습니다.사용자 모드(User mode 또는 Ring 3)와 커널 모드(Kernel mode 또는 Ring 0)쉽게 생각해서 사용자 모드는 학생이고커널 모드는 선생님이라고 보심 이해가 쉽습니다.커널 모드에서 내 코드가 실행되어야 여러가지 특권을 누림으로써 컴퓨터 시스템을내 마음대로 조정할 수 있습니다. ################################################몇년전 글이다보니 운영체제가 진화하면서 아래에서 설명하는 DDK는 비스타부터 호환이 잘안되게 되었으니 WDK로 다운받아주세요~ 네이버에 Windows Driver Kit이라 검색하시면 뜹니다.################################################ .. 2014. 5. 28.
반응형