邪恶的RING0注射SHELLCODE

编写通用内核shellcode  一、多个内核漏洞的出现将研究者的目光从ring3引向了ring0 最近曝光的ms08-025漏洞,受影响的系统包含了微软出版的几乎所有NT体系结构的版本, 引起了不少研究者的兴趣,漏洞曝光不久就在网上出现了利用程序。基于内核漏洞的溢出, 为我们获取系统的ring0执行权限打开了方便之门,通过这类漏洞提升本地执行权限,获取 system权限执行级别。 目前流传的利用程序,ring0 shellco 阅读详情

ZwCreateProcessEx 是个非常非常好的东西,虽然他是个UNDOC.但是如果你仔细阅读过WIN2K的SRC,并且非常了解PE的运行机制,你会发现一些很有趣的东西。

这对目前的所有NT内核的系统来说都是致命的

可以用来做什么

1. 制造漏洞
2. 提升权限
3. 拿来写病毒
4. 拿来写各种木马
5. 各种ROOTKI

但是这里我只想很简单的说一下原理。我只希望这样的东西只用来讨论而已,当然这不是纯理论
在后面有个简单的EXAMPLES

其实你阅读过2K的SRC,分析过PE的加载,就会发现所有的进程在创建时都是由一个THREAD开始

而NtCreateThread有个很趣的参数 ThreadContext .这就是关键X:M

在任何进程创建时,第一次调用的 NtCreateThread 中的 ThreadContext->Eax 都是这个进程被分配
然而这个时候进程甚至没有开始加载,但正是这个没有被加载的进程,系统却已经为他分配好了一个正常进程所需要的一切

那么我们就可以利用这个地址用ZwAllocateVirtualMemory为我们的代码分配一段空间,

然后把我们的SHELLCODE写进去,我的这个例子仅仅是打开一个MessageBox并显示一句简单的字符串.

但是这并不妨碍你把你的病毒代码又或者是一整个木马写进去...只要你想
也许第一个 100% Ring0 Virus 或者 Ring0 Housr 就诞生了

在这只后,你只需要把ThreadContext->Eax的地址修正,进程就能被顺利的加载。
并且首先被运行的就是我的SHELLCODE, 并且这个小玩意只有一个SYS,除此之外再没有任何多余的东西了
下面是个例子只是为了证明这个理论可以变成实际,驱动没有做任何的处理。并且可以正常的加载与卸载, 也没有从链表中移走,你可以用任何驱动管理工具来终止他
在驱动加载后,你再运行任何的进程都将会被注入我的SHELLCODE.
PS: 请原谅我说的非常之模糊,毕竟我不想 100% Ring0 Virus 或者别的什么诞生与这篇文章
命令行 loader 加载 loader -u 卸载
如果这时候你用OD附加打开的进程,你会发现我的SHELLCODE就在你附加的进程的头部
仿佛天生就是这个进程的一部分,而实际上你不可能在这个进程的文件中发现他们。是不是很有趣,呵呵
而且可以注进目前的任何可执行文件,包括ICESWORD,卡巴,NOD32..想想某一天突然发现你的杀毒软件或者防火墙本身就是个木马或者毒源吧,那简直太有趣了
Examples
 此主题相关图片如下: 

===

vxk:很古老的了~
现在流行ZwMapViewOfSection的了~
唉~~

2.内核回调机制 有谁调用了窗口过程? GetMessage()在处理SentMessagesListHead中消息时 DispatchMessage(&msg)在处理其他队列中的消息时 CreateWindow() 0环的一些代码也会调用窗口过程,但它没有发消息给队列而是直接调用窗口过程(KeUserModeCallback) NtUserCreateWindowEx()这样设计是因为,如果你程序需要... 阅读详情

相关推荐

shellcode注入驱动

避坑 | Windows驱动签名经验贴 - FreeBuf网络安全行业门户

SHELLCODE_8BIT的博客 2327

转一个win32k回调实现自定义r3函数的方法 教主威武

<br />ring0调用ring3早已不是什么新鲜事,除了APC,我们知道还有KeUserModeCallback.其原型如下:<br />NTSTATUS<br />KeUserModeCallback (<br />     IN ULONG ApiNumber,<br />     IN PVOID InputBuffer,<br />     IN ULONG InputLength,<br />     OUT PVOID *OutputBuffer,<br />     IN PULONG O

Sunny_wwc的专栏 2882

内核线程注入x86

主要通过Ring0层驱动Attach到目标进程然后调用NtCreateThreadEx来执行ShellCode,ShellCode做了一个注入Dll的简单行为。

Windows内核新手上路3——挂钩KeUserModeCallBack

Windows内核新手上路3——挂钩KeUserModeCallBack 1.     简介 在Windows系统中,提供了几种方式从R0调用位于R3的函数,其中一种方式是KeUserModeCallBack,此函数流程如下: nt!KeUserModeCallback->nt!KiCallUserMode->nt!KiServiceExit->ntdll!KiUserCallbackDis

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1138

手把手教你用树莓派蓝牙抓取小米温湿度计2代数据,接入HomeAssistant(附密钥获取避坑指南)

本文详细介绍了如何通过树莓派蓝牙抓取小米温湿度计2代数据并接入HomeAssistant的完整流程。重点解析了获取32位加密密钥的三种方法,包括使用Telink Flasher工具、米家APP抓包和开源工具ATC_MiThermometer,并提供了HomeAssistant集成配置和常见问题排查指南,帮助用户实现稳定可靠的温湿度监测。

一名菜鸟攻城师 779

SAR学习笔记后续-phased工具箱介绍

摘要:相控阵雷达介绍,基于仿真对MATLAB中phased工具箱进行了详细介绍

yjh_2019的博客 1万+

驱动里执行应用层代码之KeUserModeCallBack,支持64位win7(包括WOW64)

by Fanxiushu            2014-07-26 在驱动层(ring0)里执行应用层(ring3)代码,这是个老生常谈的技术,而且方法也挺多。 这种技术的本质:其实就是想方设法在驱动层里把应用层代码弄到应用层去执行。 比如在APC异步调用中,KeInsertQueueApc,KeInitializeApc等函数中可设置一个在ring3层执行一个回调函数,这样就可以

fanxiushu的专栏 1万+

YOLOv8中间特征层可视化

在通过观察这些特征,可以清楚地看到模型如何逐步将输入图像转化为有意义的表示。

weixin_45314480的博客 6891

自己重新写的KeUserModeCallBack 例子,比网上的代码改进很多,请大家指教!

标 题: 【分享】【原创】自己重新写的KeUserModeCallBack 例子,比网上的代码改进很多,请大家指教! 作 者: czcqq 时 间: 2011-08-09,01:49:10 链 接: http://bbs.pediy.com/showthread.php?t

gold0523的专栏 1947

WorkBuddy任务对话上下文管理:Token、compact与上下文窗口实战指南

在大语言模型应用中,Token作为文本处理的最小单位,直接决定上下文窗口的消耗速度,而上下文窗口则限定了单次对话可承载的信息总量。当对话超出窗口限制时,compact压缩机制会触发有损摘要,导致关键约束丢失或工具调用结果被稀释。合理管理上下文不仅能提升多步骤任务的稳定性,还能显著降低Token成本与响应延迟。在文档处理、代码开发、多步自动化等场景中,通过主动压缩、状态外置、分段喂入等策略,可有效避免任务后期遗忘、版本混乱等问题。本文围绕WorkBuddy的上下文管理机制,从Token与compact的底层原

weixin_29055699的博客 394

保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04)

本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。

weixin_28739079的博客 308

逆向ring0msg

by 执着一生 最近抽空把ring0msg[相关文章请参阅“邪恶的RING0注射ShellCode脆弱的PE加载机制”作者:hellfish]给逆了下,其实也不是什么高深的技术,很早的时候老外就搞出来了,只不过带ring3层的操作而已,稍微改改就完全可以用一个sys搞定。    原理也不复杂,其实就是修改线程入口点改变流程,让线程开始的时候先执行shellcode而已。ThreadCont

1073

【RKNN】RKNN-Toolkit2 Python API函数详解

RKNN-Toolkit2 的 API 设计以开发者效率为核心,覆盖模型转换、量化、部署全流程。通过灵活的参数配置(如多核调度、混合量化)和调试工具(性能分析、精度对比),可快速适配复杂边缘场景。

浩瀚之水的专栏 787

Windows消息机制学习笔记(四)—— 内核回调机制

消息机制学习笔记(四)—— 内核回调机制要点回顾内核调用实验1:理解内核调用第一步:编译并运行以下代码第二步:修改窗口过程函数,重新运行结论KeUserModeCallback分析KeUserModeCallback 要点回顾 1)GetMessage不仅能够取出消息,还能处理SentMessagesListHead队列中的消息 2)DispatchMessage()用于处理其它队列中的消息。 内核调用 描述:窗口过程函数除了会在消息循环中被调用,一些0环的代码也可以直接发起调用。 例如:窗口初始化时、窗口

lzyddf的博客 1561

SoulX-FlashHead 加速实践,提升3倍。

SoulX-FlashHead 加速实践,提升3倍。

jacke121的专栏 224

使用openclaw出现blocked URL fetch (url-fetch) reason=Blocked: resolves to private/internal/special 解决方案

本文主要介绍了使用openclaw出现blocked URL fetch (url-fetch) target=https://news.google.com/search reason=Blocked: resolves to private/internal/special-use IP address 解决方案,希望能对使用xx的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

Windows消息机制

消息队列在哪 消息队列 进程--&gt;消息队列 消息队列--&gt;鼠标 消息队列--&gt;键盘 消息队列--&gt;其他进程的消息 消息队列放在哪里 这个模式怎么区分消息属于谁,是通过一个专门进程处理消息,这样问题是有跨进程通信太费时。Windows不是这样,Linux是这样。微软是把消息队列存到了0环。 怎么找到消息结构体,是KThread(任何一个线程都有个内核结构...

kernweak的博客 3002

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

DLL注入技术

DLL是windows平台提供的一种模块共享和重用机制,它本身不能直接独立运行,但可以被加载到其他进程中间接执行。DLL注入,是将代码插入/注入到正在运行的进程中的过程。本来是软件用于向其他程序添加/扩展功能、调试或逆向工程的一种合法技术。不过,后来恶意软件也常用这种方式来干坏事。是一种广泛应用于恶意软件和无文件攻击中的逃避技术。

Karka_的博客 751

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RING0木马有什么优势?

RING0木马有什么优势? 让我们看看: 1,无进程。    RING0木马编译后是一个SYS文件,它和DLL文件那样,是插入到进程里运行的。但DLL插入的是地址在0x80000000下的用户区,而RING0木马插入到地址在0x80000000以上的系统区,而且所有进程共享,只要它本身不提供unload例程,几乎不可能被卸载,而且没有多少个工具可以列举系统里装载的SYS模块。 2,

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1675

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Windows 反消息钩子(2)

Windows消息钩子一般都很熟悉了。它的用处很多,耳熟能详的就有——利用键盘钩子获取目标进程的键盘输入,从而获得各类密码以达到不可告人的目的。朋友想让他的软件不被别人的全局钩子监视,有没有办法实现呢?答案是肯定的,不过缺陷也是有的。   一、全局钩子如何注入别的进程       消息钩子是由Win32子系统提供,其核心部分通过NtUserSetWindowsHookEx为用户提供了

宋金时的专栏 3825

【旧文章搬运】关于在指定进程调用KeUserModeCallback的问题

原文发表于百度空间,2010-10-07========================================================================== 由于KeUserModeCallback的工作原理,对调用者线程和进程有以下要求: 1、调用者线程不能是纯内核线程(由PsCreateSystemThread创建的线程) 2、调用者线程必须在...

weixin_30433075的博客 229

总结加载Shellcode的各种方式(更新中!)

异步过程调用(APC)队列是一个与线程关联的队列,用于存储要在该线程上下文中异步执行的函数。操作系统内核会跟踪每个线程的 APC 队列,并在适当的时机触发队列中挂起的函数。APC 队列通常用于实现线程间的异步通信、定时器回调以及异步 I/O 操作。内核模式 APC:由内核代码发起,通常用于处理内核级别的异步操作,如异步 I/O 完成。用户模式 APC:由用户代码发起,允许用户态应用程序将特定函数插入到线程的 APC 队列中,以便在线程上下文中异步执行。

xf555er的博客 3567

新手上路

<br />新手上路什么都是新的,还没有积分,看来到处灌灌水去先

young1366的专栏 247

rootkit学习总结2

关于rootkit小资料 一,前言 二,简介 三,rootkit的一些以公开的隐藏技术 四,一些隐藏技术的应对方法 五,about ring0 rootkit 六,rootkit的检测 七,参考资料,推荐 ************************* 一.先说几句与技术无关的话。 ************************* 二.简单的说说rootkit.

bcbobo21cn的专栏 6971

内核模式到用户模式的回调函数----这篇文章是十年前国外大牛写的

内核模式到用户模式的回调函数http://www.nynaeve.net/?p=200        NTDLL 拥有一些特定的函数被内核用来代表用户模式执行特定的功能。尽管理解这些函数对于特定的功能(比如用户模式APC)的底层实现的理解是有用的,这些函数提供的功能非常的简单。        下面是一些NTDLL导出的,内核用于与用户模式通讯的函数: 1.KiUserExceptionDis

商少 9128
上一篇: 一个反键盘记录工具的分析
下一篇: 百度漏洞Baidu Soba Remote Code Execute Vulnerability
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值