|
|
[bgcolor=#ffffff]可以通用in line Hook 或者SSDTHOOK 转到自己的函数[/bgcolor]
[bgcolor=#ffffff]__declspec(naked) [/bgcolor]
[bgcolor=#ffffff]void asmmyNtOpenProcess(void)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff] __asm[/bgcolor]
[bgcolor=#ffffff] { [/bgcolor]
[bgcolor=#ffffff] push ebp[/bgcolor]
[bgcolor=#ffffff] mov ebp,esp[/bgcolor]
[bgcolor=#ffffff] mov eax,[ebp+0x14][/bgcolor]
[bgcolor=#ffffff] mov eax,[eax][/bgcolor]
[bgcolor=#ffffff] cmp eax,mypid //mypid是需要保护的进程id,全局变量,可以在前边赋值[/bgcolor]
[bgcolor=#ffffff] jnz end[/bgcolor]
[bgcolor=#ffffff] pop ebp[/bgcolor]
[bgcolor=#ffffff] mov eax,0[/bgcolor]
[bgcolor=#ffffff] ret 0x10[/bgcolor]
[bgcolor=#ffffff]end:[/bgcolor]
[bgcolor=#ffffff] //正常调用 正常进程句柄[/bgcolor]
[bgcolor=#ffffff] push [ebp+0x14][/bgcolor]
[bgcolor=#ffffff] push [ebp+0x10][/bgcolor]
[bgcolor=#ffffff] push [ebp+0x0c][/bgcolor]
[bgcolor=#ffffff] push [ebp+0x8] [/bgcolor]
[bgcolor=#ffffff] call oldNtOpenProcess [/bgcolor]
[bgcolor=#ffffff] pop ebp[/bgcolor]
[bgcolor=#ffffff] ret 0x10[/bgcolor]
[bgcolor=#ffffff] }[/bgcolor]
[bgcolor=#ffffff]//SSDT HOOK[/bgcolor]
[bgcolor=#ffffff]NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff] [/bgcolor]
[bgcolor=#ffffff] [/bgcolor]
[bgcolor=#ffffff] pDriverObj->DriverUnload=DDK_Unload; [/bgcolor]
[bgcolor=#ffffff] KdPrint(("我的第一个驱动载入 %x \n",KeServiceDescriptorTable));//// [/bgcolor]
[bgcolor=#ffffff] int* pssdtTable =(int*)KeServiceDescriptorTable->ServiceTableBase;[/bgcolor]
[bgcolor=#ffffff] char* pargTable =(char*)KeServiceDescriptorTable-> aramTableBase;[/bgcolor]
[bgcolor=#ffffff]// int i;[/bgcolor]
[bgcolor=#ffffff]// for ( i=0;i<22;i++)[/bgcolor]
[bgcolor=#ffffff]// { int t=*(pargTable +i);[/bgcolor]
[bgcolor=#ffffff]// KdPrint((" SSDT[%d]= %x ,%x \n",i,pssdtTable), t );[/bgcolor]
[bgcolor=#ffffff]// }[/bgcolor]
[bgcolor=#ffffff] //ssdt hook[/bgcolor]
[bgcolor=#ffffff] [/bgcolor]
[bgcolor=#ffffff] KdPrint(("NtOpenProcss 地址=%X \n",myNtOpenProcess));[/bgcolor]
[bgcolor=#ffffff] //保存原有的NtOpenProcess地址到oldNtOpenProcess变量里[/bgcolor]
[bgcolor=#ffffff] oldNtOpenProcess=pssdtTable[122];[/bgcolor]
[bgcolor=#ffffff] //SSDT HOOK [/bgcolor]
[bgcolor=#ffffff] pssdtTable[122]=(int)&asmmyNtOpenProcess;[/bgcolor]
[bgcolor=#ffffff] KdPrint(("pssdtTable[122] =%X \n",pssdtTable[122]));[/bgcolor]
[bgcolor=#ffffff] //加入hook代码[/bgcolor]
[bgcolor=#ffffff] // 请视情况返回DriverEntry例程执行结果[/bgcolor]
[bgcolor=#ffffff] return STATUS_SUCCESS;[/bgcolor]
[bgcolor=#ffffff] // return STATUS_DEVICE_CONFIGURATION_ERROR; 参数不正确[/bgcolor]
[bgcolor=#ffffff] // return STATUS_SUCCESS;[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor] |
|