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

进程线程创建过程 一、进程创建过程 所有进程都通过 PspCreateProcess 函数创建,包括 System 进程。它被三个函数调用,分别是NtCreateProcessEx、PsCreateSystemProcess 和 PspInitPhase0 。 NtCreateProcessEx 是 CreateProcess 的内核服务; PspInitPhase0 函数是系统初始化早期调用的,它创建了 System 进程,System 进程的句柄保存在全局变量 PspInitialSystemProcessHandle 阅读详情
 

很多安全软件都靠挂钩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通过int 2e进入内核)->被挂钩的SSDT表中的NtCreateThread(这里安全软件开始检测)->原始的SSDT表中的NtCreateThread->

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

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

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

相关推荐

Win64 驱动内核编程-19.HOOK-SSDT

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

天使也掉毛 5076

线程的创建过程——NtCreateThread逆向

线程的创建是从NtCreateThread开始真正执行的。

weixin_45678798的博客 857

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

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

weixin_35752233的博客 982

Inject集合----远程线程注入(NtCreateThreadEx)

介绍: 前面写过一片远程线程注入的文章,用到的是CreateRemoteThread函数来远程注入线程的,这次我们用NtCreateThreadEx来创建远程线程,其实并没有技术的升级,而是进行了创建远程线程函数的升级,下面是CreateRemoteThread在Reactos中的源码 /* Create the Kernel Thread Object */ Status = NtCreateThread(&hThread, ...

qq_42021840的博客 2890

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

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

weixin_35257663的博客 1027

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

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

weixin_33240461的博客 775

初探SSDT

SSDT 的全称是 System Services Descriptor Table,系统服务描述符表。这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来。SSDT 并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。通过修改此表的函数地址可以对常用 Windows 函数及 API 进行 Hook,从而实现对一些关心的系统动作进行过滤、监控的目的。一些 HIPS、防毒软件、系统监控、注册表监控软件往往会采用此接.

hongduilanjun的博客 2732

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

过TP驱动1(SSDT部分)

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

guoyi987的专栏 982

JetLinks社区版VS企业版:手把手教你用PostgreSQL+Redis搭建物联网中台(Win7实测)

本文详细对比了JetLinks社区版与企业版的核心差异,并提供了在Windows 7系统上,使用PostgreSQL和Redis搭建物联网中台的完整部署教程。文章深入解析了从环境准备、后端服务构建到前端部署的每一步,为开发者在资源有限环境下构建高性价比物联网平台提供了清晰的实战指南。

w1x2y3的博客 307

Python RK3588 MPP 8路视频硬解码!全体目光向我看齐!

本文重写了官方demo、加入了Zlmediakit进行拉流并通过pybind11将代码封装成so库,现在,在python中直接通过import的方式,就能完成基础的拉流解码操作,目前支持8路拉流解码!!!

m0_46303486的博客 4880

城里城外看SSDT[转]

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

chubaisheng8627的博客 78

如何快速下载Gaia DR3星表数据?中国虚拟天文台镜像站保姆级教程

本文提供了一份详细的保姆级教程,指导用户如何通过中国虚拟天文台镜像站高速、稳定地下载Gaia DR3星表数据。文章详细介绍了镜像站的访问地址、数据组织结构,并给出了使用wget、aria2c等工具进行批量下载的实战策略,帮助国内用户避开国际网络延迟,高效获取近20亿颗天体的海量数据。

weixin_29231263的博客 307

【原创】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

Abaqus 气动软体抓取器:从超弹性材料建模到抓取力仿真全流程解析

本文详细解析了Abaqus在气动软体抓取器仿真中的应用全流程,涵盖超弹性材料建模、接触设置优化到抓取力仿真等关键环节。通过实战案例分享Yeoh模型参数拟合、不可伸展层建模技巧及收敛优化策略,帮助工程师高效解决有限元仿真中的常见问题,提升软体机器人研发效率。

weixin_28689193的博客 238

基于 Verilog 的经典数字电路设计(10)三态门

三态门(Triple-State Gate)亦称 “三态输出门”、“三态门输出电路”,是一种重要的总线接口电路,具有高电平、低电平和高阻抗三种输出状态的门电路,不过我们通常在设计中比较少见。   三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑 1)或低电平(逻辑 0),又可以保持特有的高阻抗状态,高阻态相当于隔断状态(电阻很大,相当于开路)。

新芯设计的博客 1万+

SSDT inlineHook

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

dre4merp 526

vue2 - 详细实现播放AMR格式音频并实现自定义播放器样式,支持amr音频文件在线地址URL播放、调用服务端API接口获取二进制文件流amr形式、用户本地上传amr文件并实现立即播放(详细代码)

vue2,amr,amr文件播放,vue播放amr音频文件以及在线url跨域问题解决,vue使用audio标签播放amr音频,amr跨域解决,amr网页解码播放,文件上传后怎么播放,vue2播放.amr语音文件,api接口形式调用获取的amr如何播放,vue中如何使用audio元素播放AMR格式的文件,进度条,vue前端如何播放AMR格式的音频文件,vue播放语音文件AMR格式,播放amr格式音频AMR录音机,h5原生audio播放amr格式的音频,VUE2使用benz-amr-recorder 实现解码、

✅ 精选推荐文章 7416

TitanHide实战应用:绕过VMProtect和Themida反调试的终极指南

TitanHide是一款强大的内核级隐藏驱动工具,专为x86/x64架构设计,能够有效绕过主流反调试保护如VMProtect和Themida。本文将详细介绍如何利用TitanHide实现反调试绕过,帮助开发者和逆向工程师突破软件保护屏障。 ## 🚀 TitanHide核心功能解析 TitanHide通过多种底层技术实现反调试绕过,主要核心功能模块包括: ### 1. SSDT钩子技术 通过

gitblog_01026的博客 370

基于STM32、HAL库的IP5356M快充协议芯片简介及驱动程序设计

@param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。* @param hip: IP5356M句柄指针。

corlin6688的博客 1223

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

X64驱动:读取SSDT表基址

前面的驱动编程相关内容都是在32位环境下进行的,驱动程序与应用程序不同,32位的驱动只能运行在32位系统中,64位驱动只能在64位系统中运行,在WIN32环境下,我们可以各种Hook挂钩各种系统函数,而恶意程序也可以通过加载驱动进行内核层面的破坏(Rootkit),大家都可以乱搞,把好端端的Windows系统搞得乱七八糟,严重影响了系统安全性与可靠性。1.这里我们可以通过MSR(特别模块寄存器),读取C0000082寄存器,从而得到KiSystemCall64的地址,在内核调试模式下直接输入。

微软技术分享 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 用户态轻松调用ntdll中的native api收藏
下一篇: 通过PspTerminateThreadByPointer结束进程
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值