icesword 驱动部分分析 by wuyanfeng

PspCidTable句柄表辅助检测隐藏进程 一、获取PspCidTable的地址 1.特征码搜索以下几个函数之一提取Call PspCidTable地址: PsLookupProcessByProcessId() PsLookupProcessThreadByCid() PsLookupThreadByThreadId() 0: kd> u PsLookupProcessByProcessId l 20 nt!PsLoo 阅读详情
cesword 是如何列出隐藏进程?

icesword 是通过 PspCidTable 这个表来遍厉进程的, PspCidTable 是一个没有被 ntoskrnl.exe 导出的。这就涉及到如何定位
PspCidTable 的问题。icesword 是通过搜索特征串的方式定位 PspCidTalbe. PspCidTable 是一个 HANDLE_TALBE 结构.
PsLookupProcessByProcessId 函数中会引用 PspCidTalbe 变量。icesword 从 PsLookupProcessByProcessId 函数的前几十个字节
内搜索 PspCidTalbe 变量。在icesword 里面是不能调试的即使是用 windbg , softice,syser 调试器下断点调试,也是断不住的。
当然了你也不能用调试器调试,因为 icesword.exe 会在一个timer 中不停的重新设置 int 1,int 3 的中断处理函数。设置成
windows ntoskrnl.exe 中的缺省处理函数。即使你用硬件断点寄存器也是不管用的。那有的人就会说既然设置成 windows ntoskrnl.exe
中的缺省处理函数就可以使用 windbg 双机调试.icesword 也做了处理,icesword 会通过 KdDebuggerEnabled 变量判断是否允许内核
调试。如果允许调试的话. icesword 会调用 KdDisableDebugger 函数禁止内核调试。



写第二部分



这里顺便在说两个分析 icesword 中遇到的反调试小陷阱 这里把代码片段列出来,希望作者原谅

.text:000xxxF0   mov [ebp+IoControlCode], eax
.text:000xxxF3   mov eax, [esp+5Ch-6Ch] ; 反调试代码
.text:000xxxF7   push eax
.text:000xxxF8   mov eax, [esp+60h-6Ch]
.text:000xxxFC   pop ebx
.text:000xxxFD   cmp eax, ebx
.text:000xxxFF   jz short loc_1240B ; 如果没有被调试则会跳转
.text:000xxx01   mov eax, 200EDBh
.text:000xxx06   not eax
.text:000xxx08   push eax
.text:000xxx09   pop edi
.text:000xxx0A   stosd

.text:000xxxF3   mov eax, [esp+5Ch+6Ch] 当单步执行到这条指令或者在这条指令上设置断点的时候,因为当调试器在这条指令上弹出的时候会
用到被调试程序的堆栈来保存 EFLAGS,CS,EIP, (如果 int 1,或 int 3 处理函数用任务门就可以解决这个问题。)例如 当代码执行到这条指令时
ESP = 805E4320h   执行完这条指令是 eax 的值为 [ESP+5Ch-6Ch]=[ESP-10h]=[805E4320h-10h]=[805E4310h] 的值。
当单步执行到 .text:000xxxF8   mov eax, [esp+60h-6Ch] 指令的时候 ESP=805E432Ch 以为其中入栈了一个 eax 所以 ESP=805E432Ch,
执行完 .text:000xxxF8   mov eax, [esp+60h-6Ch] 条指令的时候 eax = [ESP+60h-6Ch]=[ESP-Ch]=[805E432Ch-Ch]=[805E4310h]
如果不调试的情况下 读的是同一个地址的值,所以两个值比较应该是相同的 也就是 .text:000xxxFD   cmp eax, ebx 这条指令的比较结果
应该是相同的。这个指令 .text:000xxxFF   jz short loc_1240B 执行后直接跳转到。
如果是被调试器调试的情况下 .text:000xxxFF   jz short loc_1240B 不会跳转。 如果不跳转时下面的代码 会覆盖掉系统的当前 ETHREAD
指针。接下来在调用很多系统函数都会导致系统崩溃,并且是崩溃到系统模块里面,这样给你定位错误带来误导。哈哈



.text:000xxx68   push 1 ; Alignment
.text:000xxx6A   push 40h ; Length
.text:000xxx6C   push CurrentEProcessObject ; Address
.text:000xxx72   call ds:ProbeForRead

这里是故意做个异常来实现跳转。如果你在 .text:000xxx72   call ds:ProbeForRead 指令上单步执行的时候调试器会跑飞了,
也就是说从调试器退出了,没有继续跟踪下去。




pjf




   




QUOTE:
下面是引用wuyanfeng于2005-09-15 21:42发表的icesword 驱动部分分析:
icesword 驱动部分分析

icesword.exe 在执行的时候会放出一个驱动程序 ispubdrv.sys .
icesword.exe 装载 这个驱动,这个驱动安装后就不会卸载。直到系统重新启动。这可能是因为驱动中调用了
PsSetCreateThreadNotifyRoutine 函数.下面是这个函数在 ddk 中的介绍。
.......

呵呵,挺不错。
不卸载倒不是因为用了PsSetCreateThreadNotifyRoutine,初始化那么多,每次运行都弄一遍效

率太低,就是因为这个原因。
另外IS访问文件主要不是靠IoCreateFile,不过在初始化完成前文件部分还不能工作,只能用它

,呵呵, .
这个永久高会是取之无愧呀。

看来你的调试器也很好用,哈哈

高速无限下载文件,请申请vip会员

[1 楼] Posted:2005-09-16 06:14|  


wdynasty



   



不错,分析的很透彻

高速无限下载文件,请申请vip会员

21世纪是搜索的世界,看看BAIDU的股票就知道了。
[2 楼] Posted:2005-09-16 06:30|  


kernel_kernel


   



Syser debugger的作者果然挺牛








wuyanfeng







第三部分


接下来说我们的 PspCidTable 我们找到了 PspCidTable 变量后, PspCidTable [这个 HANDLE_TABLE 的句柄表中,保存着所有进程和线程对象的指针。
PID(进程ID)和 ThreadID(线程ID)就是在这个句柄表中的索引。这个 HANDLE_TABLE 不属于任何进程,也没有链在 HANDLE_TABLE 链上。全局变量
PspCidTable 中是指向这个 HANDLE_TABLE 的指针。这个 HANDLE_TABLE 还有一点和别的 HANDLE_TABLE 都不同,就是它的 HANDLE_TABLE_ENTRY 中的
第一个32bit 放着的是对象体指针(当然需要转换)而不是对象头指针(对象指针就是对象体指针)。] (特别注明 在[]的话不是俺写的是在网上抄来的
这里特别感谢 “JIURL玩玩Win2k进程线程篇 HANDLE_TABLE” 文章的作者:JIURL )
我们之要想到办法遍历这个 PspCidTable 句柄表就可以遍历到系统的所有进程。icesword 为了遍历这个表他使用了系统为公开的 ntoskrnl.exe
的导出函数 ExEnumHandleTable 。

icesword 定位到 ntoskrnl.exe 导出的 ExEnumHandleTable函数。
这个函数是未公开的函数。
这个函数的函数原形可能是 VOID STDCALL ExEnumHandleTable (PULONG HandleTable, PVOID Callback, PVOID Param, PHANDLE Handle OPTIONAL);

其中的参数 PULONG HandleTable 就可以用 PspCidTable 做参数.
PVOID Callback 的类型为 bool (*EXENUMHANDLETABLECALLBACK)(HANDLE_TALBE_ENTRY*,DWORD PID,PVOID Param) 函数指针。
PVOID Param 参数就是传送给回调函数的参数。
PHANDLE Handle OPTIONAL 这个参数俺还没搞懂什么意思。在说俺也用不到他,所以也不管他了随他去吧。

当调用 ExEnumHandleTable 函数的时候 函数在每次枚举到表中的一个句柄时都会调用一次回调函数。

当调用的 Callback 回调函数返回值为 0 时继续枚举句柄表,如果返回 1 时则停止枚举。

高速无限下载文件,请申请vip会员

[5 楼] Posted:2005-09-17 03:13|  




QUOTE:
下面是引用wuyanfeng于2005-09-19 16:04发表的:

因为第一部分写的太细了,因为怕被 rootkit 的作者利用.所以就把第一部分给去掉了.如果需要可以单独和我联系


强烈同意 这里有很多hdx的人。安全第一!


cvcvxk






级别: 驱动牛犊
精华: 0
发帖: 10
威望: 2 点
积分: 10 分
贡献值: 0 点
注册时间:2005-09-07
   



呵呵~只要知道是PspCidTable基本上详不详细对Rootkit maker都一样了~嘿嘿~




cvcvxk





注册时间:2005-09-07
   



icesword.exe 会在一个timer 中不停的重新设置 int 1,int 3 的中断处理函数。设置成
windows ntoskrnl.exe 中的缺省处理函数。

对习惯于HOOK Inline on File的变态――这招没什么用~

高速无限下载文件,请申请vip会员

[12 楼] Posted:2005-09-20 04:21|  


baiyuanfan



   



wuyanfeng老大,你是不是用的硬件调试器呀,怎么绕开is的anti-debug的,呵呵,要不然,你的调试器不使用int3/int1?呵呵




铜锣湾井冈山


   



hook KdDisableDebugger!!!!

高速无限下载文件,请申请vip会员

[14 楼] Posted:2005-09-21 17:24|  


yflibra




   



小弟提供一下ExEnumHandleTable的原型~~~

NTKERNELAPI
BOOLEAN
ExEnumHandleTable (
IN PHANDLE_TABLE HandleTable,
IN EX_ENUMERATE_HANDLE_ROUT
 
VT虚拟化驱动+内存读写+机器码修改源代码 纯c++源代码,不是.sys, 可以修改CPUID和硬盘ID,里面集成了各种钩子处理、隐藏驱动、伪装、PatchGuard、文件保护、窗口保护、拦截数据包、绕过反调试、等等...非常适合拿来做技术研究。 立即下载

相关推荐

电商智能客服Agent开发实战:从零到一构建企业级AI助手

电商智能客服Agent是下一代AI应用的核心形态,它不仅能够回答用户问题,还能自主规划任务、调用工具并执行完整工作流程。本文将深入探讨AI Agent的基本概念、技术实现方式及电商场景中的应用,提供完整的开发流程和代码示例,帮助开发者从零开始构建一个功能强大的电商智能客服系统。通过模块化设计、多轮对话记忆管理和工具集成,这个Agent能够处理订单查询、商品推荐、退换货流程等复杂任务,同时具备企业级的安全性和稳定性保障。通过本文的介绍,读者已经掌握了构建电商智能客服Agent的核心技术与实现方法。

m0_64363449的博客 1365

【】 Intel(R) 800 Series序列网卡 ice 驱动安装

概述 ======== 此驱动程序支持内核版本3.10.0及更新版本。但是,有些功能可能需要更新的内核版本。关联的虚拟功能(VF)驱动程序对于这个驱动程序,是iavf。可以使用ethtool、lspci和ip获取驱动程序信息。 更新ethtool时,说明书可在在本文件中稍后的“附加配置”部分中找到。 目前仅支持将此驱动程序作为可加载模块。英特尔不...

小鱼菜鸟的博客 3405

12V转5V稳压电路详细分析(7805三端稳压,LM2596稳压)

7805线性三端稳压 DCDC的意思是直流变到直流(不同直流电源值的转换),只要符合这个定义都可以叫DCDC转换器,或称之为开关电源或开关调整器。 7805属于常用的线性三端稳压器,输入电压范围不大于35V,输入输出压差2V,最大输出电流1.5A,下图为原理图,其原理简单,使 用方便,深受很多用户的喜爱。但是其不足之处就是效率低,特别是压差越大时其效率越低。比如这里12V转5V的效率为 5V/12V≈41.7%。 如上电路是最经典的7805稳压5V电路,电路中有两个电容,电容的作用如下: ...

a2001444的博客 9万+

[转载]基于pspCidTable的进程检测技术

基于pspCidTable的进程检测技术文章作者:gz1x信息来源:邪恶八进制信息安全团队(www.eviloctal.com)一.     pspCidTable概念及内核调试二.     获取pspCidTable的方法三.     几种进程检测方法的对比四.     anti-pspCidTable技术及其他一.     pspCidTable概念及内核调试-----------------

yaneng的专栏 4534

基于phpstudy搭建pikachu靶场

一、phpstudy下载安装配置 phpstudy介绍 简单介绍一下phpstudy,详细请参考百度解读。pikachu是基于PHP环境搭建的,需要数据库支持,所以装pikachu之前需要先安装它需要的环境,就像你养鱼需要给它提供水环境一样。安装phpstudy能满足pikachu的需求,所以先安装phpstudy。 phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是

ptxybird的博客 1万+

维护测试监控LLM应用

LangFuse: 开源 + SaaS(免费/付费),LangSmith 平替,可集成 LangChain 也可直接对接 OpenAI API;LangSmith: LangChain 的官方平台,SaaS 服务(免费/付费),非开源,企业版支持私有部署;调试 Prompt 的 Playground测试/验证系统的相关指标数据集管理各种指标监控与统计:访问量、响应时长、Token 费等等。

SunnyRivers 1785

天堂W游戏内核驱动保护简单分析(一)

5. PspCidTable内核未导出的句柄表, 保存所有进程和线程的对象, 可以枚举隐藏进程(本质就是枚举句柄表)(可能性很小, 结构偏移不通用)1. 从双向链表中摘除, 取得进程结构指针,将上一个节点指向中下一个节点, 下一个节点的上一个节点指向上一个本进程的上一个节点。6. Csrss进程中的句柄表, 保存着所有的进程列表(本质就是枚举句柄表)(可能性很小, 结构偏移不通用)1. 进程隐藏 NTOpenProcess(本质就是枚举句柄表)(可能性不大)// 获取ExEnumHandleTable。

jian274622701的博客 866

协方差矩阵自适应进化策略(CMA-ES)详解:从基础原理到优化算法

CMA-ES是一种先进的无导数优化算法,基于生物进化原理解决连续域非线性优化问题。该算法通过自适应调整多元正态分布的均值、协方差矩阵和步长参数,自动学习搜索空间结构,无需梯度信息即可高效优化。核心创新包括协方差矩阵的秩1和秩μ更新策略,以及基于进化路径的步长控制机制。CMA-ES具有旋转不变性、标度不变性和全局探索能力,特别适合3-300维的黑盒优化问题,在复杂系统仿真、超参数调优等领域表现优异。算法实现中关键参数如种群大小、学习率等均有自适应设置规则,使其成为连续优化领域的基准算法之一。

qq_42212808的博客 525

枚举进程——PspCidTable

    看Windows内核情景分析的时候看到讲PspCidTable中会保存每个进程和线程的CID,就在想可以通过这个表来获取到每个进程的PID及相关信息,然后网上一搜,已经有N多人通过这种方法来获取进程列表了,Iceword也是有这种方法来枚举进程的。Anyway,还是自己实现一遍吧。当然也借鉴了别人的代码。 NTSTATUS DriverEntry(IN PDRIVER_OBJECT Dr

strongxu的专栏 2065

要理解成本中心与利润中心的根本区别与适用场景,需从 “责任范围、考核核心、管理目标” 三个核心维度切入,同时明确二者在企业管理体系中的联动关系

摘要: 成本中心与利润核心区别在于责任范围、考核目标和管理权限。成本中心仅对成本负责(如生产、行政部门),考核成本控制能力;利润中心需同时管控成本与收入(如独立产品线、区域分公司),以利润为核心指标。选择标准取决于单元是否拥有收入决策权:无收入权的支持/执行部门设为成本中心,能独立经营、核算盈亏的单元设为利润中心。二者协同运作,成本中心为利润中心提供基础支持,利润中心的需求动态影响成本中心资源配置,共同实现企业整体目标。划分本质是确保考核指标与责任范围匹配,避免管理失效。

金牌架构师 659

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3278

驱动遍历句柄表

 驱动遍历句柄表附加第二个方法的反汇编代码 其中还有对其拦截的方式的一些需要HOOK处比如伪造句柄表 因为大量使用硬编码所以此份代码通用性不强一切均在虚拟机XP3下操作 #include "ntddk.h" typedef struct _EX_PUSH_LOCK {  //  // LOCK bit is set for both exclusive and shared acq

落笔飞花笑百生的博客 2266

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3604

枚举进程——PspCidTable zz

http://blog.youkuaiyun.com/strongxu/article/details/4959757 看Windows内核情景分析的时候看到讲PspCidTable中会保存每个进程和线程的CID,就在想可以通过这个表来获取到每个进程的PID及相关信息,然后网上一搜,已经有N多人通过这种方法来获取进程列表了,Iceword也是有这种方法来枚举进程的。Anyway,还是自己实现一遍吧。

摸爬滚打 1110

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

利用伪造内核文件来绕过IceSword的检测

创建时间:2005-12-20文章属性:转载文章提交:backspray (nimaozhi_at_163.com)作者:倪茂志邮件:backspray008@gmail.com完成于:2005.12.20文章分为八个部分:                一、为什么需要伪造内核                二、伪造内核文件                三、隐藏进程               

斑竹的程序设计专栏 3478

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

枚举PspCidTable利用API

<br />看Windows内核情景分析的时候看到讲PspCidTable中会保存每个进程和线程的CID,就在想可以通过这个表来获取到每个进程的PID及相关信息,然后网上一搜,已经有N多人通过这种方法来获取进程列表了,Iceword也是有这种方法来枚举进程的。Anyway,还是自己实现一遍吧。当然也借鉴了别人的代码。<br />NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)<br />

Sunny_wwc的专栏 1821

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

PspCidTable进程枚举

-------------------------------------这是分割线--------------------------------------- Windows句柄表格式 句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中的索引。Windows2000使用的是固定的三层句柄表,而WindowsXP和Windows2003都是使用的动态可扩展的

rongwenbin的专栏 1681

驱动保护进程 句柄降权 杀软自保 游戏破图标技术原理和实现

驱动保护进程 句柄降权 杀软自保 游戏破图标技术原理和实现

鬼手的博客 1万+

vxk的rootkit 技术小结

by vxkMy Root Kit Note 0. What the Root kit Real Mean For?Root Kit is a kind of tools to hide itself or other files or process from normal users eyes or take privileges for whom could control i

4936

指定PID句柄降权

遍历指定PID进程的私有句柄表,如果发现其有DbgView.exe进程的EPROCESS则将其句柄权限进行修改,俗称句柄降权。

qq_45844442的博客 729

pspCidTable

<br /><br />一.                        pspCidTable概念及内核调试<br />-----------------------------------------------------<br /><br />pspCidTable是内核未导出的HANDLE_TALBE结构,它保存着所有进程和线程对象的指针。<br />只要能遍历这个PspCidTable句柄表,就可以遍历到系统的所有进程,包括所有隐藏进程,除非你抹掉pspCidTable...<br /><br

Mr.Out的专栏 1293

VT调试器 X64

想了很久还是发上来吧,烂在硬盘里面没用,共享既是进步~ 前排感谢在我学习Intel-VT技术困难的时候各位朋友的帮助 Tesla.Angela 有人吗? cvcvxk viphack sxpp Kalong 以及国外友人asamy 以上排名不分先后 这份代码在WIN7 64 打了补丁的情况下能正常工作 不打补丁需要对THREAD的结构体做个修改 才可以正常运行 代码部分: 这

落笔飞花笑百生的博客 8389

隐藏进程

本人收集与网络,不知原作者是谁……一:序言下列情况不在讨论之中(没进程)1 通过CreateRemoteThread Inject代码到另一个进程(有种病毒就用这种方法,实现内存感染的;其实还有更多应用)2 通过CreateRemoteThread LoadLibray一dll到另一个进程(屏蔽Ctrl+Alt+Del,就是通过这种方法和SetWindowLog实现)二:进程隐藏1 Hook/In

yaneng的专栏 1346

pspcidtable杂谈

今天再次看了gz1X牛的文章,回忆了许多知识. 哈哈. 玩了很长时间游戏,写点儿文字算是对自责的一种安慰 要说R0枚举隐藏进程, 只是对没有抹掉PspCidTable而言的.gz1X牛提示了2种方法:Quote::1. 利用未导出的ExEnumHandleTable函数2. 获取PHANDLE_TABLE_ENTRY等,然后PsLookupProcessByProcessId 偶觉得都

yaneng的专栏 1719

bcb隐藏窗口_[转载] 检测隐藏进程

BOOLEANExEnumHandleTable(INPHANDLE_TABLEHandleTable,INEX_ENUMERATE_HANDLE_ROUTINEEnumHandleProcedure,INPVOIDEnumParameter,OUTPHANDLEHandleOPTIONAL)/*++RoutineDescription:Thisfunctionenumer...

weixin_33245246的博客 395
上一篇: 熊猫烧香来源追查,从病毒行为中揭开冰山一角
下一篇: 逆向未知dhook.sys驱动源代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值