自己Swap自己,Ring0下做测试器时用的代码

r0下多核hook 文章首发奇安信攻防社区:https://forum.butian.net/share/1361 r0层多核下hook高并发函数存在的问题是:在使用如memcpy的时候,无法一次性拷贝5个字节的硬编码。即有可能拷贝到一半,别的线程去执行了代码导致蓝屏。 解决的办法有: 短跳中转 中断门 找一条一次性修改8字节的指令 这里将使用第三种方法实现。 SwapContext 这是线程切换核心函数,Windows几乎无时无刻在执行这个函数,所以属于是高并发函数。 本文将在多核环境下通过hook SwapCont 阅读详情

作者:vxk

#include "vx_main.h"
#include "mem.h"
#include <undoc.h>
#include <stdio.h>
void MySwapContextHook();
void MySwapContextEndHook();
static DWORD SwapContextPtr=0;
static DWORD SwapContextCnt=0;
extern HANDLE CurrentProcessId;      // used in VXGetCurrentProcessId
NTSTATUS InitSwapContextHook()
{
  // The code "mov byte ptr es:[esi+2Dh], 2" is near the start of
  // SwitchContext function in NTOSKRNL.EXE. It is the only place we see
  // these bytes in NT4 & 2K and the first place in XP
    PULONG pOldAttr;
    DisableWriteProtect(pOldAttr);
     unsigned char SwapContextStart[]={0x26,(char)0xc6,0x46,0x2d,0x02};      
     SwapContextPtr=Search(VXGetModuleBase("ntoskrnl.exe"), SwapContextStart, sizeof(SwapContextStart));
     if(SwapContextPtr<(DWORD)VXSystemRangeStart)
     {
           DbgPrint("VX: Unable to find SwapContext in NTOSKRNL.EXE!");
           return STATUS_PROCEDURE_NOT_FOUND;
     } else
           DbgPrint("VX: SwapContext found at %08X/n",SwapContextPtr);

  SwapContextCnt=SwapContextPtr+5;

  __asm cli;      // Disable task switching

  DWORD Addr=(DWORD)MySwapContextHook-(SwapContextPtr+5);
  *(char*)SwapContextPtr=(char)0xe9;
  *(DWORD*)(SwapContextPtr+1)=Addr;

  __asm sti;
  EnableWriteProtect(pOldAttr);
     return STATUS_SUCCESS;
}


void RemoveSwapContextHook()
{
    PULONG pOldAttr;
    DisableWriteProtect(pOldAttr);
     if(SwapContextPtr)
     {
        __asm cli;      // Disable task switching
     
        memcpy((void*)SwapContextPtr,"/x26/xc6/x46/x2d/x02",5);

        __asm sti;
           SwapContextPtr=0;
     }
     EnableWriteProtect(pOldAttr);
}


void __stdcall
HandleContextSwap(ETHREAD *New, ETHREAD *Old)
{
     PULONG pOldAttr;
    DisableWriteProtect(pOldAttr);
     CurrentProcessId=Old->Cid.UniqueProcess;

     VXDeferAllUserModeBreakpoints();      // I don't disable kernel breaks to increase speed

     CurrentProcessId=New->Cid.UniqueProcess;

     // Now install hook in the new thread's context so I can do what I need...

  DWORD* Stack=(DWORD*)New->Tcb.KernelStack;

  // Stack of SwapContext in NT4-XP looks like:
  // esp+8 -> return address │ Stack[2]
  // esp+4 -> EFLAGS       │ Stack[1]
  // esp   -> ECX         │ Stack[0]
  // I'll insert address of my hook function between EFLAGS and return address

     New->Tcb.KernelStack=((char*)New->Tcb.KernelStack)-4;
     memmove(New->Tcb.KernelStack,Stack,8);
     Stack[1]=(DWORD)MySwapContextEndHook;
     EnableWriteProtect(pOldAttr);
}


void __stdcall HandleContextSwapEnd()
{      
     VXActivateAllUserModeBreakpoints();
}


void __declspec(naked) MySwapContextHook()
{
     __asm {
        mov byte ptr es:[esi+2Dh], 2
        pushfd
        pushad
        push edi
        push esi
        call HandleContextSwap
        popad
        popfd
        jmp [SwapContextCnt]
     }
}


void __declspec(naked) MySwapContextEndHook()
{
     __asm {
           pushfd
           pushad
           call HandleContextSwapEnd
           popad
           popfd
           retn
     }
}

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04 编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017) 阅读详情

相关推荐

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1533

C语言--swap交换函数

对于Swap交换函数的四种情况的解以及代码+运行结果:

m0_59052131的博客 2万+

DIY等离子环:从Class-E电路到七彩辉光,手把手教你打造炫酷科学玩具

本文手把手教你DIY一个炫酷的等离子环科学玩具。从解析等离子体辉光放电原理入手,详细介绍了核心的Class-E自激振荡电路设计、关键元件选型与参数计算,并提供了从物料准备、电路搭建、腔体密封到上电调试的全流程指南。通过调制电路或填充不同气体,还能实现七彩变换与交互效果,是学习高频电路与电磁场知识的绝佳实践项目。

weixin_29305337的博客 635

C/C++中关于交换(Swap)函数的三种方法

在学习编程中,交换函数是我们一定要理解的例子,以下是我的一些理解,希望可以帮助到大家。一、交换函数的说明在main函数中创建两个值,通过调用函数对其进行交换。分享一下我对这三种方法的理解,希望对大家有所帮助。

m0_74058637的博客 6万+

大模型呼叫中心场景分享之六:大模型外呼IT运维告警——智能监控与自动化响应的未来

在数字化运维(IT Operations)中,实时监控系统健康状态并及时响应告警是保障业务连续性的关键。传统的IT告警方式(如邮件、短信、钉钉/企业微信通知)存在信息过载、响应延迟、人工处理效率低等问题。而大模型(LLM)与语音技术(TTS/ASR)的结合,为IT运维告警提供了更智能的解决方案——大模型外呼告警系统。大模型外呼告警系统正在重新定义IT运维的效率和体验。通过实时语音交互+智能自动化,企业能够将平均故障修复时间(MTTR)从小时级缩短至分钟级。

开源呼叫中心系统FreeIPCC的博客 924

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2058

HOOK SwapContext 枚举隐藏进程(学习笔记4)

 作 者: bzhkl 时 间: 2008-12-11,12:01 链 接: http://bbs.pediy.com/showthread.php?t=78464 以前想检测一个被隐藏的进程 后来用暴力枚举的方法解决了 但是HOOK SwapContext没有看到有完整的代码 所以搜集了点网上有用的模块 自己整合实现了下 确定支持XP3, XP2没测试 应该也能支持 附完整工程代

3994

VC Spyglass:Lint实战指南之TCL脚本自动化解析

本文详细介绍了如何利用TCL脚本实现VC Spyglass Lint检查的自动化流程。通过实战指南,从基础脚本编写到高级参数化技巧,帮助数字IC设计工程师摆脱手动操作,提升验证效率,并实现与CI/CD流程的集成。

h3i4j的博客 799

HOOK SwapContext 枚举隐藏进程(学习笔记4)(2)

下面是主要代码   01 DWORD gThreadsProcessOffset =0x220;    // ETHREAD 在 EPROCESS偏移 02 /* 03   04 +0x218 TopLev

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

ESD防护设计宝典(十九):元器件选型宝典——共模电感

然而,这位“大师”的脾气也颇为古怪,若设计者不解其性、用之不当,它非但不能抑制噪声,反而会引入信号完整性恶化、电源压降等新问题,甚至让您的系统EMC性能“雪上加霜”,导致项目在测试阶段功亏一篑。本文将带您深入共模电感的内在世界,从本质解析到参数详解,从设计陷阱到实战选型,全方位领悟其平衡艺术,掌握其应用核心,规避那些足以让项目翻车的致命陷阱。:这是存在于电路板内部的“家贼”。共模电感实质上是一个四端器件,它通过磁场的“加法”与“减法”运算,巧妙地实现了对共模噪声的抑制,同时为差模信号大开绿灯。

m0_56451176的博客 422

摆脱英文束缚!群晖Transmission4.0.4全新中文界面攻略

在群晖安装完官方Transmission4.0.4套件后,界面是英文状态的,不太好用。但是按照网上分享的原来4.0以前版本的方法更新UI又失败,所以自己搞了下成功了,分享给需要的朋友。

XiaoqiangClub的博客 5221

C程序设计--指针(swap函数)

swap()函数 方法一:指针法 实参:&amp;amp;amp;amp;amp;amp;amp;a 形参:*x #include&amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;gt; void MySwap(int *x,int *y); int main(){ int a=5,b=9; printf(&amp;amp;amp;amp;amp;quot;交换前:a=%

Micheal 超 的博客 1万+

WINCC7.3破解文件

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

32位下如何HOOK高并发函数

#include<NTDDK.H> /********************************************************************* ****** “多核环境下,如何保证对一个高并发的内核函数进行HOOK而不会出错?” ****** **********************************************************************/ LONG AddressOfSwapContext = 0x8

SharenFish的博客 359

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

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[C/C++]windows下实现swapcontext等函数实践

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34391445的博客 761

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

优化总结:有哪些APP启动提速方法?

一 通过 Universal Links 和 App Links 优化唤端启动体验 App 都会存在拉新和导流的诉求,如何提高这些场景下的用户体验呢?这里会用到唤端技术。包含选择什么样的换端协议,我们先看看唤端路径,如下: 唤端的协议分为自定义协议和平台标准协议,自定义协议在 iOS 端会有系统提示弹框,在 Android 端 chrome 25 后自定义协议失效,需用 Intent 协议包装才能打开 App。如果希望提高体验最好使用平台标准协议。平台标准协议在 iOS 平台叫 Universa..

数据库技术 905

linux ucontext族函数的原理及使用

ucontext函数族 这里的context族是偏向底层的,其实底层就是通过汇编来实现的,但是我们使用的时候就和平常使用变量和函数一样使用就行,因为大佬们已经将它们封装成C库里了的 我们先来看看寄存器 寄存器:寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果 我们常用的寄存器是X86-64中的其中16个64位的寄存器,它们分别是 %rax, %rbx, %rcx, %rdx, %esi, %edi, %rbp, %rsp %r8, %r9, %r10, %r11, %r

WhiteShirtI的博客 5676

(24)[进程与线程] 分析SwapContext

SwapContext有几个参数? SwapContext在哪里实现了线程切换? 哪里进行了进程切换(修改CR3)? TSS存储当前的 SS0 : ESP0。 FS:[0]在3环总能正确指向当前TEB。 异常链表的切换。 完整分析代码。

qq_50332504的博客 1106

InlineHookSwapContext

作用:枚举进程, 获取隐藏进程的EPROCESS源码地址:https://github.com/haidragon/HookSwapContext #include <ntddk.h> #include <ntimage.h> #include <ntdef.h> #include "hash.h" #include "xde.h" #include "main...

weixin_34364071的博客 180

38进程与线程之线程切换----时钟中断切换

绝大部分系统内核函数都会调用SwapContext函数,来实现线程的切换,那么这种切换是线程主动调用的。 如何中断一个正在执行的程序? 异常 比如缺页,或者INT N指令 中断 比如时钟中断 Windows系列操作系统: 10-20毫秒 如要获取当前的时钟间隔值,可使用Win32API: GetSystemTimeAdjustment 线程切换的几种情况: 1) 主动调用AP...

qq_18059143的博客 1042

云渲染、云游戏核心技术之视频hook引擎的OpenGL(一)

云渲染、云游戏之视频hook引擎的OpenGL(一) 云渲染、云游戏之视频hook引擎的OpenGL(一)云渲染、云游戏之视频hook引擎的OpenGL(一)前言一、 采集端hook的流程二、hook到视频渲染前回调函数注册三、 拷贝数据到共享GPU中四、 共享GPU 云端共享GPU资源 前言 云渲染客户端 采集的工作 提示:以下是本篇文章正文内容,下面案例可供参考 一、 采集端hook的流程 在渲染前一帧的数据拿到 拷贝同享GPU中去,编码从共享GPU中读取数据 在这里面有GPU同享时,

永远积极向上、永远热泪盈眶、永远豪情满怀、永远坦坦荡荡 1733

HOOK SwapContext 枚举隐藏进程(学习笔记4)(3)

190   191 void  klisterUnload(IN PDRIVER_OBJECT pDriverObject) 192 { 193   BeTerminate = 1; 194   while(B

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

win10 x64 内核结构体

nt!_EPROCESS +0x000 Pcb : _KPROCESS +0x2d8 ProcessLock : _EX_PUSH_LOCK +0x2e0 UniqueProcessId : Ptr64 Void +0x2e8 ActiveProcessLinks : _LIST_ENTRY +0x2f8 RundownProtect : _EX_RUNDOWN_REF +0x300 Flags2 : Uint

sanqiuai的博客 1190

关于Win7 x64 Shadow SSDT 的探索和 Inline HOOK

http://bbs.pediy.com/thread-210481.htm 来看雪一年了,在这里面学到了很多知识,非常感谢各位前辈对知识的分享和不懈的研究,也非常感谢各位大神对我们这些小白的照顾,特别要感谢MaMy、hksoobe、luolinlove等大神的指导。我也一直非常希望能为看雪贡献一点什么,但是小白的理解估计大神也看不上,这次也是注册看雪一周年,冲着这个也来发表一点自己的理

fyfy 4472

HOOK SwapContext 枚举隐藏进程(学习笔记4)(1)

HOOK SwapContext 枚举隐藏进程(学习笔记4) 作者:windows内核安全技术站A盾电脑防护 dump 文件接收:asm32asm@gmail.com " style="text-decoration:none; color:rgb(69,82,95)">A盾电脑防护 | 分类: 分类:进程 | 标签: | 2012-2-21 作 者: bzhkl

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

40 进程与线程之Windows线程切换——FS段寄存器

FS:[0]寄存器在3环时指向TEB.进入0环后FS:[0]指向KPCR 系统中同时存在很多个线程,这就意味着FS:[0]在3环时指向的TEB要有多个(每个线程一份)。 但在实际的使用中我们发现,当我们在3环查看不同线程的FS寄存器时, FS的段选择子都是相同的,那是如何实现通过一个FS寄存器指向多个TEB呢? 下面是ida的分析SwapContext代码 ; CODE XREF: Sw...

qq_18059143的博客 671
上一篇: FSD Direct IO File Operation Library Source
下一篇: AVP 2.2 naked
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值