绕过安全软件挂钩SSDT的检测

驱动开发:内核扫描SSDT挂钩状态 其次我们还需要实现另一个功能,此时想像一下当我告诉你一个内存地址,我想要查该内存地址属于哪个模块该如何实现,其实很简单只需要拿到这个地址依次去判断其是否大于等于该模块的基地址,并小于等于该模块的结束地址,那么我们就认为该地址落在了此模块上,在这个思路下。则是读取磁盘文件并将其完整拷贝一份,这是两者的本质区别,如下代码则是实现完整拷贝的实现;开头的系列函数,然后依次对比起源地址与原地址是否一致,得出是否被挂钩,完整代码如下所示;函数,该函数的作用是读入一个内核文件到内存空间中,此处如果您使用前一篇。 阅读详情

绕过安全软件挂钩SSDT的检测

 

很多安全软件都靠挂钩SSDT中的函数来检测恶意代码,就拿卡巴举例吧,他挂了NtCreateKey来检测注册表的创建,NtCreateThread和NtResumeThread/NtWriteVirtualMemory来检测远程注入, 等等,这些钩子让我们后期的动作很可能暴露,怎么样才能为所欲为呢?
我这里提一种方案:
1. 首先在用户态读取NTOSKRNL.EXE,找出原始的SSDT的位置,提交到内核驱动中,内核保存起来以便使用
2. 在用户态勾住Ntdll中的NtCreateThread,
3.当调用NtCreateThread,直接将NtCreateThread的参数以及SSDT索引号通过DeviceIoControl传递到自己的驱动中,在自己的驱动手动压栈并根据对应的SSDT索引号来调用相应的函数,最后将返回值传递到应用层,这个只是针对NtCreateThread的特例,其他的可以照搬,不过不用担心必须针对任何一个函数都要在驱动做特定的措施,可以写个通用的,这个就自己想办法了,我倒是早就实现了一个,不过感觉有点黄and暴力,就不贴代码了.
经过我们这番处理之后,流程的变化我简单描述一下:

干净的系统创建线程的流程:
CreateThread->NtCreateThread->(2000通过int 2e进入内核)->原始的SSDT表中的NtCreateThread->

安装安全产品后的创建线程的流程:
CreateThread->NtCreateThread->(2000通过int2e进入内核)->被挂钩的SSDT表中的NtCreateThread(这里安全软件开始检测)->原始的SSDT表中的NtCreateThread->

经过我们处理后的流程:
CreateThread->NtCreateThread->(通过DeviceIoControl进入内核)->直接调用原始的SSDT表中的NtCreateThread->

可能有人说那还不如直接恢复SSDT来的痛快, (那还不被发现了哦! 呵呵,要低调低调)

 
Win64 驱动内核编程-19.HOOK-SSDT HOOK SSDT     在 WIN64 上 HOOK SSDT 和 UNHOOK SSDT 在原理上跟 WIN32 没什么不同,甚至说 HOOK 和 UNHOOK 在本质上也没有不同,都是在指定的地址上填写一串数字而已 (填写代理函数的地址时叫做 HOOK,填写原始函数的地址时叫做 UNHOOK)。不过实现起来还是很大不同的。 一 、 HOOK SSDT     要挂钩 SSDT,必然 阅读详情

相关推荐

Delphi开发的SSDT钩子卸载工具包

本文还有配套的精品资源,点击获取 简介:本工具是使用Delphi语言开发的,能够在内核模式下运行,主要用于从系统服务描述表(SSDT)中移除恶意软件设置的钩子。SSDT是Windows内核的关键部分,被恶意软件篡改后会影响系统功能。工具包含对Windows API的低级访问、内存泄漏检测、DLL加载配置以及安全相关API的封装。这对于系统安全维护和恶意软件检测具有重要意义。...

weixin_35752233的博客 982

SSDT HOOK技术轻松让最新版冰刃、XueTr失效

刚开始学驱动,成功HOOK NtOpenProces 现在本想试试HOOK NtQuerySystemInformation,没想打它的结构N多N长,也让我很惊讶,这个API居然能获取或者设置超过50多种的信息。        参考网上的一些代码,看的我晕头转向的..也没点解释,而且也没法编译...总算搞清楚 进程信息是以链表的形式存储数据的。虽然没学过链表,但也大概有所了解。在做实验过程中

laobobo999的专栏 1690

深入解析Hook Shadow SSDT技术与源码实现

Hook技术是一种在软件运行时,改变或控制其他程序执行的技术手段。它允许开发者“挂钩”到系统、库或应用的某些部分,并插入自定义代码以执行额外的操作。通过这种方式,开发者可以观察和控制函数调用、消息传递或事件处理等。在系统编程中,Hook技术常用于调试、监控、扩展功能等场景。系统编程指的是编写运行在操作系统内核级别或接近内核级别的软件,如驱动程序、系统服务、操作系统组件等。这些程序通常是用C或C++等底层语言编写,并需要对操作系统的工作原理有深入了解。

weixin_33240461的博客 775

免杀,全称为 “反病毒软件免杀”

免杀,全称为 “反病毒软件免杀”,是指通过一系列技术手段和方法,让恶意程序(如病毒、木马、后门等)能够绕过或躲过杀毒软件的检测,使其不被识别为恶意软件,从而可以在目标系统中顺利运行并执行攻击者预期的恶意行为。

m0_71322636的博客 1893

深入解析Shadow SSDT服务函数原始地址获取技术

回顾这场长达二十年的攻防拉锯战,你会发现:SSDT Hook 曾经是 Rootkit 的标配技能;Shadow SSDT 的出现标志着微软开始推行纵深防御理念;PatchGuard 让“默认拒绝”成为内核设计的新哲学;如今的终端安全早已超越单一技术点,走向体系化对抗。而对于我们这些技术人员来说,理解这些底层机制的意义远不止于“炫技”。当你知道不仅是一个隐藏的结构,更是现代操作系统自我保护思想的具体体现时,你会更加敬畏每一行代码背后的工程智慧。

weixin_35257663的博客 1027

驱动程序保护进程(修改SSDT方式)源码

typedef NTSTATUS (*ZWOPENPROCESS)( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId ); NTSYSAPI NTSTATUS NTAPI ZwOpenProcess ( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId ); ZWOPENPROCESS OldZwOpenProcess; NTSTATUS NewZwOpenProcess ( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId ) { NTSTATUS ntStatus; ntStatus = ((ZWOPENPROCESS)(OldZwOpenProcess)) ( ProcessHandle, DesiredAccess, ObjectAttributes, ClientId ); if(ClientId->UniqueProcess == (HANDLE)ulPID) *ProcessHandle = NULL; return ntStatus; }

过TP驱动1(SSDT部分)

#include #include #include typedef struct _ServiceDescriptorTable { PVOID ServiceTableBase; PVOID ServiceCounterTable; unsigned int NumberOfServices; PVOID ParamTableBase; }*PSe

guoyi987的专栏 982

SSDT内核函数查询宝盒

编写驱动或过驱动保护时候方便查询内核函数名称的作用必备利器,内有2003.xp,win7,2008,2000 各种系统对应的内核函数索引

城里城外看SSDT[转]

点这里下载本文的配套代码 引子 2006年,中国互联网上的斗争硝烟弥漫。这时的战场上,先前颇为流行的窗口挂钩、API挂钩、进程注入等技术已然成为昨日黄花,大有逐渐淡出之势;取而代之的,则是更狠毒、更为赤裸裸的词汇:驱动、隐藏进程、Rootkit…… 前不久,我不经意翻出自己2005...

chubaisheng8627的博客 78

屏蔽hackshield的工具

可以通过DLL注入方法屏蔽街头篮球hackshield达到防封号的效果!

仿游戏检测被恢复的SSDT Hook

模仿游戏HOOKSSDK

【原创】RootKit hook之[二] SSDT hook

标 题: 【原创】RootKit hook之[二] SSDT hook 作 者: combojiang 时 间: 2008-01-12,23:00:47 链 接: http://bbs.pediy.com/showthread.php?t=58199 哈,好大一场雪啊,2008年的第一场雪,比以往来得早些。外面的雪在下,透过书房的窗,欣赏着外面的雪和过往的车辆,欣赏之余,便有了想写点东

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1435

n8n 快速入门1:构建一个简单的工作流

n8n 快速入门指南

engchina的专栏 1万+

SSDT inlineHook

上一篇我们介绍了最简单的SSDT,这篇来写一下inlineHook。 所谓的inlineHook就是在内存中修改所需要挂钩函数的前几个字节,让其跳转到我们的fake函数,执行完毕后再跳回去执行原函数,这样的话我们就没有修改SST表里面的内容,而是对函数本身修改。 流程摘自:看雪aniquest 1. 获取服务函数地址: (1)通过全局变量KeServiceDescriptorTable获得SSDT表的起始地址; (2)映射ntdll.dll到ring0空间,获得要Hook的函数的服务索引号; (

dre4merp 526

决策树简介/PPT

最近给我们组新生讲了决策树的相关知识,以下是所做的PPT,参考了网络资源。

垃圾就应该待在垃圾桶里的博客 3796

计算机组成与系统结构(第三版) 袁春风主编 课后习题答案讲解 第一、二章 计算机系统概述 数据的机器级表示

计算机组成与系统结构(第三版) 袁春风主编 课后习题答案讲解 第一、二章 计算机系统概述 数据的机器级表示

qq_73523062的博客 2092
上一篇: 关于Windows下ShellCode编写的一点思考
下一篇: SQL注入天书之ASP注入漏洞全接触
大浪淘沙1
博客等级 码龄19年 42粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值