Another way to HOOK in the kernel

Qwen3.5 GDN Prefill Kernel优化:面向真实部署的CUDA底层重构 Prefill阶段是大语言模型推理的关键瓶颈,其性能本质取决于计算、访存与硬件特性的深度协同。传统通用attention kernel因采用保守内存布局、固定warp调度和高频kernel launch,在处理Qwen系列特有的GDN(Generalized Dynamic Ngram)机制时,极易引发显存带宽浪费、shared memory bank冲突及CUDA运行时错误。本文聚焦Prefill底层优化原理,解析如何通过数据驱动的内存访问设计、BNDS张量布局重构、chunked prefill ker 阅读详情
Rk always use HOOK important functions to hide something , and some ARK first recover these hookers ( common by harddisk files) and then call the function.
And this is another way to HOOK in the kernel by DRX register. About the DRX register ,you can google it, there should be much info. So i only post some simple code next because of my poor english, if you know chinese, you can get the comment.

These code should be run in xp, and it simply act HOOK the ZwCreateFile and print the debug information.



/*
drxhook.h
Written By yykingking@126.com
*/

#ifndef _DRX_HOOK
#define _DRX_HOOK

#include <ntddk.h>

typedef unsigned long DWORD;
typedef unsigned char BOOL;

#pragma pack(push,1)
typedef struct _idtr
{
    //定义中断描述符表的限制,长度两字节;
    short        IDTLimit;
    //定义中断描述服表的基址,长度四字节;
    unsigned int    IDTBase;
}IDTR,*PIDTR;

typedef struct _IDTENTRY
{
    unsigned short LowOffset;
    unsigned short selector;
    unsigned char unused_lo;
    unsigned char segment_type:4;    //0x0E is an interrupt gate
    unsigned char system_segment_flag:1;
    unsigned char DPL:2;    // descriptor privilege level
    unsigned char P:1; /* present */
    unsigned short HiOffset;
} IDTENTRY,*PIDTENTRY;

#pragma pack(pop)

DWORD GetDBEntry();
void HookDBInt();
void UnHookDBInt();

#endif


/*
drxhook.cpp
Written By yykingking@126.com
*/


#include "drxhook.h"

DWORD g_OldDBEntry;
IDTR g_IDTR;
DWORD g_OldCreateFile;
DWORD g_HookNumber = 0;
DWORD g_CR0;
BOOL g_bExit;

void ReLoadCR0AndSti()
{
    __asm
    {
        push    eax
            mov        eax, g_CR0
            mov        cr0, eax
            pop        eax
            sti
    }
}

void CliAndDisableWPBit()
{
    __asm
    {
        cli
            push    eax
            mov        eax, cr0
            mov        g_CR0, eax
            and        eax, 0xFFFEFFFF
            mov        cr0, eax
            pop        eax
    }
}


void PrintHook()
{
    DbgPrint(" Now Get In ZwCreateFile Hook: %d...Pid: %d.../n", g_HookNumber++, (DWORD)PsGetCurrentProcessId());
}

__declspec(naked) void NewZwCreateFile()
{
    __asm
    {    
        pushfd;                        // 仅仅适合于 XP 操作系统
        call PrintHook;
        popfd;
        mov eax,0x25;            
        jmp g_OldCreateFile;
    }
}

void SetHB()            // set hardware breakpoint 设置硬件断点
{
    __asm
    {
        mov eax, ZwCreateFile;        // 想要挂接的函数或者地址
        mov dr0, eax;
        mov eax, dr7;
        or  eax, 0x2703;            // 也要修改 dr7:GD 位,以免DrX被操作系统或其他程序修改
        and eax, 0xfff0ffff;
        mov dr7, eax;
    }
}

__declspec(naked) void NewDBEntry()
{
    __asm
    {
        pushfd;
        push eax;

        mov eax, dr6;
        test eax, 0x2000;
        jz  NOT_EDIT_DRX;

        // 以下是如果有对DRX的操作的简单处理,如有需要可以修改
        // 我只是简单的跳过这些指令
        and eax, 0xFFFFDFFF;
        mov dr6, eax;            // 清除DR6的标志

        cmp g_bExit, 0;
        jnz MY_DRV_EXIT;        // 驱动 Unload

        mov eax, [esp+8];        // 获取堆栈中的 EIP
        add eax, 3;                // 由于所有对 DRX 的操作全都是3个字节的
        mov [esp+8], eax;        // 修改 EIP ,跳过当前指令,返回时执行下条指令

        jmp MY_INT_END;

NOT_EDIT_DRX:

        mov eax, dr6;
        test eax, 0x1;
        jz  SYS_INT;            // 如果不是Dr0 产生的中断,则跳回原系统中断

        mov eax, [esp+8];
        cmp eax, ZwCreateFile;    // 判断一下是不是 ZwCreateFile 的线性地址
        jnz SYS_INT;

        mov eax, NewZwCreateFile;
        mov [esp+8],eax;        // 修改堆栈中的 EIP ,实现返回时跳转


MY_INT_END:    

        mov eax, dr7;
        or  eax, 0x2000;        // 恢复 GD 位
        mov dr7, eax;

MY_DRV_EXIT:                    // 整个驱动 UnLoad æ—¶,不恢复 Dr7

        pop eax;
        popfd;
        iretd;

SYS_INT:
        pop eax;
        popfd;
        jmp g_OldDBEntry;
        
    }
}

DWORD GetDBEntry()
{
    PIDTENTRY IdtEntry;
    DWORD Entry;

    __asm sidt g_IDTR;

    IdtEntry = (PIDTENTRY)(g_IDTR.IDTBase + 8);

    Entry = IdtEntry->HiOffset << 16;
    
    Entry |= IdtEntry->LowOffset;

    return Entry;
}

void HookDBInt()
{
    DWORD NewEntry;
    PIDTENTRY IdtEntry;

    NewEntry = (DWORD)NewDBEntry;

    g_OldCreateFile = (DWORD)ZwCreateFile + 5;        // 新的要跳转过去的地址

    g_OldDBEntry = GetDBEntry();

    IdtEntry = (PIDTENTRY)(g_IDTR.IDTBase + 8);

    CliAndDisableWPBit();

    IdtEntry->LowOffset = (USHORT)NewEntry;

    IdtEntry->HiOffset = (USHORT)( NewEntry >> 16 );

    ReLoadCR0AndSti();

    SetHB();

    g_bExit = FALSE;

    return;
}

void UnHookDBInt()
{
    PIDTENTRY IdtEntry;
    DWORD Entry;
    
    __asm sidt g_IDTR;
    
    IdtEntry = (PIDTENTRY)(g_IDTR.IDTBase + 8);

    CliAndDisableWPBit();

    g_bExit = TRUE;

    __asm mov eax, dr7;                // 产生一次例外并且清除Dr7:GD

    if ( g_OldDBEntry != 0 )
    {
        IdtEntry->LowOffset = (USHORT)g_OldDBEntry;
        
        IdtEntry->HiOffset = (USHORT)( g_OldDBEntry >> 16 );        
    }

    ReLoadCR0AndSti();
    
    DbgPrint(" UnLoad drx hook../n");

    return;
}

NTSTATUS DriverUnload(IN PDRIVER_OBJECT DriverObject)
{    
    UnHookDBInt();
    
    return STATUS_SUCCESS;
}

NTSTATUS DriverEntry(
                     IN PDRIVER_OBJECT  DriverObject,
                     IN PUNICODE_STRING RegistryPath
                     )
{
    HookDBInt();
    
    DriverObject->DriverUnload = DriverUnload;

    DbgPrint("Load drxhook Driver Ok.../n");

    return STATUS_SUCCESS;
}
/***********************/
display:kms-connector-4.14kernel DOC: overview In DRM connectors are the general abstraction for display sinks, and include als fixed panels or anything else that can display pixels in some form. As opposed to all other KMS objects... 阅读详情

相关推荐

STM32 上 FreeRTOS 的启动与任务调度详解

4. SysTick定时器:FreeRTOS启动调度器后,会接管STM32的SysTick定时器,用于生成系统节拍,因此不要在HAL库中重复配置SysTick(比如HAL_Init()中已配置,无需再手动调用SysTick_Config()),否则会导致系统节拍异常,任务延迟不准。2. 任务栈大小需按需配置,不是越大越好(浪费RAM),也不能太小(会导致栈溢出),比如简单的传感器读取任务,1024字(4096字节)足够,复杂任务(比如串口接收+数据解析)可调整为2048字。

qq_40170041的博客 868

Way DataMigrator(原名為ETL Manager)

iWay DataMigrator(原名為ETL Manager) 產品簡介 快速建立一個強大且彈性的資料結構 iWay Software提供一個具有擴充性且有效地做到資料管理的方法-使您能夠在操作時直接去存取資料,取得資料倉儲的暫存資料或資料超市,並且可以動態下鑽到明細的資料-所以您可以自行設計結構,定義所有使用者的獨特資訊需求。經由可提供支援廣泛資料介接轉...

hiwings_126com的专栏 288

ASReview:基于主动学习的AI文献筛选工具,提升科研效率

主动学习是机器学习的一个重要分支,其核心原理是让算法能够主动选择最有价值的数据进行标注,从而以更低的成本获得更好的模型性能。这一技术通过人机协作的闭环流程,显著提升了数据标注和模型训练的效率和精度。在工程实践中,主动学习尤其适用于数据标注成本高昂或数据类别不平衡的场景,例如医学影像分析、自然语言处理中的文本分类以及推荐系统的冷启动问题。通过优先标注模型最不确定的样本,它能够有效解决传统机器学习面临的冷启动和数据稀疏性挑战。本文聚焦的ASReview项目,正是将主动学习原理应用于系统文献综述这一具体场景,通过

weixin_28725959的博客 432

Hooking the kernel directly

By Anton Bassov.IntroductionSometimes, we run into a situation when we badly need to hook some kernel function, but are unable to do it via conventional PE-based hooking. This article explains how

jingzhongrong 1033

第八篇 永磁同步电机控制-MTPA、MTPV

MTPA 的全称是 Maximum Torque Per Ampere,即 最大转矩电流比控制。核心思想:在输出特定转矩时,通过控制定子电流的幅值和相位(即d轴和q轴电流的分量),使得所需要的定子电流幅值最小。通俗理解:就是用“最省电”的方式产生所需要的力矩。就像开车时,找到一个最合适的油门和档位配合,使得在输出相同动力时,油耗最低。

深耕汽车电子:AUTOSAR、电机控制,助力数字汽车 1874

Unidbg逆向阿里系App签名:从环境补全到算法还原实战

在移动安全与协议分析领域,理解应用层签名机制是核心挑战之一。签名算法作为保障通信安全与身份验证的关键技术,其原理通常涉及哈希、加密及密钥协商等基础密码学概念。在Android平台,核心签名逻辑常被加固并隐藏于Native层SO库中,以对抗动态调试与静态分析,这为安全研究和协议兼容带来了技术障碍。Unidbg作为一种基于模拟执行的逆向工程工具,通过模拟ARM指令集和系统调用,允许研究者在脱离真机环境的情况下,可控地执行和调试SO文件,为解决此类问题提供了创新思路。其技术价值在于实现了对加固代码的确定性分析与算

weixin_42525738的博客 940

android内核hook定制,android kernel syscall table hook

I am using android 4.2.2(Jelly Been) with linux-kernel 3.0.31 source code. I am trying to hook open system call but i don't know that how to change a page from read-only to writable given an address b...

weixin_35183690的博客 790

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2087

Linux 文件/文件夹隐藏(hook getdents)

前面讲的都是一些基础,比如说拿到sys_call_table地址,简单的hook某个函数,这一节做一个文件/文件夹隐藏,就是hook住文件枚举API --> getdents()&getdents64() fshid.c #include <linux/init.h> #include <linux/module.h> #include <linux/syscalls.h> #include <linux/kallsyms.h> #include

qq_42931917的博客 3261

强化学习与行为树的融合在游戏编程中的应用

在游戏中,我们可以将游戏的状态作为智能体的状态,将游戏的奖励作为强化学习中的奖励信号,从而训练智能体在游戏中做出最佳决策。强化学习通过试错学习来优化角色的决策策略,而行为树提供了一种灵活的方式来组合和调整不同的行为。行为树可以灵活地调整和组合不同的行为,以适应游戏中不同的情境和目标。在游戏开发中,强化学习和行为树是两种常见的技术,它们被广泛应用于游戏智能的实现。接下来,我们可以定义一个具体的行为树(BehaviorTree),该行为树由一系列节点组成,每个节点代表一个特定的行为或决策。

TechO_O的博客 683

YOLOv13-SWC (ShiftWise Convolution) 完整移植与原理深度解析教程

YOLOv13-SWC模型移植与原理解析 本文详细介绍了YOLOv13-SWC模型的完整移植过程与核心技术原理。YOLOv13-SWC在YOLOv8架构基础上引入ShiftWise Convolution(SWC)模块,通过创新性的位移操作、重参数化大核卷积和LoRA分解技术,显著提升了模型性能。文章包含三个核心部分: 模型移植实现:包括配置文件创建、任务模块修改和核心代码实现,重点介绍了SWC模块的掩码机制和LoRA卷积分解策略。 ShiftWise操作原理:深入解析了将大核卷积分解为小核卷积位移组合的数

FJN110的博客 506

_黑客大神秘籍:Linux下Hook方式汇总

导语• Linux下的Hook方式,从ring3到ring0,姿势很多,但其实是互通的,这里总结自己实现的几个。/****** Ring3 ******/LD_PRELOAD劫持.soptrace API调试技术HookPLT劫持/******* Ring 0 *******/针对系统调用的hook--首先获得sys_call_table利用sys函数的嵌套实现hook调用的子函数修改系统调用的前...

weixin_40007515的博客 476

24、JavaFX MP3 音频播放器开发详解

本文详细介绍了如何使用JavaFX开发一个功能丰富的MP3音频播放器,涵盖文件拖放加载、音频播放控制、音频频谱可视化、进度定位滑块等核心功能,并提供了完整的代码实现和解析。适合希望学习JavaFX多媒体应用开发的开发者参考。

wind6的博客 170

Writing drivers to perform kernel-level SSDT hooking

Writing drivers to perform kernel-level SSDT hookingThe goal of the reader is to perform the the below points while following the tutorial. The tutorial describes how to do this step by step.Write

lionzl的专栏 1137

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

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

Linux x86架构内核Hook实现

Linux x86架构内核Hook实现 一、内核函数 text_poke()函数用于在内核动态替换opcode,从而达到Inline Hook的效果。 /** * text_poke - Update instructions on a live kernel * @addr: address to modify * @opcode: source of the copy * @len: length to copy * * Only atomic text poke/set should be

qq_42931917的博客 5513

lwip-2.0.3

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

kernel android,How to start Android Kernel programming?

If you are talking about platform level programming,i.e. framework extensions, native libraries and services there are a few places to start.The first one is the new and updated official open source p...

weixin_30440721的博客 130

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

What Does __read_mostly In The Linux Kernel Do?

If you have spent any time looking at Linux kernel code you have undoubtedly come across the__read_mostly macro, in fact you have probably seen it within a structure definition reference or even at

nancygreen的专栏 1217

Linux Kernel 2.6 Syscall Hooking via the Interrupt Descriptor Table

The symbol of sys_call_table is no longer exported since Linux 2.6.x, we have to HACK it http://www.elliotbradbury.com/linux-syscall-hooking-interrupt-descriptor-table/ Ever since the system cal

realduke2000的专栏 1566

大模型推理引擎vLLM(21): vllm0.21.0中EP基类代码modular_kernel.py详细走读

大模型推理引擎vLLM(21): vllm0.21.0中EP基类代码modular_kernel.py详细走读

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 283

Detours within Windows kernel

By: izik   I had to do an inline function hooking (aka. Detouring) to accomplish some task. When Ive started looking around for example in rootkits source codes, it turns out no rootkit is actual

1105

经典文章-API Hook Revealed

原文:   Intercepting Win32 API calls has always been a challenging subject among most of the Windows developers and I have to admit, it's been one of my favorite topics. The term Hooking represents

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

Kernel-mode API spying - an ultimate hack

AbstractAfter having published my article about process-wide API spying, I received plenty of encouraging messages - readers have generally accepted my model of hooking function calls. In this artic

1127
上一篇: Displaying the 'Properties' of a file or folder.
下一篇: AK922: 突破磁盘低级检测实现文件隐藏
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值