IceSword&Rootkit Unhooker驱动简析

Rootkit Unhooker驱动逆向分析  这个驱动本来准备端午节搞的,但后来端午节去了躺北京玩了几天,也就搁置了...最近连续花了4个晚上,大致把它搞的差不多了,有些收获...初学 window驱动,水平很菜,有些东西我也未必清明,加上3环的代码还没有吃透,期间也没有用调试器跟踪,全是IDA(F5)静态分析的,谬误在所难免, 高手请飘过,希望对菜鸟学习有点帮助.1.SSDT检测这个功能有三个IoControlCode与之对应,他们分别是 阅读详情

IceSword版本:1.20cn 修订号:061022
----------------------------------------------------

0. 进程
  (略)

1. 端口
  IS调用IoBuildDeviceIoControlRequest分别向Tcpip.sys所创建的TCP设备对象和UDP设备对象发送IRP,在输出缓冲区中将返回端口/IP/状态/PID的结构数组(DS也是这么搞的,只不过没关联到进程)。

2. 驱动
  IS在驱动部分中通过调用NtQuerySystemInformation (SYSTEMMODULEINFORMATION) 来枚举内核模块,这里顺便插一句,在应用部分中,IS调用EnumServiceStatusExA函数把所有已运行模块枚举出来。每当枚举出一个模块时,到注册表中查找其ImagePath值,并与在内核部分列举出来的相应模块对比路径,若路径相同则认为已存在,若不同或没找到则说明是隐藏模块。

3. 注册表
  IceSword中注册表处理比较简单,即调用ZwOpenKey,ZwQueryKey,ZwClose,ZwEnumerateKey,ZwEnumerateValueKey来枚举。在调用它们之前都要对其前几十字节进行恢复。

4. 文件系统
  这部分算是重点了,也是IS处理得比较巧妙的地方,即采用所谓的Raw FSD I/O来枚举文件和目录。其实就是调用IoAllocateIrp,然后自己填好各个域(先发IRP_MJ_CREATE,再发IRP_MJ_DIRECTORY_CONTROL(IRP_MN_QUERY_DIRECTORY)),最后“直接”发到ntfs.sys/fastfat.sys的DispatchCreate和DispatchDirecotryControl派遣例程,但这里有两个问题需要注意:

a. IS在填充IRP_MJ_DIRECTORY_CONTROL的IRP时,在下层堆栈中设立了SL_RETURN_SINGLE_ENTRY标志,这就直接导致FSD每次只会返回给我们一个FILE_BOTH_DIRECTORY_INFORMATION结构,而不是全部返回(DS是全部返回的)。当IoStatus.Status == STATUS_NO_MORE_FILES时确认枚举完毕。

b. IS是有办法直接定位到上面说的派遣例程的地址的(通过特征搜索),人家也没直接调用IoCallDriver,而是直接call过去的,并且会变态的不停恢复派遣例程的前几十个字节,所以你用什么FSD dispatch routine table HOOK,什么FSD HOOK都白扯。  


RkU版本:3.30.150.400
------------------------------------------------

0. 进程
  (略)

1. 驱动
"Hidden drivers detection
Detection of drivers hidden from Windows API
combines four different methods of detection and including special five (c) Stealth Walker technology
and six (c) KMSE - Kernel Memory Scanning Engine"   ---- RkU

  正如其在帮助文档中所说的那样,RkU确实费了一定量代码在驱动枚举模块上,分析时差点被它搞疯,还是分条列举吧:
a. 遍历IoDriverObjectType对象类型的类型链表(POBJECT_TYPE->TypeList),这样可以获得所有DRIVER类型的对象体信息,也即DRIVER_OBJECT结构。然后取出:PDRIVER_OBJECT->DeviceObject,再遍历DeviceObject->AttachedDevice,得到相应DRIVEROBJECT信息,这些东西凡是不重复的统统放入输出缓冲区。
b. 遍历IoDeviceObjectType对象类型的类型链表,思路同上。

  当然a和b成功实现枚举的前提是NtGlobalFlags变量设置了Maintain type list标志,否则输出缓冲区什么也没有。

c. 先调用ZwOpenDirectoryObject打开目录对象获得句柄,然后调用ObReferenceObjectByHandle获得目录对象的指针(其结构为OBJECT_DIRECTORY),然后开始枚举:    
I. 先从HashBuckets数组中取得索引为0的对象目录项指针
II. 判断是否为0,若为0则取下一项。
III. 若不为0,取得POBJECT_DIRECTORY_ENTRY->Object,即对象体。然后根据对象头Object_Header中的类型域判断是否是IoDriverObjectType或IoDeviceObjectType,按照a,b的方式分别处理。若都不是则判断是否是“目录”类型,若是则递归枚举。否则,从POBJECT_DIRECTORY_ENTRY->ChainLink中取下一项继续遍历。

d. 通过DRIVER_OBJECT.DriverSection(即PsLoadedModuleList链表)枚举驱动模块。

  好了,已经说了4项了,至于最后的"special five (c) Stealth Walker technology and six (c) KMSE",其实就是从内核地址空间0x80000000-0xffff0000之间暴力搜PE映像,然后综合某些条件来判断是否驱动的PE映象,变态吧???

2. Disk Low-Level Scanning
  调用IoBuildAsynchronousFsdRequest创建一个主功能码为IRP_MJ_READ的IRP发到下层卷管理器驱动ftdisk.sys读磁盘扇区信息,这里是绕过了FSD的。
============

 

对于IS或者DS::
inline hook ObOpenObjectByName
禁止打开ntos*.exe文件
和已经加载的FSD系统和Tcpip.sys.
另外为了防止ObCreateObject大法式打开文件在IRP_MJ_CREATE中也做处理~

对于那个RKU那个玩意,直接Zero掉DriverObject和DeviceObject,并断开那些链表。
最后就是KMSE,用ShadowWalker过滤个读比较简单~


===========

 

disk low-level i/o bypassing做好的话什么winhex,filereg,rku,rootkitrevealer...统统拿下
disk low i/o 可以完全不走Windows的驱动体系
自然不是io port,而是另外的方法~
rootkit unhooker 很好的检测工具,功能比Icesword更强大。检测隐藏的驱动,rootkit,隐藏的进程,文件等,可以检测很多隐藏的病毒。内核学习必备。 立即下载

相关推荐

Rootkit Unhooker

Rootkit Unhooker. SSDT shadow SSDT ring0 HOOK 不多说.用了就知道

网安面试必看:RootKitUnhooker检测工具的使用

Rootkit是一种获取系统root权限的恶意软件,能隐藏自身及关联文件、进程和网络链接。Rootkit Unhooker是专用于检测和清除Rootkit的工具,支持32位Windows系统。主要检测功能包括:SSDT钩子检测恢复(可追踪挂钩模块并清理)、隐藏进程/驱动/文件检测(识别未在系统列表中显示的可疑对象)、隐藏代码检测(发现驱动中的可执行代码片段)、用户模式钩子检测(处理进程注入)以及生成详细报告。该工具通过内核级扫描,有效对抗90%的Rootkit威胁,需管理员权限运行。

Andytoe的博客 688

RootkitUnhooker(Rootkit卸载工具)

Rootkit卸载工具,可以看到hide process,hide IAT,SSDT 等,且可以卸载rootkit.

RK检测工具Rootkitunhooker使用实验

SSDT钩子的检测和恢复,显示了内核系统调用表的所有函数、函数地址、挂钩标记和挂钩此函数的模块名字,单单是这个标签页提供了足够的信息来检测和清除90%的rootkit,在检测到一个钩子并且追踪到了挂钩些函数的模块名字(和安全软件对抗的模块)后,你可以清除所有的SSDT钩子,在注册表里搜索目标模块并且删除引用了模块的项,然后删除目标模块并重启。潜藏代码检测,这应该是Rootkit Unhooker特有的功能,主要是检测无标识的可执行代码片段(如驱动中隐藏的可执行代码)。5. 隐藏文件检测“Files”

m0_70405138的博客 690

Windows内核级Rootkits隐藏技术的研究 (2010年)

随着Rootkits技术在信息安全领域越来越受到重视,各种Anti-rootkits新技术不断出现。在各种Anti-root-kits工具的围剿下,常规的Rootkits隐藏技术难以遁形。在系统分析和深入研究传统内核级Rootkits隐藏技术的基础上,提出了一个集驱动模块整体移位、内核线程注入、IRP深度内联Hook 3种技术为一体的Rootkits隐藏技术体系。实验结果显示,基于该隐藏技术体系所实现的Rootkits能够很好地躲避专业的Anti-rootkits工具(如Rootkit Unhooker和

RKUnhookerLE3.8.389.593

强大的rootkit 工具,懂系统安全的都知道这个软件 2011-02-26编译的 支持xp/vista/win7

RK检测工具RootkitUnhooker使用实验

rootkit unhooker的使用

xiao_ZHEDA的博客 309

win-unhooker:anti-rootkit-Windows Unhooker的简单实现

双赢 anti-rootkit-Windows Unhooker的简单实现。

IceSword&Rootkit Unhooker驱动简析

IceSword版本:1.20cn 修订号:061022 ----------------------------------------------------0. 进程   (略) 1. 端口   IS调用IoBuildDeviceIoControlRequest分别向Tcpip.sys所创建的TCP设备对象和UDP设备对象发送IRP,在输出缓冲区中将返回端口/IP/状态/PID的结构数组(D

1400

Rootkit Unhooker中文版

可以查看inline hook或SSDT的一个工具

易语言-用NtQuerySystemInformation函数暴力枚举驱动

易代码出于本人之手,另附VB代码注释,VB代码非原创,2年前从看雪某个角落瞄出来翻译的[因为我个人非常喜欢把各种语言互相转换- -],一直把这个功能集成在自己的私人模块里,今天拿出来与大家分享. 因为原代码申请内存释放内存用了自己写的内存控制函数[这个暂且不发了,sorry],我已经换为易语言自己的申请内存[注意,我没有释放],释放内存这些请自行解决,否则查询易论坛,一抓一大把.否则将导致内存大量浪费- -这个你懂的.不过不是经常调用也无所谓, lms520

RootKitUnhooker 3.8.341.552

http://bbs.pediy.com/showthread.php?t=71436

Linhanshi Blog 618

编译CycloneDDS和CycloneDDS-CXX踩过的坑——CMake Error at CMakeLists.txt:227 (find_package):

最近编译CycloneDDS和CycloneDDS-CXX踩了两个坑,花了不少时间。做个简单的记录,免得以后又踩到。注意:CycloneDDS-CXX编译依赖CycloneDDS,因此必须先编译CycloneDDS需要严格按照步骤进行,否则要入坑步骤如下,1先编译CycloneDDS以上步骤完成CycloneDDS的编译和安装,生成的bin include lib等位于install目录下面。

usstmiracle的博客 1900

遍历系统中加载的驱动程序以及通过设备对象指针获取设备对象名称

遍历系统中加载的驱动以及通过设备对象指针获取设备对象名称

Masimaro的专栏 2702

ENVI5.3.1使用Landsat 8影像进行辐射定标和大气校正实例操作

ENVI5.3.1使用Landsat 8影像进行辐射定标和大气校正实例操作

PeanutbutterBoh的博客 12万+

MySQL服务启动失败?手把手教你排查NET HELPMSG 3534错误(附完整修复流程)

本文针对Windows平台上MySQL服务启动失败并提示NET HELPMSG 3534错误的常见问题,提供了系统性的排查与修复指南。文章深入剖析了错误本质,并手把手教你通过查看MySQL错误日志、检查并初始化数据目录、修正Windows服务配置、排查my.ini配置文件陷阱等核心步骤,彻底解决这一棘手问题,帮助开发者和运维人员快速恢复数据库服务。

wdx0123456的博客 897

使用Native API查询Windows硬盘分区系统设备名称

#include #include #include #include // 定义函数返回值 typedef ULONG NTSTATUS; // 宽字节字符串结构定义 typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING, *P

奋斗中拥有 4219

图文并茂把Ubuntu22.04安装到u盘,实现即插即用

1、刚好打算把Ubuntu安装到u盘,随便记录下整个过程。 2、前提准备:u盘(我的是16g大小),Vmware虚拟机,Ubuntu镜像文件(可以去官网下载); 3、下面记录全过程: 1、打开虚拟机,并选择创建新的虚拟机: 2、选典型: ​ ...

子非鱼 1万+

Rootkit

Rootkit自身也是木马后门或恶意程序的一类,只是,它很特殊,为什么呢?因为,你无法找到它。 正如自然界的规则一样,最流行的病毒,对生物的伤害却是最小的,例如一般的感冒,但是最不流行的病毒,却是最夺命的。Rootkit木马就是信息世界里的 AIDS,一旦感染,就难以用一般手段消灭了,因为它和自然界里的同类做的事情一样,破坏了系统自身检测的完整性——抛开术语的描述也许难以理解,但是可以配合AID

tiandyoin的专栏 1万+

站在评审的角度写国自然基金本子,搭配这5条AI提示词,帮你一键提升本子中标率

多数同仁的选题失败,不是因为你的idea不好,而是你的逻辑没有立起来,你必须让评审看到,你是怎么从问题走向方法的。请你按照“同行做到哪、瓶颈卡在哪、我该怎么破”的逻辑,将我的创新点进行重构:【粘贴你原始的创新点描述】,要求:表达需结构化、可量化、可验证,突出对比后的实质性突破。与其等着评审指出问题,等着本子被拒,不如让AI提前模拟评审,帮你从可行性、创新性、国家价值、团队能力四个维度给你打分,并指出项目的致命破绽,提示词这样设计。创新点如果写不好,本子往往也会被拒,而评审一般喜欢的创新点都是有固定结构的。

智能AI让学术科研更容易 1241

SillyTavern 酒馆在 Mac 和 Linux 上的部署教程(含启动器安装方法)

SillyTavern 是一个支持多种大模型聊天接口的本地前端项目,适用于 MacOS 和 Linux 系统。本文提供了两种部署方式:手动安装和使用 SillyTavern Launcher 安装器。手动安装需要先安装 Git 和 NodeJS,然后克隆项目源码并运行启动脚本。使用 Launcher 则更为简便,适合新手用户,能够自动安装依赖和配置环境。部署完成后,用户可以通过浏览器访问本地服务器,加载角色卡片并连接大模型 API,享受二次元角色扮演聊天的乐趣。无论是开发者还是终端用户,都能轻松完成 Sil

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3398

RootKitUnhooker 3.8.341.553

http://rapidshare.com/files/140970549/RkU3.8.341.553.rar.htmlMD5ea7b1e93a7d8d68985901fd3bef68efa *RkU3.8.341.553.exeChangelog inside help file.Enjoy.

Linhanshi Blog 781

引以为戒:一个“看不见”的空格,导致上下文超限——从 `llama-server` 错误说起

文章摘要: 本文分享了Qwen工程团队在部署llama-server时遇到的参数失效问题:明明设置了-c 32768上下文参数,却仍报错"超出4096 tokens限制"。经排查发现,问题根源是批处理脚本中续行符^后存在两个空格,导致参数被忽略。文章详细解析了Windows批处理中^的严格语法规则(必须紧贴前字符),对比了错误与正确写法的差异,并给出4条实用建议:使用编辑器显示空白字符、调试时关闭@echo off、预检完整命令、优先单行命令。最后强调在AI系统部署中,此类"隐

刘一说的IT专栏 542
上一篇: AK922: 突破磁盘低级检测实现文件隐藏
下一篇: ak922.sys分析
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值