'ZwQueryDirectoryObject'에 해당되는 글 1건
2008/08/29 21:58
[컴쟁이의 연구실]
루트킷 검색 기술중 하나다.
중국인 블로그에서 발견했다.
그중 핵심 코드는 이거다.
RtlInitUnicodeString(&usDirPath, L"\\Driver");
InitializeObjectAttributes(&oa,&usDirPath,OBJ_CASE_INSENSITIVE,NULL,NULL);
ZwOpenDirectoryObject(&hDir,DIRECTORY_QUERY,&oa);
ZwQueryDirectoryObject(hDir,pBuffer,uLength,FALSE,TRUE,&context,&dwRet);
while (pBuffer->ObjectName.Length!=0&&pBuffer->ObjectTypeName.Length!=0)
{
printf("ObjectName: [%S] ObjectTypeName: [%S] \n",pBuffer->ObjectName.Buffer,pBuffer->ObjectTypeName.Buffer);
pBuffer2++;
}
Fu같은 루트킷은 보통 PsLoadedModuleList 에서 숨기고자 하는 드라이버를 링크를 끊어서 숨기게 된다.
그러나 드라이버도 역시 Object로 관리되므로 ZwQueryDirectoryObject()로 쿼리를 수행하면 보이게 되는
원리이다. (마찬가지로 DeviceTree로 봐도 무방하다)
Icesword도 숨긴 드라이버를 자세히 보여준다. 보면 볼수록 대단하다.
참고: http://blog.csdn.net/DryFisHH/archive/2008/02/16/2098545.aspx
참고 프로그램:


DevObjView.zip