HOOK SSDT主要代码

#pragma once
#include <ntifs.h> /*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * *
* 更多游戏逆向视频www.yxfzedu.com *
* *
* 有任何问题请发邮件至service@yxfzedu.com *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
#pragma pack(1) //SSDT表的结构
typedef struct ServiceDescriptorEntry {
unsigned int* ServiceTableBase;
unsigned int* ServiceCounterTableBase; //Used only in checked build
unsigned int NumberOfServices;
unsigned char* ParamTableBase;
} ServiceDescriptorTableEntry_t, * PServiceDescriptorTableEntry_t;
#pragma pack() typedef NTSTATUS (*pNtOpenProcess)(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL);
ULONG g_OpenProcess; __declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
//恢复内存保护
VOID PageProtectOn() { __asm {
mov eax, cr0;
or eax, 0x10000;
mov cr0, eax;
sti;//开启中断
}
}
//去掉内存保护
VOID PageProtectOFF() { __asm {
cli;//关闭中断,防止线程切换
mov eax, cr0;
and eax,not 0x10000;
mov cr0, eax;
}
} //
ULONG GetProcessNameOffset()
{ PEPROCESS curproc;
ULONG procNameOffset;
//获取EPROCESS结构的地址
curproc = PsGetCurrentProcess();
for (int i = ; i < ; i++)
{
if (!strncmp("explo", (PCHAR)curproc + i, strlen("explo")))
{
procNameOffset = i;
return procNameOffset;
}
}
return ;
} BOOLEAN ProtectProcess(HANDLE ProcessId) {
PEPROCESS Process;
//HANDLE ProcessId = 100; if (ProcessId == ) {
return FALSE;
}
NTSTATUS ProcessByProcessIdStatus = PsLookupProcessByProcessId(ProcessId, &Process); if (ProcessByProcessIdStatus != STATUS_SUCCESS)
{
KdPrint(("yxfzedu:根据PID获取进程对象失败 \n"));
return FALSE;
}
PEPROCESS pEprocess = PsGetCurrentProcess();
KdPrint(("yxfzedu %s \n", (UCHAR*)pEprocess + 0x16c));
if(strstr((char*)pEprocess + 0x16c,"TraceMe")!=){
ObDereferenceObject(Process);
return TRUE;
}
ObDereferenceObject(Process);
return FALSE;
} NTSTATUS MyNtOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL) {
KdPrint(("yxfzedu: 进入到了MyNtOpenProcess! \n"));
KdPrint(("yxfzedu: ClientId->UniqueProcess=%d \n", ClientId->UniqueProcess)); if (ClientId->UniqueProcess == (HANDLE))
{
return STATUS_UNSUCCESSFUL;
}
/*ULONG offse= GetProcessNameOffset();
KdPrint(("yxfzedu:%d\n",offse));*/ //PEPROCESS pEprocess = PsGetCurrentProcess();
//KdPrint(("yxfzedu %s \n", (UCHAR*)pEprocess + 0x16c));
NTSTATUS status = ((pNtOpenProcess)g_OpenProcess)(ProcessHandle, DesiredAccess, ObjectAttributes,ClientId);
return status;
} NTSTATUS HookOpenProcess() {
PageProtectOFF();
g_OpenProcess = KeServiceDescriptorTable.ServiceTableBase[];
KeServiceDescriptorTable.ServiceTableBase[] = (ULONG)MyNtOpenProcess;
PageProtectOn();
/*for (unsigned int i = 0; i < KeServiceDescriptorTable.NumberOfServices; i++)
{
KdPrint(("yxfzedu: 索引号【%d】函数地址=%X \n",i, KeServiceDescriptorTable.ServiceTableBase[i]));
}*/
return STATUS_SUCCESS;
} VOID UnHook() {
PageProtectOFF();
KeServiceDescriptorTable.ServiceTableBase[] = g_OpenProcess;
PageProtectOn();
KdPrint(("yxfzedu:HookOpenProcess 以还原!"));
}

更多游戏逆向视频www.yxfzedu.com

HOOK SSDK的更多相关文章

  1. svnserver hook python

    在使用中可能会遇到的错误排除 :1.Error: svn: 解析"D:\www\test"出错,或svn: E020024: Error resolving case of 'D: ...

  2. Android Hook技术

    原文:http://blog.csdn.net/u011068702/article/details/53208825 附:Android Hook 全面入侵监听器 第一步.先爆项目demo照片,代码 ...

  3. Frida HOOK微信实现骰子作弊

    由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以hook掉判断骰子数的方法进行修改作弊. 1.frida实现hook java层函数1)写个用来测试的demo,当我们点击按钮的时候会弹出窗口显 ...

  4. java的关闭钩子(Shutdown Hook)

    Runtime.getRuntime().addShutdownHook(shutdownHook);    这个方法的含义说明:        这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...

  5. IDT HOOK思路整理

    IDT(中断描述符表)分为IRQ(真正的硬件中断)和软件中断(又叫异常). HOOK的思路为,替换键盘中断处理的函数地址为自己的函数地址.这样在键盘驱动和过滤驱动之前就可以截获键盘输入. 思路确定之后 ...

  6. Android Hook 借助Xposed

    主要就是使用到了Xposed中的两个比较重要的方法,handleLoadPackage获取包加载时候的回调并拿到其对应的classLoader:findAndHookMethod对指定类的方法进行Ho ...

  7. iOS App 无代码入侵的方法hook

    继续Objective-C runtime的研究 最近公司项目在做用户行为分析 于是App端在某些页面切换,交互操作的时候需要给统计系统发送一条消息 在几十个Controller 的项目里,一个一个地 ...

  8. Hook机制里登场的角色

    稍有接触过 WordPress 主题或插件制作修改的朋友,对 WordPress 的Hook机制应该不陌生,但通常刚接触WordPress Hook 的新手,对其运作原理可能会有点混乱或模糊.本文针对 ...

  9. java hook

    linux下 hook的触发,需要 发送信号为15. 后续补充具体内容.

随机推荐

  1. Kaggle-pandas(4)

    Grouping-and-sorting 教程 映射使我们可以一次将整个列中的数据转换为DataFrame或Series中的一个值. 但是,通常我们希望对数据进行分组,然后对数据所在的组进行特定的操作 ...

  2. JS中escape()、encodeURI()、encodeURIComponent()区别详解

    avaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decode ...

  3. JavaScript 跨站伪造请求-CSRF

    CSRF: Cross-Site Request Forgery CSRF 概念 `定义`: 是一种对网站的而已利用,也被称之为one-click-attack 或者 session riding, ...

  4. JavaScript基础-06-正则表达式

    正则表达式 1. 正则表达式用于定义一些字符串的规则:计算机可以根据正则表达式,来检查一个字符串是否符合规则,将字符串中符合规则的内容提取出来. 2. 创建正则表达式对象: var reg=new R ...

  5. 为什么?为什么?Java处理排序后的数组比没有排序的快?想过没有?

    先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个有颜值却假装靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题 ...

  6. Vue.js中传值给子部件及触发动作的问题

    最近研究一个用vue.js做的程序并修改增加功能.其中用到传值给子部件等问题. template中有个子部件: <template> ...... <child-form  v-if ...

  7. 转行做程序员,培训or自学?过来人亲身经历良心分享

    大家好,我是良许. 熟悉我的朋友应该知道我是学机械出身的,但是毕业后就自学转行成了一名 Linux 应用开发工程师了.我之前也做了几个跟转行相关的视频,有兴趣的小伙伴可以去看看. 在本文里,我将给大家 ...

  8. python 02 if while

    1. if的格式 >>> 1<3 True 真>>> 1>3False 假 if   条件:                     条件 + : (t ...

  9. 【Spring】Spring如何实现多数据源读写分离?这是我看过最详细的一篇!!

    写在前面 很多小伙伴私聊我说:最近他们公司的业务涉及到多个数据源的问题,问我Spring如何实现多数据源的问题.回答这个问题之前,首先需要弄懂什么是多数据源:多数据源就是在同一个项目中,会连接两个甚至 ...

  10. python2-dpkt 下载

    原文链接:https://centos.pkgs.org/7/forensics-x86_64/python2-dpkt-1.9.2-2.el7.noarch.rpm.html .Download c ...