- 注册时间
- 2010-7-27
- 最后登录
- 2017-5-27
- 在线时间
- 6 小时
编程入门
- 魔鬼币
- 581
|
过DNF主要分为三步,也许我的思路不太正确,反正可以OD调试,下断。
程序没怎么修边幅,因为只是测试,所以一般都没有写更改内核后的恢复,不过不妨碍使用。
第一步,这也是最起码的,你必须要能够打开游戏进程和线程,能够开打进程和线程后不被检测到
第二步,能够读写进程内存
第三步,能够用OD附加游戏进程
第四步,能够下硬件断点而不被检测
跳过NtReadVirtualMemory,NtWriteVirtualMemory函数头的钩子- 代码:
- #include<ntddk.h>
- typedef struct _SERVICE_DESCRIPTOR_TABLE
- {
- PVOID
- ServiceTableBase;
- PULONG
- ServiceCounterTableBase;
- ULONG
- NumberOfService;
- ULONG
- ParamTableBase;
- }SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE; //由于KeServiceDescriptorTable只有一项,这里就简单点了
- extern PSERVICE_DESCRIPTOR_TABLE
- KeServiceDescriptorTable;//KeServiceDescriptorTable为导出函数
- /////////////////////////////////////
- VOID Hook();
- VOID Unhook();
- VOID OnUnload(IN PDRIVER_OBJECT DriverObject);
- //////////////////////////////////////
- ULONG JmpAddress;//跳转到NtOpenProcess里的地址
- ULONG JmpAddress1;//跳转到NtOpenProcess里的地址
- ULONG OldServiceAddress;//原来NtOpenProcess的服务地址
- ULONG OldServiceAddress1;//原来NtOpenProcess的服务地址
- //////////////////////////////////////
- __declspec(naked) NTSTATUS __stdcall MyNtReadVirtualMemory(HANDLE ProcessHandle,
- PVOID BaseAddress,
- PVOID Buffer,
- ULONG NumberOfBytesToRead,
- PULONG NumberOfBytesReaded)
- {
复制代码 |
|