因为我的C用的对照少,所以大部分都用的汇编,部份中央用汇编写不是很轻易,所以我用的C,因为只是进修,所以内核地址我没有较量争论都是硬编码的。过DNF首要分为三步,或许我的思绪不太准确,归正可以OD调试,下断。
顺序没怎样修容貌,由于只是测试,所以普通都没有写更改内核后的恢复,不外不故障利用。
第一步,这也是最起码的,你必需要可以翻开游戏历程和线程,可以开打历程和线程后不被检测到
第二步,可以读写进村内存
第三步,可以用OD附加游戏历程
第四步,可以下硬件断点而不被检测
跳过NtReadVirtualMemory,NtWriteVirtualMemory函数头的钩子
代码:
#include
;获得零碎称号偏移
DriverUnload endp
*((ULONG*)Address) = (ULONG)OldServiceAddress;//复原SSDT
/
invoke DbgPrint, ebx
extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;//KeServiceDescriptorTable为导出函数
mov cr0,eax
mov eax, (LinkTable ptr [ebx]).Dr1Seg
inc ecx
mov eax, cr0
invoke GetProcessName
mov eax, cmd_2
invoke ModifyFuncAboutDbg, Dmpp_1, 90787e39h, 950f9090h
Mcp_1 equ 805b0c06h
{ //去掉内存保护
{
VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
push 0x1c
mov cr0, eax