Kaspersky 7.0 HOOK SSDT分析

恶意软件分析实战:从病毒样本测试到安全防御体系构建 恶意软件分析是网络安全领域的核心技术之一,它涉及对可疑代码的静态与动态行为剖析,以理解其攻击原理和潜在危害。这项技术的核心价值在于能够揭示高级持续性威胁(APT)的隐蔽手法,帮助安全研究人员和开发者识别防御盲区,从而构建更有效的安全解决方案。在实战场景中,通过搭建高度隔离的虚拟化环境,结合进程监控、注册表快照对比等动态分析工具,可以安全地观察样本的持久化、进程注入等对抗行为。本文基于一个真实的病毒样本测试案例,深入探讨了恶意软件如何利用Rootkit、驱动对抗等技术绕过主流安全软件的检测,并系统介绍了从环境 阅读详情

作者:Cloud
Email:shangguanwan2@yahoo.cn
2007-11-6

一、 测试版本和环境
卡巴斯基反病毒软件7.0 版本7.0.0.125d (简体中文版)
平台:Windows XP Professional(5.1,版本2600)
   Mobile Inter? Celeron? CPU 1.60GHz
工具:IDA Version 5.0.0.879(32bit)
目标文件:卡巴的核心驱动klif.sys,位于SystemDirectory/system32/drivers目录下

二、目标
通过逆向工程,分析卡巴是怎样向系统服务函数表(SSDT)添加自己的服务函数的,并写出自己的实现。

三、 分析
使用IDA分析在sub_291A0处发现驱动向SSDT添加自己的系统服务函数。基本流程就是分配内存,构造一个自己的SSDT,再把系统的KeServiceDescriptorTable改为指向这个构造的SSDT。最后还要修改一个叫KeAddSystemServiceTable的结构。

下面来一步一步分析:

sub_291A0 proc near

var_pKeAddSystemServiceTable= dword ptr -8
var_NewSerNum= dword ptr -4

sub     esp, 8
mov     eax, ds:KeServiceDescriptorTable
push    ebx
push    ebp
push    esi
mov     esi, [eax+8]
push    edi
add     esi, 0Dh        ; 增加SSDT的服务函数的数目,
                        ; 之后会添加一些自己的系统服务
mov     [esp+18h+var_NewSerNum], esi
call    CheckKeAddSystemServiceTable
test    eax, eax
mov     [esp+18h+var_pKeAddSystemServiceTable], eax
jnz     short loc_291D0

驱动先取得SSDT表的指针,获取系统服务数目,保存在esi中,然后把它增大0Dh(13d),之后会增加13个自己的系统服务到SSDT。然后调用了CheckKeAddSystemServiceTable,在这个函数中将KeAddSystemServiceTable函数代码所在的页进行确认,确保代码全部被交换到内存中。返回后eax保存的就是KeAddSystemServiceTable函数的地址。

loc_291D0:
mov     ecx, ds:KeServiceDescriptorTable
mov     edi, ds:ExAllocatePoolWithTag
lea     eax, ds:0[esi*4]
push    2D536542h       ; Tag
mov     edx, [ecx+8]    ; ecx+8,指向SSDT中系统服务数
push    eax             ; NumberOfBytes
push    0               ; PoolType
mov     ds:NumOfOldSSDT, edx
call    edi ; ExAllocatePoolWithTag ; 在SSDT中分配空间以保存自定义的
                        ; 服务函数
mov     ebx, eax
test    ebx, ebx
jz      loc_29352

然后开始分配内存保存自定义的SSDT,大小等于新的系统服务数*4,返回的地址保存在ebx。

push    2D536542h       ; Tag
push    esi             ; NumberOfBytes
push    0               ; PoolType
call    edi ; ExAllocatePoolWithTag
mov     ebp, eax
test    ebp, ebp
jz      loc_2934B
接着在再次分配内存,大小esi,用于保存参数表。返回的地址在ebp。然后就开始构造SSDT和SSPT。

mov     eax, ds:KeServiceDescriptorTable
mov     edi, ebx
mov     ecx, [eax+8]
mov     esi, [eax]      ; 取得SSDT的基地址
shl     ecx, 2          ; 即ecx*4
mov     eax, ecx
shr     ecx, 2          ; 将整个SSDT复制到
                        ; 刚才第一次分配的内存中
rep movsd
mov     ecx, eax
and     ecx, 3
rep movsb
mov     eax, ds:KeServiceDescriptorTable
mov     edi, ebp
mov     ecx, [eax+8]
mov     esi, [eax+0Ch]  ; [eax+0ch]指向参数表的基地址
mov     edx, ecx        ; 复制参数表
shr     ecx, 2
rep movsd
mov     ecx, edx
and     ecx, 3
rep movsb
mov     eax, ds:KeServiceDescriptorTable
mov     esi, offset off_33D0C ; 这里的off_33D0C指向的就是卡巴自己的
                        ; 系统服务,分析卡巴逻辑最重要的就是这里
mov     ecx, [eax+8]
lea     edi, [ebx+ecx*4]
mov     ecx, 0Dh        ; 复制自定义系统服务到刚才
                        ; 第一次分配的内存中去
rep movsd
mov     edx, ds:KeServiceDescriptorTable
mov     ecx, dword_33D40 ; 这是卡巴自己的服务函数的参数信息
                        ; 拷贝这些信息到SSPT中去
xor     esi, esi
mov     eax, [edx+8]
add     eax, ebp
mov     [eax], ecx
mov     edx, dword_33D44
mov     [eax+4], edx
mov     ecx, dword_33D48
mov     [eax+8], ecx
mov     dl, byte_33D4C
mov     [eax+0Ch], dl   ; 至此,已经构造了一个完整的SSDT
mov     eax, ds:KeServiceDescriptorTable
cmp     [eax+4], esi
jz      short loc_29310

以上注释写得很清楚,就不说了。最后的地方它测试KeServiceDescriptorTable结构的ServiceCounterTableBase成员,等于零就可以修改KeServiceDescriptorTable,完成HOOK。不等于零的情况下会重新分配内存换一种方式构造SSDT,如果你有兴趣可以自己分析。

loc_29314:
mov     ecx, ds:KeServiceDescriptorTable
pop     edi
pop     esi
mov     [ecx], ebx      ; 修改SSDT entry,指向卡巴构建的SSDT
mov     edx, ds:KeServiceDescriptorTable
mov     ecx, [esp+10h+var_NewSSDTNum]
mov     [edx+0Ch], ebp  ; 修改参数表地址
mov     edx, ds:KeServiceDescriptorTable
mov     [edx+8], ecx    ; 更新服务数目
mov     [eax+0Ch], ebp
mov     [eax], ebx
mov     [eax+8], ecx
pop     ebp             ; 从这里的操作来看,KeAddSystemServiceTable
                        ; 和KeServiceDescriptorTable的结构应该是相同的
mov     ds:flag_bSuccess, 1 ; 修改标志,成功
xor     eax, eax
pop     ebx
add     esp, 8
retn

OK,分析完毕。根据以上分析,你完全可以写一个自己的实现代码。 

KasperskyHook:使用卡巴斯基的虚拟机管理程序在Windows上执行Hook系统调用 卡巴斯基挂钩 使用卡巴斯基的虚拟机管理程序在Windows上执行Hook系统调用 它是如何工作的? 当支持硬件虚拟化以提供额外保护时,卡巴斯基将利用其虚拟机监控程序。 它通过更改IA32_LSTAR指向其自己的syscall处理程序(基本上是KiSystemCall64的副本)来挂接系统调用,以便将系统调用分派到其自己的处理程序(在进行初始化时,它会构建自己的分派表)。 该项目将加载klhk.sys(卡巴斯基的虚拟机管理程序模块)和与之连接的自定义驱动程序,以颠覆系统并挂接系统调用。 你为什么写这个? 在研究卡巴斯基组件时,我认为编写一个自定义项目是一个有趣的主意,该项目使我可以使用卡巴斯基的虚拟机管理程序来挂接系统调用,以更仔细地了解其功能。 构建步骤-如何使用它 下载 , ,克隆此存储库并构建解决方案。 确保KasperskyHook.sys和KasperskyHookLoad 立即下载

相关推荐

R0层获取ShadowSSDT函数原始地址实例

本实例由VS2008开发,在提供了一套驱动开发框架的同时,又演示了如何获取Shadow SSDT表函数原始地址的办法。 主要函数:ULONG GetShadowSSDT_Function_OriAddr(ULONG index); 原理说明: 根据特征码搜索导出函数KeAddSystemServiceTable来获取Shadow SSDT基址,以及通过ZwQuerySystemInformation()函数获取win32k.sys基址,然后解析PE定位到Shadow SSDT在win32k.sys的偏移地址,并通过进一步计算来得到Shadow SSDT表函数的原始地址。 这里只测试了三个函数:(460)NtUserMessageCall、(475)NtUserPostMessage和(502)NtUserSendInput,具体使用时可以举一反三,网上完整的源代码实例并不太多,希望可以帮到真正有需要的朋友。 系统环境: 在WinXP SP3系统 + 瑞星杀毒软件 打印输出: [ LemonInfo : Loading Shadow SSDT Original Address Driver... ] [ LemonInfo : 创建“设备”值为:0 ] [ LemonInfo : 创建“设备”成功... ] [ LemonInfo : 创建“符号链接”状态值为:0 ] [ LemonInfo : 创建“符号链接”成功... ] [ LemonInfo : 驱动加载成功... ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP 开始... ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP Enter IRP_MJ_DEVICE_CONTROL... ] [ LemonInfo : 获取ShadowSSDT表 (460)NtUserMessageCall 函数的“当前地址”为:0xB83ECFC4,“起源地址”为:0xBF80EE6B ] [ LemonInfo : 获取ShadowSSDT表 (475)NtUserPostMessage 函数的“当前地址”为:0xB83ECFA3,“起源地址”为:0xBF8089B4 ] [ LemonInfo : 获取ShadowSSDT表 (502)NtUserSendInput 函数的“当前地址”为:0xBF8C31E7,“起源地址”为:0xBF8C31E7 ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP_MJ_DEVICE_CONTROL 成功执行... ] [ LemonInfo : 派遣函数(DispatchRoutine) IRP 结束... ] [ LemonInfo : UnLoading Shadow SSDT Original Address Driver... ] [ LemonInfo : 删除“符号链接”成功... ] [ LemonInfo : 删除“设备”成功... ] [ LemonInfo : 驱动卸载成功... ]

探秘KasperskyHook:利用卡巴斯基虚拟化技术的系统调用钩子

在这个充满挑战和创新的时代,了解并掌握深层系统运作机制对于开发者而言至关重要。今天,我们要带您深入探索一个独特且极具教育意义的开源项目——**KasperskyHook**。这个项目不仅展现了技术深度,更激发了对系统安全领域的深刻思考。 ## **项目介绍** **KasperskyHook**是一个面向Windows操作系统的开源工具,它巧妙地利用了卡巴斯基杀毒软件内置的hypervisor...

gitblog_00284的博客 800

ZYNQ新手必看:5分钟搞定SD卡与QSPI Flash双启动模式配置(附常见问题排查)

本文为ZYNQ开发者提供了SD卡与QSPI Flash双启动模式的完整配置指南与深度排错方法。详细解析了从BootROM、FSBL到BOOT.bin的启动链条,并分步讲解了在Vivado/Vitis中的硬件配置、软件工程创建及BOOT.bin文件生成流程。针对SD卡格式化、文件放置以及QSPI Flash烧录中的常见陷阱(如版本差异、时钟配置)给出了具体解决方案和排查清单,帮助开发者快速实现可靠的产品启动与程序固化。

ll5678的博客 932

KasperskyHook 项目常见问题解决方案

KasperskyHook 是一个开源项目,它利用 Kaspersky 的 hypervisor 在 Windows 系统中挂钩系统调用。通过改变 IA32_LSTAR 寄存器指向,项目将系统调用重定向到自定义的处理器,从而实现对系统调用的监控和控制。该项目主要用于研究和分析 Kaspersky 组件的工作原理,并且以教育目的为主。项目的主要编程语言是 C++。 ## 2. 新手在使用这个项目时...

gitblog_00928的博客 790

别再只盯着报点率了:聊聊电容触摸屏算法里那些不为人知的‘软实力’

本文深入探讨了电容触摸屏算法中常被忽视的‘软实力’,包括环境噪声干扰、信号衰减补偿和多物理场耦合等核心挑战。通过对比消费电子与工业场景的算法需求,揭示了触摸算法在不同应用中的技术分野。文章还提供了实用的算法评估方法和前沿发展趋势,帮助开发者全面了解电容触摸屏技术的隐秘战场。

weixin_42524276的博客 389

哨兵一号数据snap预处理_利用SNAP软件进行Sentinel-1A卫星微波影像的预处理

利用SNAP软件对雷达影像进行预处理,主要包括热噪声去除、轨道文件校正、辐射定标、滤波校正、多普勒地形校正,最终获得入射角和后向散射信息。数据:本次实验所用数据为哨兵一号(Sentinel-1A)干涉宽幅模式(Interferometric Wideswath,IW)下经过多视处理和地距转换的GRD格式产品一般处理流程如下:0 SNAP软件安装软件安装:安装成功后打开SNAP后如图所示:1 数据...

weixin_30000407的博客 1万+

KeServiceDescriptorTableShadow和KeAddSystemServiceTable函数的关系

KeServiceDescriptorTableShadow和KeAddSystemServiceTable函数的关系

linux-0.11调试教程 997

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

Kaspersky 7.0添加系统服务分析

一、 测试版本和环境卡巴斯基反病毒软件7.0 版本7.0.0.125d (简体中文版)平台:Windows XP Professional(5.1,版本2600)   Mobile Inter? Celeron? CPU 1.60GHz工具:IDA Version 5.0.0.879(32bit)目标文件:卡巴的核心驱动klif.sys,位于SystemDirectory/system32/dri

744

配电网故障重构/孤岛划分/故障恢复

程序主要复现《基于GA_BFGS算法的配电网故障恢复性重构研究_郑海广》,采用matlab编程软件实现,依据网络结构和DG供电方式对配电网进行孤岛划分,将含有 DG 的配电网拓扑结构看成一个树,搭建成连通图模型,使得将孤岛的划分变成了求取最小生成树,以网损和开关开断次数作为目标,采用 IEEE33 节点配电网为算例,通过遗传算法寻优计算,从而得到最佳的重构方案。

zhangxd212489的博客 2500

免费教你快速学会分析运算放大器电路(保证学会)

本文旨在学习如何快速简单地对运算放大器进行分析

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 1万+

Haxdoors of the Kaspersky Antivirus 6/7

By: EP_X0FF Haxdoors of the Kaspersky Antivirus 6/7 ================================ Preamble ================================ Kaspersky Antivirus one of the most technically modern antiviruses avai

1201

100天精通Python(数据分析篇)——第53天:初识pandas模块_基础介绍

一、初始pandas 1. 什么是pandas? 2. 为什么要学习pandas? 3. pandas的优势 4. 下载安装pandas 二、Pandas的数据类型 1. Series 2. DataFrame

努力让自己发光,对的人才能迎着光而来 17万+

Ruining the Rustock.C rumors and myths and Kaspersky Lab role

http://www.rootkit.com/newsread.php?newsid=885 Ruining the Rustock.C rumors and myths and Kaspersky Lab role 1 序言2 Rustock 的新特点,集合的更多信息,制作检测工具。3 Rootkits roadmap(略)4 Alexander Goste

1240

[Dify] HTTP 请求节点总是调不通?先把请求头、参数、变量和返回 JSON 拆开查

这篇文章围绕 Dify HTTP 请求节点调不通、接口能通但流程不稳定、返回 JSON 后续节点读不到等问题展开,从 Method、URL、Header、Body、变量映射和返回字段提取几个角度梳理排查顺序。适合正在把 Dify Workflow 接入企业微信、CRM、工单系统或内部接口的读者阅读,帮助你把接口调用从一次性跑通推进到可复用、可验证的业务流程。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 3944

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

多款个人防火墙产品存在本地SSDT Hook漏洞

多款个人防火墙产品存在本地SSDT Hook漏洞 该文章转自 联信软件 【绿盟科技授权,赛迪发布,谢绝任何网站转载,违者,赛迪网将保留追究其法律责任的权利!】 发布日期:2007-09-18 更新日期:2007-09-18 受影响系统: Zone Labs ZoneAlarm 7.0.362.000 ISS ...

weixin_34409357的博客 94

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

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

卡巴6安全防护机制的点滴

感谢vxk,xyzreg的文章。击败安全系统系列(1)之 Kaspersky Internet Security / Kaspersky AntiVirus 6.0         2006年 5月15日,著名的反病毒安全软件厂商KasperskyLab发布了划时代的安全软件套装Kaspersky Internet Security 6(简称KIS6)以及 Kaspersky AntiViru

2138

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

KasperskyHook 开源项目安装与使用指南

KasperskyHook 是一个专门针对 Kaspersky(卡巴斯基)防病毒软件的挂钩技术实现的开源项目。本节将详细介绍其核心目录结构及其重要组件。 ``` . ├── README.md # 项目说明文件 ├── src # 源代码主目录 │ ├── Hook.cpp # 主要挂钩逻辑实现 │ ├──...

gitblog_00391的博客 419

KasperskyHook 项目推荐

KasperskyHook 是一个开源项目,旨在通过利用 Kaspersky 的 hypervisor 技术来钩取 Windows 系统调用。该项目的主要编程语言是 C++,适合有一定系统编程经验的开发者使用。 ## 2. 项目核心功能 KasperskyHook 的核心功能是通过 Kaspersky 的 hypervisor 模块(klhk.sys)来钩取 Windows 系统调用。具体来说...

gitblog_00769的博客 324

ShadowSSDT hook

ShadowSSDT保存在win32k.sys中,未导出,不是常驻内存。 采用硬编码,查到某些加载了shadowSSDT进程,所以找一个CSRSS进程,然后KeStackAttachProcess到一个有GUI线程的进程中,csrss.exe就刚好有。这个进程特征是句柄表中Portobject(type21)句柄是\\Windows\\ApiPort的PID就是就是。 然后考虑下标:下标只能硬...

kernweak的博客 572
上一篇: 黑客的社会工程攻击新技术:机遇型攻击
下一篇: 深入浅出secdrv.sys本地提权0day Poc
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值