본문 바로가기

전체 글169

[ROOTKIT #6] 간단한 드라이버 로더 >잘안보이는 스샷은 클릭하셔서 확대해서 보시면 됩니다! 2014. 6. 22.
[ROOTKIT #5] Symbolic Link 유저모드 프로그램이 디바이스를 쉽게 찾도록 디바이스 이름에 Symbolic Link 를 걸어 줍니다.옵션사항이지만 다른 룻킷 코드를 볼때 이해에 도움이 되겠죠?지난 시간에 디바이스 객체를 만들때처럼 UNICODE_STRING 구조체를 만들고IoCreateSymbolicLink 함수를 호출하면 됩니다.이제 아무 일도 하지 않았던 MyUnload 함수에서 IoDeleteSymbolicLink 와 IoDeleteDevice 를호출해서 적절한 청소작업을 하도록 수정합니다. [ 코드 해석 ] 줄번호를 기준으로 해석을 달아봅니다. 6 디바이스 SymblockLink 이름을 MyDevice 로 정합니다.8 UNICODE_STRING 타입의 deviceLinkUnicodeString 변수 선언20~21 RtlInitU.. 2014. 6. 22.
[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.
반응형