进程隐藏与进程保护(SSDT Hook 实现)(二 视频加密软件推荐

进程守护工具Daemontools-supervise 工具下载地址:http://cr.yp.to/daemontools/daemontools-0.76.tar.gz   创建package文件夹,安装supervise mkdir /package chmod 1755 package cd package 上传下载的gz文件,解压 tar -zxvf daemontools-0.76.tar.gz 先安装gcc y... 阅读详情

狙击豹视频加密软件

加密保护手机上的视频

文章目录:

                 

1. 引子 – Demo 实现效果:

2. 进程隐藏与进程保护概念:

3. SSDT Hook 框架搭建:

4. Ring0 实现进程隐藏:

5. Ring0 实现进程保护:

6. 隐藏进程列表和保护进程列表的维护:

7. 小结:

                

1. 引子 – Demo 实现效果:

                        

上一篇《进程隐藏与进程保护(SSDT Hook 实现)(一)》呢把 SSDT 说得差不多了,

博文地址:

http://www.cnblogs.com/BoyXiao/archive/2011/09/03/2164574.html

不过呢,那也只是些理论的东西,看不到什么实物,估计说来说去把人说晕了后,也没什么感觉,

而这一篇博文的话,给出点新意的,让人头脑清醒点的 ~ 所以先给个 Demo 出来吧 ~

     

(不好意思,本着不喝倒怎出得了好文章这个理由,所以今天又喝多了点,文章有疏忽之处还请见谅 ~

顺便在这里跟朋友们分享一下哈,晚上于这个时间点,比如 2 点的时候啊,喝点小酒,

听点曲子,你会精神振奋,头脑更加清醒,思路也会很清晰,尤其是写起程序来那是唰唰的来の ~ )

      

进程隐藏效果:

应用程序主界面:

image

               

隐藏进程 taskmgr.exe:

image

              

取消进程隐藏 taskmgr.exe:

image

                

进程保护效果:

进程保护(保护自身进程 SSDTProcess.exe):

image

         

取消进程保护(这里还是以 SSDTProcess.exe 为例):

下面的截图表示 SSDTProcess.exe 已经被取消了保护,

此时再到任务管理器中结束 SSDTProcess.exe 时,你可以发现是可以正常结束这个进程的 ~

image

            

                

2. 进程隐藏与进程保护概念:

                        

在 Ring3 下获取到当前 Windows 操作系统下的所有的进程无外乎以下的几种方法:

第一种:使用 ToolHelp 遍历获取到所有进程,关于这种方式的话,笔者以前写过一篇博文的,

《列举 Windows 所有进程(ToolHelp)》博文地址如下:

http://www.cnblogs.com/BoyXiao/archive/2011/02/27/1966383.html

第二种:使用 PSAPI 下的 EnumProcesses 获取到所有进程的 PID,然后提升进程权限为 SE_DEBUG 权限,

再调用 OpenProcess 即可打开进程,从而获取到进程的基本信息(可以查看 MSDN 的 PSAPI 专题)。

第三种:使用未公开的本地 API 即位于 Ntdll.dll 中的未文档化的 API – NtQuerySystemInformation,

而 Windows 任务管理器就是通过这种方式来获取到所有的进程信息的 ~

而事实上的是,ToolHelp 和 PSAPI 只不过是对 Ntdll.dll 中 NtQuerySystemInformation API 的一个封装,

所以在 Ring3 下获取系统中所有进程信息最终都会回到 Ndll.dll 中 NtQuerySystemInformation API 的调用上。

如果要实现在 Ring3 中对进程进行隐藏的话,只需要 Hook 掉 NtQuerySystemInformation API 即可。

               

而至于进程保护的话,我们需要考虑到两种情况,第一种则是该进程自行终止,第二种情况则是该进程被其他进程给杀掉,

第一种情况基本上对于窗口应用程序来说,一般都是用户点击了右上角的 x 按钮,然后产生 WM_CLOSE 消息,

最后由窗口过程退出进程,这种情况下,我们应该是需要允许退出的,也就是进程是可以正常退出的。

而第二种情况的话,就是进程被别的进程杀掉,比如在任务管理器中就可以杀掉绝大部分的应用程序进程,

而这里的进程保护就是要实现进程不能够被任务管理器或者其他的进程管理工具杀掉。

在 Ring3 中,由一个进程结束其他进程,调用的 API 为 Kernel32.dll 中的 TerminateProcess,

如果追溯这个 TerminateProcess,可以发现,其调用了 Ntdll.dll 中的 NtTerminateProcess API,

然后再追溯下去就可以到 ntoskrnl.exe 中的 ZwTerminateProcess 和系统服务 NtTerminateProcess 了。

而这和我的上一篇博文中介绍 NtQuerySystemInformation 就是一致的了,

所以如果我们要实现进程保护,需要 Hook 的系统服务就是 NtTerminateProcess ~

                

               

3. SSDT Hook 框架搭建:

                        

从上面的介绍中,我们可以知道,要想实现进程隐藏和进程保护,我们需要在 SSDT 中 Hook 两个系统服务,

即 Ring0 下的 NtQuerySystemInformation 和 Ring0 下的 NtTerminateProcess,

既然要实现两个 Hook 的话,我干嘛不将 SSDT Hook 写成一个框架呢,

这样的话,以后我无论是需要 Hook 哪个 SSDT 中的系统服务,我直接调用这个 SSDT 框架不就 OK 了,

免得再去重复造轮子不,所以这里就来简单介绍一下这个 SSDT 框架 ~

当然这里谈得 SSDT Hook 框架可不是大伙眼里的什么 .Net 框架啊,MVC 框架啊之类的,

没那么复杂,算到底也就是一个 .cpp 和一个 .h 的文件而已,然后再在其中对外公开几个 API 即 OK 了 ~

image

                

这里既是使用了 SSDT 的话,而在前一篇博文中也谈到了在 ntoskrnl.exe 中导出了 KeServiceDescriptorTable,

但是内核中导出归导出,它导出有个屁用啊,别个类型啊什么的都没给你,看你怎么在你代码中使用它 ~

所以我们首先要做的就是如何使用这个 ntoskrnl.exe 中导出的 KeServiceDescriptorTable 了,

不过好在还有 WRK(当然在反汇编,逆向工程里面那些牛的作用也是相当的给力)的帮助,

我们可以定义下面的代码来完成在自己的代码中使用 KeServiceDescriptorTable 这个任务:

   1:  //=====================================================================================//
   2:  //Name: KSYSTEM_SERVICE_TABLE 和 KSERVICE_TABLE_DESCRIPTOR                             //
   4:  //Descripion: 用来定义 SSDT 结构                                                       //
   6:  //=====================================================================================//
   7:  typedef struct _KSYSTEM_SERVICE_TABLE
   8:  {
  
  
   9:      PULONG  ServiceTableBase;        // SSDT (System Service Dispatch Table)的基地址
  10:      PULONG  ServiceCounterTableBase; // 包含 SSDT 中每个服务被调用的次数
  11:      ULONG   NumberOfService;     // 服务函数的个数, NumberOfService * 4 就是整个地址表的大小
  12:      ULONG   ParamTableBase;          // SSPT(System Service Parameter Table)的基地址
  13:   
  14:  } KSYSTEM_SERVICE_TABLE, *PKSYSTEM_SERVICE_TABLE;
  15:   
  16:   
  17:  typedef struct _KSERVICE_TABLE_DESCRIPTOR
  18:  {
  
  
  19:      KSYSTEM_SERVICE_TABLE   ntoskrnl; // ntoskrnl.exe 的服务函数
  20:      KSYSTEM_SERVICE_TABLE   win32k;   // win32k.sys 的服务函数(GDI32.dll/User32.dll 的内核支持)
  21:      KSYSTEM_SERVICE_TABLE   notUsed1;
  22:      KSYSTEM_SERVICE_TABLE   notUsed2;
  23:   
  24:  } KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;
  25:   
  26:   
  27:  //导出由 ntoskrnl.exe 所导出的 SSDT
  28:  extern PKSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable;

        

既然是个 SSDT Hook 框架的话,自然需要能够安装 Hook,当然也需要能够解除 Hook,

而我们拿什么来解除 Hook 呢,经过前面的介绍,我们可以知道的是,

SSDT Hook 其实就是拿我们自己的 Hook 函数的地址去替换掉原来 SSDT 中保存的系统服务的地址,

如果 Hook 了某个 API,那就意味着在 SSDT 中指定索引处所保存的系统服务的地址被修改为了 Hook 函数的地址,

而如果要解除这个 API 的 Hook,自然就需要将原来系统中原有的系统服务的地址写回 SSDT 指定索引处,

但是我们拿什么来保存 SSDT Hook 之前的系统服务的地址呢 ?

        

由于在 32 位机器上,一个入口地址可以用 32 位来表示,也就可以使用一个 ULONG 类型来保存,

而由于我们这个是 SSDT 框架,也就是能够随意的 Hook SSDT 中的任意系统服务,

自然为了能成功实现 Hook 的解除,就需要将 SSDT 中在 Hook 之前的每一个系统服务的地址保存下来,

根据上面的总结,这可以通过一个 ULONG 数组来保存就可以了 ~

然后再在 Hook 任意的系统服务之前,将 SSDT 中的所有系统服务的地址保存或者说是备份到 ULONG 数组中即可 ~

而后在解除 Hook 时,我们就可以从这个 ULONG 数组中取出原有系统服务的地址,

然后将地址写入到 SSDT 中即可实现 Hook 解除 ~

   1:  //定义 SSDT(系统服务描述表) 中服务个数的最大数目
   2:  //这里定义为 1024 个,实际上在 XP SP3 是 0x0128 个
   3:  
Supervisor - 进程守护工具 Supervisor 简介 Supervisor /ˈsuːpərvaɪzər/ 监督人,[管理] 管理人;检查员 ​ Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它。可以运行在各种类unix的机器上,supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台守护进程,并监控进程状态,异常退出时能自动重... 阅读详情

相关推荐

从特征匹配到行为分析:深入解析高级反木马工具antispy的设计与实战

在网络安全领域,恶意软件的对抗已从传统的特征码匹配,演进到基于行为分析的主动防御。其核心原理在于,无论恶意代码如何伪装,其窃取数据、建立连接等目的性行为,最终会通过一系列特定的系统调用序列表现出来。这种技术价值在于能够有效检测绕过传统杀软的“零日”或“白加黑”木马等高级持续性威胁。应用场景广泛覆盖企业安全运维、高隐私要求个人及安全研究。本文聚焦的 **antispy** 工具,正是这一范式的典型代表,它通过构建实时监控、内存扫描、动态沙箱及Rootkit检测等多层架构,实现对高级木马的行为分析与清除。掌握其

virusswb的专栏 450

VMware Workstation解锁macOS虚拟机的原理与实操指南

macOS虚拟化是指在非Apple硬件上运行macOS操作系统的技术实践,其核心难点在于绕过Apple启动链的硬件绑定机制。该过程涉及UEFI固件定制、Boot ROM签名验证劫持、SMBIOS平台伪造及NVRAM变量注入等底层虚拟化适配技术。关键技术价值在于实现macOS在Windows宿主机上的稳定启动与全功能运行,支撑Xcode开发、Final Cut Pro剪辑、Docker容器等专业场景。本文聚焦VMware Workstation平台下Unlocker补丁体系的工作原理、OEM BIOS固件定制

chuiqi9947的博客 575

Windows用户态程序高效排错实战指南:WinDbg/ProcMon/API Monitor协同诊断

Windows用户态程序调试是桌面应用与中间件开发的核心能力,其本质是在受限权限、无源码、缺符号的生产环境中,快速定位崩溃、卡顿、泄漏等异常根因。原理上依赖对EIP/ESP/EBP寄存器语义、堆栈帧结构、ALPC/LPC通信机制及符号加载链路的精准理解;技术价值在于将模糊现象(如‘程序无响应’)转化为确定性事实(如‘线程阻塞在NtRequestWaitReplyPort,依赖服务已停止’),显著压缩平均故障修复时间。典型应用场景涵盖minidump分析、GDI资源泄漏追踪、Release版逆向定位及客户现场

天下无双 428

[网络安全自学篇] 八十四.《Windows黑客编程技术详解》之VS环境配置、基础知识及DLL延迟加载详解(1)

从这篇文章开始,作者将带着大家来学习《Windows黑客编程技术详解》,其作者是甘迪文老师,推荐大家购买来学习。作者将采用实际编程和图文结合的方式进行分享,并且会进一步补充知识点。第一篇文章主要包括两部分内容,开发环境(VS、编译设置)、基础技术、运行单一实例(互斥对象示例)、DLL延迟加载(skin++换皮肤示例)、资源释放(MFC示例)。希望对您有所帮助~

杨秀璋的专栏 1万+

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 406

进程保护工具 保护进程不被关闭

保护进程不被关闭!保护进程不被关闭!保护进程不被关闭!保护进程不被关闭!

进程隐藏ProcessHidden

进程隐藏 ProcessHidden 实例程序

进程保护工具

VB写的进程保护工具,可以同时保护5个进程。即当被保护的程序被退出后,该工具可以重启被保护的程序。

利用Android系统漏洞实现后台弹窗(外弹)

关键:从 Android 8.0(API 26)开始,禁止使用 context.sendBroadcast() 发送隐式广播(即没有指定 setPackage() 或明确组件的广播)。demo核心代码展示利用Android显示系统和广播系统的漏洞实现在后台弹窗的功能,支持最新Android15,16版本。核心功能都是在so层去做,大量使用了jni反调, 如果要上架到应用市场,需要对代码做进一步混淆,加固以应对市场安全扫描。3,开启虚拟显示窗口,这是个透明像素窗口。5,可开启一个线程,调用这个外弹窗口。

2018,再出发~ 1316

STM32实战篇:使用USART发送/接收数据

在发送字符时也可以直接使用其对应的ASCLL码,例如: USART_SendData(USART1, 0x61);

qq_74114817的博客 596

Google Cameraserver 看门狗CameraServiceWatchdog超时crash原理分析

本文分析了Android CameraServiceWatchdog机制的工作原理。该看门狗用于监控相机服务关键操作(如close、flush)的超时情况,通过定时器线程检测阻塞问题。文章详细讲解了Watchdog的初始化流程、使能方式、内部定时器机制(默认周期100ms,650次循环触发超时),并提供了configureStreams阶段的客制化实现方案。当检测到超时,Watchdog会触发abort生成tombstone日志,便于调试分析。

1130

PCL ICP算法实现点云精配准【2026最新版】

PCL1.14.1 及之前版本所实现的迭代最近点ICP算法。博客长期更新,本文最新更新时间为:2026年4月17日。

点云侠的博客 31万+

低代码组件开发——OpenClaw智能助手的组件设计与开发(2026技术版)

OpenClaw智能助手的低代码组件开发平台采用分层架构设计,包含组件定义、注册、配置、渲染和生命周期管理等核心模块。该系统支持UI、功能、数据和集成四种组件类型,强调可重用性、可配置性和可扩展性。组件定义通过TypeScript、React等技术实现组件结构和行为的描述,组件注册中心基于Node.js和MongoDB管理组件版本。该平台通过React、Redux等技术实现组件渲染和状态管理,并提供完整的生命周期管理机制。这种架构设计显著提升了智能助手应用的开发效率和质量。

一键难忘的博客 407

【Conda虚拟环境】新建 + 激活 + 安装 + 查看 + 退出 + 删除 + 复制 + 导出 + 导入 + 更改

(1)创建虚拟环境(2)激活虚拟环境(4)查看虚拟环境(3)退出虚拟环境(5)删除虚拟环境(6)复制虚拟环境(7)导出虚拟环境(8)导入虚拟环境(9)更改虚拟环境的安装路径(10)在指定路径下,配置虚拟环境

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 4万+

1.2 Spring AI V1.1.2版本 架构全景:模块拆解与设计哲学

Override// 检查请求的 Token 数量throw new TokenLimitExceededException("请求超出 Token 限制");@Override// 记录实际消耗的 Token@Override// 最先执行// 接口// 不同实现// 使用方无需改变定义抽象,保证可移植性提供 Fluent API,提升开发体验Advisor 机制提供扩展点,支持灵活定制模块化设计让你只引入需要的依赖自动配置。

小林夕程的博客 220

Mac电脑安装burp suite2024版本记录

下载最新版本burpsuitloader-XXX-all.jar,改名为burpsuitloader.jar。目录下,修改vmoptions.txt文件,新增以下内容,如果keygen不是这个名称的话,需要修改。,点击license左侧的copy复制它,然后手动从启动台启动burpsuite。,复制如下命令到终端即可(要加双引号,不然目录中空格会导致命令截断)再复制激活响应信息到burpsuite中即可激活。后续运行burp直接从启动台运行即可。将如下框的信息复制到激活器中。输入后下一步,点击手动激活。

墨痕诉清风的博客 902

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: win7 64 DLL的远程注入技术 及注入dll函数调用
下一篇: 测试是否在虚拟机里运行
xuplus
博客等级 码龄19年 140粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值