什么地方能查开房记录) 怎样查询别人在酒店的

关于SSDTHook的理论知识就不多说了。简单的说一下Delphi开发KMD的一些需要注意的地方...这里使用DDDK---有点自己修改过的痕迹不过区别不大...自己可以看代码1.KeServiceDescriptorTable是一个很特殊的函数...如果直接使用implib来进行创建库的话你会发现这个函数是被忽略的...因为偏移为0所以这个函数基本上只能起

关于SSDTHook的理论知识就不多说了。简单的说一下Delphi开发KMD的一些需要注意的地方...这里使用DDDK---有点自己修改过的痕迹不过区别不大...自己可以看代码1.KeServiceDescriptorTable是一个很特殊的函数...如果直接使用implib来进行创建库的话你会发现这个函数是被忽略的...因为偏移为0所以这个函数基本上只能起到标志作用没有任何实用价值....一些代码中出现了代码:functionSystemService(AFunc:Pointer):PLONG;beginResult:=PLONG(Cardinal(KeServiceDescriptorTable^.ServiceTableBase)+SizeOf(ULONG)*PULONG(ULONG(AFunc)+1)^);end;很容易让人误认为是运行后的返回值(PS:Delphi的函数调用可以不需要写xxx())上面说过因为这个函数几乎是没用的...所以不可能是执行他后返回地址还有一点需要注意的...难道这个地址是说函数的地址??导入表中的确是可以创建这个函数...但是这个函数几乎是没用的...而且系统的SYSLoader也不可能为他填写正确的函数地址...这里取得地址就是他的本身地址...因为他的虚拟偏移为0所以你直接使用代码:PPointer(@KeServiceDescriptorTable)^;得到这个地址就可以了2.fastcall的问题这个问题很头痛.这个函数和delphi的调用方式完全不一样很容易让人误认为是相同的Delphi的寄存器调用方式是eax,edx,ecx,push...,etcvc的fastcall大部分是edx,ecx,etc....所以为了解决这个问题需要自己重写某些代码部分...3.基本上没什么需要注意了自己做好链接库您当然可以使用mickeylan牛为我们制作的rmcoff...4.调试部分WinDbg什么的我就不说了...因为无法进行源码调试个人觉得SysDebuger就不错其实asm也就那么回事。不是吗?呵呵下面写一个完整的SSDTHook代码:{NtOpenProcess[SSDTHook]ByAnskyaEmail:Anskya[at]Gmail.com}unitDriver;interfaceusesntddk;//---->DDDK.pasfunction_DriverEntry(DriverObject:PDriverObject;RegistryPath:PUnicodeString):NTSTATUS;stdcall;implementationtypeTZwOpenProcess=function(ProcessHandle:PHandle;DesiredAccess:TAccessMask;ObjectAttributes:PObjectAttributes;ClientId:PClientId):NTSTATUS;stdcall;varHookActive:Boolean;ZwOpenProcessNextHook:TZwOpenProcess;//从导入表中获取一个函数的地址functionGetImportFunAddr(lpImportAddr:Pointer):Pointer;stdcall;beginResult:=PPointer(PPointer(Cardinal(lpImportAddr)+2)^)^;end;//KeServiceDescriptorTable+函数名计算SSDT函数偏移functionSystemServiceName(AFunc:Pointer):PLONG;stdcall;varlpKeServiceDescriptorTable:PServiceDescriptorEntry;beginlpKeServiceDescriptorTable:=PPointer(@KeServiceDescriptorTable)^;Result:=PLONG(Cardinal(lpKeServiceDescriptorTable^.ServiceTableBase)+(SizeOf(ULONG)*PULONG(ULONG(AFunc)+1)^));end;//KeServiceDescriptorTable+序号名计算SSDT函数偏移functionSystemServiceOrd(iOrd:ULONG):PLONG;stdcall;varlpKeServiceDescriptorTable:PServiceDescriptorEntry;beginlpKeServiceDescriptorTable:=PPointer(@KeServiceDescriptorTable)^;Result:=PLONG(PLONG(Cardinal(lpKeServiceDescriptorTable^.ServiceTableBase)+(SizeOf(ULONG)*iOrd)));end;//钩子过程functionZwOpenProcessHookProc(ProcessHandle:PHandle;DesiredAccess:TAccessMask;ObjectAttributes:PObjectAttributes;ClientId:PClientId):NTSTATUS;stdcall;beginDbgPrint('ZwOpenProcessHookProc:NewZwOpenProcess(ProcessHandle:0x%.8X,DesiredAccess:0x%.8X,ObjectAttributes:0x%.8X,ClientId:0x%.8X)',ProcessHandle,DesiredAccess,ObjectAttributes,ClientId);Result:=ZwOpenProcessNextHook(ProcessHandle,DesiredAccess,ObjectAttributes,ClientId);DbgPrint('ZwOpenProcessHookProc:NewZwOpenProcess(-):0x%.8X',Result);end;//驱动卸载过程procedureDriverUnload(DriverObject:PDriverObject);stdcall;beginif(HookActive)thenbeginasmcli//disableWPbitpusheaxmoveax,cr0

  • 发表于 2021-01-08 05:02
  • 阅读 ( 208 )
  • 分类:互联网

0 条评论

请先 登录 后评论
哈萨克死
哈萨克死

670 篇文章

你可能感兴趣的文章

相关问题