Kaspersky 7.0添加系统服务分析

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

一、 测试版本和环境
卡巴斯基反病毒软件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,分析完毕。根据以上分析,你完全可以写一个自己的实现代码。
 

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 : 驱动卸载成功... ] 立即下载

相关推荐

点云直线检测-3DLineDetection复现

点云直线分割-Fast 3D line detection

阁楼 8156

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

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

gitblog_00284的博客 800

Shopee App加密算法逆向实战:从libshpssdk.so到x-sap-ri的生成机制

本文详细解析了Shopee App核心加密参数x-sap-ri的生成机制。通过逆向分析libshpssdk.so动态库,揭示了其采用9套算法动态切换的复杂签名逻辑,并分享了从抓包定位、Frida动态调试到Unidbg模拟执行的全过程实战经验,为移动应用安全研究提供了完整的技术路径。

weixin_29323551的博客 1328

Kaspersky 7.0 HOOK SSDT分析

Kaspersky 7.0 HOOK SSDT分析-卡巴驱动klif.sys逆向工程作者:CloudEmail:shangguanwan2@yahoo.cn2007-11-6一、 测试版本和环境卡巴斯基反病毒软件7.0 版本7.0.0.125d (简体中文版)平台:Windows XP Professional(5.1,版本2600)   Mobile Inter? Celeron

shangguanwaner的专栏 1598

手把手移植st7701s驱动:MT6763+安卓8.0屏幕适配保姆级教程

本文详细介绍了在MT6763平台上移植ST7701S驱动的完整流程,涵盖从LK层到Kernel层的适配方案,特别针对安卓8.0系统的特殊要求。通过MIPI转RGB屏幕适配的实战教程,帮助开发者解决常见显示问题,包括无显示、色彩异常和屏幕错位等,并提供高级调试技巧如彩条测试模式和闪屏解决方案。

weixin_29186249的博客 157

VisionMaster 4.2.0安装

按照顺序安装。

XuXing_java的专栏 3790

KasperskyHook 项目常见问题解决方案

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

gitblog_00928的博客 790

ANSYS Fluent 2023R2实战:用欧拉多相流模型搞定流化床模拟(附详细参数避坑)

本文详细解析了ANSYS Fluent 2023R2中欧拉多相流模型在流化床模拟中的应用,包括模型选择、材料属性设置、相间作用力配置及初始化技巧。特别针对高颗粒浓度工况提供参数优化方案,帮助工程师提升模拟精度与效率,适用于化工、能源等领域的流化床反应器设计。

weixin_30938149的博客 269

KeServiceDescriptorTableShadow和KeAddSystemServiceTable函数的关系

KeServiceDescriptorTableShadow和KeAddSystemServiceTable函数的关系

linux-0.11调试教程 997

深入解析Carry4的内部结构与工作原理

本文深入解析了Xilinx/AMD FPGA中的核心硬件资源Carry4的内部结构和工作原理。作为实现超前进位的关键物理电路,Carry4通过其CI、DI、S、O、CO等端口,高效处理4位算术运算的进位逻辑。文章通过端口详解、结构分析和实战计算示例,揭示了其如何加速加法、减法等运算,并探讨了其在优化FPGA设计时序与资源利用中的关键作用。

n4o5p6q7r的博客 501

ROS下UR+Realsense相机进行手眼标定

手眼标定主要是用来确定相机坐标系和机械臂坐标系之间的转换关系,从而实现后续的抓取等任务。

weixin_42157689的博客 7573

Exploiting Kaspersky Antivirus 6.0-7.0

By: EP_X0FF   Exploiting Kaspersky Antivirus 6.0-7.0The reasons why we decided to post this material on rootkit.com is simple:Well-known and really good Kaspersky Antivirus very long time suffers

1049

uniapp - 实现免费OCR文字识别方案,用户上传图片后进行扫描识别获取图片上的文字,uniApp纯前端做图片OCR识别——无需服务器进行OCR识别插件(不需要依赖任何SDK或第三方API服务)

uniapp实现orc识别免费的插件识别不花钱,无需第三方OCR文字识别API,uniApp拍照或者选择图片免费识别,纯前端不需要服务器,Uniapp提取图片上的文字,本地ocr识别技术,uni-app图片OCR识别文本,uniapp有没有免费的ocr识别组件,uniapp前端实现文字识别,身份证识别,营业执照识别 (兼容APP、H5、小程序 不需要任何SDK)跨端无SDK方案:Uniapp实现OCR文字,离线OCR识别,uniapp tesseract.js实现文字识别,uniapp文字识别无需依赖sdk

🏆 前端领域优质创作者 4250

Pandora与CVE漏洞分析:Kaspersky CVE-2023-23349等安全漏洞实战利用指南 [特殊字符]

Pandora是一款强大的红队工具,专门用于从各种密码管理器的内存中提取主凭据和条目。这款工具能够帮助安全研究人员和渗透测试人员识别CVE-2023-23349等关键安全漏洞,揭示密码管理器在内存保护方面的安全隐患。在本文中,我们将深入探讨Pandora工具如何利用CVE-2023-23349漏洞从Kaspersky密码管理器中提取敏感信息,并提供完整的安全分析指南。 ## 📊 密码管理器安全

gitblog_00531的博客 1067

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Kaspersky for Linux 正式发布!

卡巴斯基宣布其家用产品线新增支持 Linux 系统的版本:Kaspersky for Linux ,这是卡巴斯基针对 Linux 系统推出的家用安全软件版本,旨在为家庭用户提供全面的安全防护。此款产品线纳入卡巴斯基“Standard”、“Plus”、“Premium”三种订阅方案,所有 Linux 功能一致,区别在于可选保护的其他操作系统类型。向更快、更强、更安全、更现代的 Linux 桌面进化!Arch Linux 2025.11.01发布,全新内核,向更强、更现代、更纯净的Linux进化!

民工哥的博客 339

lwip-2.0.3

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

Kaspersky Internet Security/Kaspersky Anti-Virus 2009(8.0.0.506) 中文特别版(正式版)

 Kaspersky Internet Security/Kaspersky Anti-Virus 2009(8.0.0.506) 中文特别版(正式版)  Kaspersky Internet Security/Kaspersky Anti-Virus 2009(8.0.0.506) 中文特别版(正式版):软件名:Kaspersky Internet Security/Kasper

穆穆-movno1 908

WINCC7.3破解文件

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

Haxdoors of the Kaspersky Antivirus 6/7

 Haxdoors of the Kaspersky Antivirus 6/7================================Preamble================================Kaspersky Antivirus one of the most technically modern antiviruses available today. It

988

KIS7.0在windows 2003安装

1、下载 编辑Setup文件的工具,orca微软提供的功能强大的编辑器   地址:http://download.csdn.net/source/2305772、先安装kis7.0 (最好买个正版的,不贵。这样就不用担心被封号了 !_!  )  会出来这个画面:然后去C:/Documents and Settings/你的用户名/Local Settings/Temp

枫的专栏 2819

Kaspersky Flaw(5) -- 修改没有输出和不是系统服务的内核函数

修改没有输出和不是系统服务的内核函数KAV的内核补丁还不仅局限于系统服务,其中最危险的就是挂钩一个既不是输出函数又不是系统服务的内核函数nt!SwapContext(因此并没有可靠的办法,只能从编码的特殊痕迹来获取它的地址)。nt!SwapContext在内核每一次上下文切换的时候都会被调用,以便进行内部数据的保存。作者认为,通过不可靠的编码特殊痕迹来对未输出的重要核心函数进行补丁的方式并

1088

安装 kaspersky 6.0 到 win2003

安装 kaspersky 6.0 到 win2003成功验证:在win2000,win2003上安装卡巴6的方法-出错后成功安装在win2000、win2003上安装卡巴6的方法http://www.360doc.com/showWeb/0/0/206834.aspx1.需要下载orca.msi这一修改msi文件的工具,安装,它的版本号为3.1.4000.1830,是win2003sp1SDK里的

张宏双的专栏 876

Portable Kaspersky Internet Security v6.0.1.380 (KIS)

Kaspersky Internet Security 6.0 (KIS) is a fully integrated solution that protects your computer from all of the most common Internet threats, including viruses, hacker attacks, adware, spam and spy

Linhanshi Blog 1089

卡巴斯基 Kaspersky Internt Security /Anti-Virus2010(更新

下载 (201.61 KB)2009-5-25 13:39 [attach]62273[/attach]软件名:Kaspersky Internet Security 2010版本:9.0.0.459语言:简体中文类型:汉化补丁适合32位系统:2000/XP/Vista来源:精睿.网络安全汉化:麦田守望者、鲁西西安装方法:打开 Kaspersky 软件的主界面,点击右侧界面右下角的"S...

望涛听海 223
上一篇: 构造 Create IRP
下一篇: 感染PE文件的一个简单实例
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值