另类挂钩 RING3数据包监视

ZYNQ-Video out IP与Video Timing Controller IP协同工作模式解析 本文深入解析了ZYNQ平台上Video out IP与Video Timing Controller IP的协同工作模式,详细介绍了它们的架构、工作原理及配置要点。通过AXI4-Stream接口实现高效视频数据传输,并结合HDMI输出系统设计实践,为开发者提供了实用的调试技巧和性能优化建议。 阅读详情
另类挂钩 RING3数据包监视

前几天朋友让帮忙写一个RING3程序来监视TCP包并做数据包分析

本来想HOOK ws2_32!WSASend/Send/WSARecv/Recv,后来发现网上的方法都非常挫,尽是不稳定的HEADER INLINE和修改内存~用SPI之类的,又很麻烦

于是自己写了一种方式实现,非常简单,隐蔽,而且在RING3下应该算是最底层的数据包拦截点了~

目前实现了对HTTP包的过滤和显示~将这个CPP编译成DLL用任意方式注入目标进程,打开DBGVIEW就可以看到目标进程所有的发送和接受的HTTP包了~


下面是代码

#include "stdafx.h"
#include "windows.h"
#include "winnt.h"

PVOID pNtDeviceIoControl  = NULL ; 
//

#define AFD_RECV 0x12017

#define AFD_SEND 0x1201f


typedef struct AFD_WSABUF{
  UINT  len ;
  PCHAR  buf ;
}AFD_WSABUF , *PAFD_WSABUF;

typedef struct AFD_INFO {
  PAFD_WSABUF  BufferArray ; 
  ULONG  BufferCount ; 
  ULONG  AfdFlags ;
  ULONG  TdiFlags ;
} AFD_INFO,  *PAFD_INFO;
typedef LONG NTSTATUS;

#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)

const CHAR GetXX[] = "GET ";
const CHAR PostXX[] = "POST ";
const CHAR HttpXX[] = "HTTP";
//////////////////////////////////////////////////////////////////////////
//
// LookupSendPacket
// 检查Send包
// 目前实现了过滤HTTP请求(GET AND POST)
//
//////////////////////////////////////////////////////////////////////////

BOOL LookupSendPacket(PVOID Buffer , ULONG Len)
{
  if (Len < 5)
  {
    return FALSE ; 
  }

  //外层已有异常捕获

  if (memcmp(Buffer , GetXX , 4) == 0 
    ||
    memcmp(Buffer , PostXX , 5) == 0 )
  {
    return TRUE ; 
  }
  return FALSE ; 
}  
//////////////////////////////////////////////////////////////////////////
//
// LookupRecvPacket
//
// 检查Recv包
// 在这里可以实现Recv包查字典功能
// 目前实现了过滤HTTP返回数据包的功能
//
//
///////////////////////////////////////////////////////////////////////////
BOOL LookupRecvPacket(PVOID Buffer , ULONG Len)
{
  if (Len < 4)
  {
    return FALSE ; 
  }

  if (memcmp(Buffer , HttpXX , 4) == 0 )
  {
    return TRUE ; 
  }

  return FALSE ; 
}
//hook函数

//////////////////////////////////////////////////////////////////////////
//
// NtDeviceIoControlFile的HOOK函数 
// ws2_32.dll的send , recv最终会调用到mswsock.dll内的数据发送函数
// mswsock.dll会调用NtDeviceIoControlFile向TDI Client驱动发送Send Recv指令
// 我们在这里做拦截,可以过滤所有的TCP 收发包(UDP之类亦可,不过要更改指令)
//
//////////////////////////////////////////////////////////////////////////

NTSTATUS __stdcall NewNtDeviceIoControlFile(
             HANDLE FileHandle,
             HANDLE Event OPTIONAL,
             PVOID ApcRoutine OPTIONAL,
             PVOID ApcContext OPTIONAL,
             PVOID IoStatusBlock,
             ULONG IoControlCode,
             PVOID InputBuffer OPTIONAL,
             ULONG InputBufferLength,
             PVOID OutputBuffer OPTIONAL,
             ULONG OutputBufferLength
    )
{
  
  //先调用原始函数

  LONG stat ; 
  __asm
  {
    push  OutputBufferLength
    push  OutputBuffer
    push  InputBufferLength
    push  InputBuffer 
    push  IoControlCode
    push  IoStatusBlock 
    push  ApcContext
    push  ApcRoutine
    push  Event
    push  FileHandle
    call  pNtDeviceIoControl
    mov    stat ,eax
  }

  //如果原始函数失败了(例如RECV无数据)

  if (!NT_SUCCESS(stat))
  {
    return stat ; 
  }

  //检查是否为TCP收发指令

  if (IoControlCode != AFD_SEND && IoControlCode != AFD_RECV)
  {
    return stat ; 
  }


  //访问AFD INFO结构,获得SEND或RECV的BUFFER信息
  //这里可能是有问题的BUFFER,因此我们要加TRY EXCEPT
  //

  __try
  {
    //从InputBuffer得到Buffer和Len

    PAFD_INFO AfdInfo = (PAFD_INFO)InputBuffer ; 
    PVOID Buffer = AfdInfo->BufferArray->buf ; 
    ULONG Len = AfdInfo->BufferArray->len;

    if (IoControlCode == AFD_SEND)
    {
      if (LookupSendPacket(Buffer , Len))
      {
        //输出包内容
        //这里输出调试信息,可以用DbgView查看,如果有UI可以做成SendMessage形式~
        OutputDebugString("SendPacket!\n");    
        OutputDebugString((char*)Buffer);
      }
    }
    else
    {
      if (LookupRecvPacket(Buffer , Len))
      {
        OutputDebugString("RecvPacket!\n");
        OutputDebugString((char*)Buffer);
      }
    }
  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
    return stat ; 
  }

  return stat ; 
   




  
}


//////////////////////////////////////////////////////////////////////////
//
//  Hook mswsock.dll导出表的Ntdll!NtDeviceIoControlFile
//  并过滤其对TDI Cilent的请求来过滤封包
//  稳定,隐蔽,RING3下最底层的包过滤~
//
//////////////////////////////////////////////////////////////////////////
void SuperHookDeviceIoControl()
{
  //得到ws2_32.dll的模块基址
  HMODULE hMod = LoadLibrary("mswsock.dll");
  if (hMod == 0 )
  {
    return ;
  }

  //得到DOS头

  PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hMod ; 

  //如果DOS头无效
  if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
  {
    return ; 
  }

  //得到NT头

  PIMAGE_NT_HEADERS pNtHeaders = (PIMAGE_NT_HEADERS)((ULONG)hMod + pDosHeader->e_lfanew);

  //如果NT头无效
  if (pNtHeaders->Signature != IMAGE_NT_SIGNATURE)
  {
    return ; 
  }

  //检查输入表数据目录是否存在
  if (pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress == 0 ||
    pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size == 0 )
  {
    return ; 
  }
  //得到输入表描述指针

  PIMAGE_IMPORT_DESCRIPTOR ImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)((ULONG)hMod + pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

  PIMAGE_THUNK_DATA ThunkData ; 

  //检查每个输入项
  while(ImportDescriptor->FirstThunk)
  {
    //检查输入表项是否为ntdll.dll

    char* dllname = (char*)((ULONG)hMod + ImportDescriptor->Name);
    
    //如果不是,则跳到下一个处理

    if (stricmp(dllname , "ntdll.dll") !=0)
    {
      ImportDescriptor ++ ; 
      continue;
    }
    
    ThunkData = (PIMAGE_THUNK_DATA)((ULONG)hMod + ImportDescriptor->OriginalFirstThunk);

    int no = 1;
    while(ThunkData->u1.Function)
    {
      //检查函数是否为NtDeviceIoControlFile

      char* functionname = (char*)((ULONG)hMod + ThunkData->u1.AddressOfData + 2);
      if (stricmp(functionname , "NtDeviceIoControlFile") == 0 )
      {
        //
        //如果是,那么记录原始函数地址
        //HOOK我们的函数地址
        //
        ULONG myaddr = (ULONG)NewNtDeviceIoControlFile;
        ULONG btw ; 
        PDWORD lpAddr = (DWORD *)((ULONG)hMod + (DWORD)ImportDescriptor->FirstThunk) +(no-1);
        pNtDeviceIoControl = (PVOID)(*(ULONG*)lpAddr) ; 
        WriteProcessMemory(GetCurrentProcess() , lpAddr , &myaddr , sizeof(ULONG), &btw );
        return ; 

      }

      no++;
      ThunkData ++;
    }
    ImportDescriptor ++;
  }
  return ; 
}

//////////////////////////////////////////////////////////////////////////
//
// CheckProcess 检查是否是需要挂钩的进程
//
//
//////////////////////////////////////////////////////////////////////////

BOOL CheckProcess()
{
  //在此加入你的进程过滤
  return TRUE ;
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
           )
{
  //当加载DLL时,进行API HOOK

  if (ul_reason_for_call == DLL_PROCESS_ATTACH)
  {  
    //检查是否是要过滤的进程
    if (CheckProcess() == FALSE)
    {  
      //如果不是,返回FALSE,将自身从进程中卸除
      return FALSE ; 
    }

    //HOOK API
    SuperHookDeviceIoControl();
  }
    return TRUE;
} 
镜头像差之五——场曲 什么是场曲? 场曲[curvature of field] 物面上所有的点经过系统后,最佳焦点位置不在同一平面上,若这些像点所成的面为曲面,则称为系统有场曲。 与物高二次方、入射光瞳口径一次方成正比的像差。若仅存在场曲,则所有物平面上的点都有相应的像点,但分布在一个球面上;若采用弯成此种形状的底片,则可获得处处清晰的像。此时在理想像平面上,像点呈现为圆斑。 第一张图是最简单也是最容易理解的场曲,也就是对焦点锐利,其余部分逐渐松散,但实际上大多现代镜头的场曲都呈现为图二的形态:对焦点与边缘锐度. 阅读详情

相关推荐

esxi8.0.3如何添加USB外置硬盘

本文介绍了在ESXi系统中配置外置USB硬盘作为数据存储的完整步骤:1)通过SSH禁用USB仲裁服务并关闭自启;2)识别已连接的USB硬盘设备路径;3)使用partedUtil创建GPT分区表并计算扇区范围;4)设置VMFS6分区并格式化。关键命令包括停止usbarbitrator服务、partedUtil分区操作以及vmkfstools格式化命令。整个过程需通过SSH执行,最终将USB硬盘配置为名为"USB_Datastore"的VMFS6存储设备。

qq_41683719的博客 1548

[转]另类挂钩 RING3数据包监视---------看雪 qihoocom

另类挂钩 RING3数据包监视 前几天朋友让帮忙写一个RING3程序来监视TCP包并做数据包分析 本来想HOOK ws2_32!WSASend/Send/WSARecv/Recv,后来发现网上的方法都非常挫,尽是不稳定的HEADER INLINE和修改内存~用SPI之类的,又很麻烦 于是自己写了一种方式实现,非常简单,隐蔽,而且在RING3下应该算是最底层的数据包拦截点了~ ...

weixin_34267123的博客 299

新买的USB无线网卡插上没反应?保姆级排查指南:从设备管理器到网络列表

本文提供USB无线网卡无法识别的全流程排查手册,涵盖硬件检测、驱动管理和网络配置三大维度。重点解析设备管理器中的设备状态诊断和驱动解决方案,特别适用于Realtek芯片的无线网卡(如RTL8188GU、RTL8812BU等),帮助用户快速解决网卡插上无反应的问题。

weixin_29876033的博客 509

java hook api 实现封包截取_hook 封包 截取WSASend实例

【实例简介】截取IE11浏览器WSASend实例【实例截图】【核心代码】.版本 2.程序集 hook, , 公开.程序集变量 函数地址, 整数型.程序集变量 dtgesxt, 整数型.程序集变量 原字节, 字节集.程序集变量 sr5h6bdfd, 字节集.程序集变量 原指针地址, 整数型.子程序 取地址, 整数型, 公开, 取原始数据地址,回调原指针时使用返回 (原指针地址).子程序 安装, 逻辑...

weixin_30158793的博客 792

SAP FI 提示没有为会计年度0 定义版本2025 GP626

SAP 错误 GP626 是一个常见的系统消息,通常表示某个会计年度的版本(如版本 0)未被定义或未激活。:在执行某些事务(如创建采购订单、过账凭证或维护成本中心)时,系统会检查相关版本是否已定义。的“Settings for Each Fiscal Year”界面中,选择一个已激活的会计年度。的“Settings for Each Fiscal Year”界面中,找到未激活的会计年度。:在控制范围(Controlling Area)中,未为指定的会计年度定义版本 0。如果没有,添加或复制现有年度的设置。

GAVIN 2493

【深度学习|Transformer模型学习】什么是前馈神经网络(Feed-Forward Neural Network)?将前馈神经网络中的全连接层变成1*1卷积层会有什么样的效果?

【深度学习|Transformer模型学习】什么是前馈神经网络(Feed-Forward Neural Network)?将前馈神经网络中的全连接层变成1*1卷积层会有什么样的效果?

985小水博的摸鱼日常 1377

另类挂钩-RING3数据包监视

另类挂钩 RING3数据包监视前几天朋友让帮忙写一个RING3程序来监视TCP包并做数据包分析本来想HOOK ws2_32!WSASend/Send/WSARecv/Recv,后来发现网上的方法都非常挫,尽是不稳定的HEADER INLINE和修改内存~用SPI之类的,又很麻烦于是自己写了一种方式实现,非常简单,隐蔽,而且在RING3下应该算是最底层的数据包拦截点了~目前实现了对HTTP包的过滤和

1059

环形平滑标签(Circular Smooth Label, CSL)技术详解

环形平滑标签(CSL)是一种优化算法,旨在解决旋转目标检测中角度预测的边界问题。通过将角度回归转化为分类任务,并利用窗口函数平滑标签分布,CSL有效处理了角度周期性的梯度突变问题。其核心原理包括角度离散化和平滑标签编码,通过高斯、矩形、三角等窗口函数生成概率分布。CSL在技术实现上涉及标签转换流程、模型结构调整和损失函数优化,显著提升了检测精度和稳定性。在DOTA数据集上的实验表明,CSL在mAP和角度误差方面优于传统方法。应用场景包括遥感图像分析、自动驾驶和工业质检,部署时需注意旋转NMS编译和ONNX导

浩瀚之水的专栏 641

另类挂钩-RING3数据包监视(Delphi版)

标 题: 【原创】另类挂钩-RING3数据包监视 作 者: qihoocom 时 间: 2009-02-01,15:20 链 接: http://bbs.pediy.com/showthread.php?t=81204 闲着无聊,在看雪上看到这个帖子。Hook NtDeviceIoControlFile 果然够另类,于是迅速翻成Delphi的代码,效果还不错: DebugVie...

weixin_30730053的博客 331

Agentic AI应用架构师如何提升AI应用的灵活性

可扩展性(Scalability):快速添加新功能或扩展任务范围(如Agent从“客服”扩展到“供应链管理”);可修改性(Modifiability):调整Agent的决策逻辑或动作策略,无需重构整个系统;鲁棒性(Robustness):在环境异常或数据噪声下保持性能稳定;自适应(Self-Adaptation):自主学习新场景,无需人工干预。状态空间(S):Agent能感知的所有内部/外部状态(如用户需求、环境数据);动作空间(A):Agent能执行的所有动作(如调用工具、发送消息);

项目管理的博客 597

最新Codex接入DeepSeek官方API教程(无需cc-switch)

最新Codex接入DeepSeek官方API教程(无需cc-switch)

猿小白的博客 967

[原创] Ring3挂钩实现网址过滤、重定向——《另类挂钩-RING3数据包监视》应用...

转一份本地备份,原帖发在看雪的:http://bbs.pediy.com/showthread.php?t=100847 这份代码演示了如何根据黑名单过滤指定URL(可以实现简单的网页防火墙),并且演示了一种最容易实现的页面劫持方法(重定向)。当然,使用这个方法钓鱼是绝对禁止的,出了任何问题都与本人无关 实现原理:1. 网址的黑名单过滤最简单,如果不需要模式匹配的话可以直接 Pos...

weixin_30853329的博客 261

100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状、堆积、横向、百分比、3D柱状图)

0. 专栏导读 1. 普通柱状图 2. 簇状柱形图 3. 堆积柱形图 4. 横向柱状图 5. 横向双向柱状图 6. 百分比堆积柱形图 7. 3D柱形图 8. 3D堆积柱形图 9. 3D百分比堆积柱形图

努力让自己发光,对的人才能迎着光而来 2万+

反NP监视原理(+Bypass NP in ring0

标 题: 【原创】反NP监视原理(+Bypass NP in ring0)作 者: 堕落天才时 间: 2007-01-03,11:58链 接: http://bbs.pediy.com/showthread.php?t=37353NP=nProtect GameGuard(如果你不知道这是什么,请不要往下看)********************************************标

2216

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Windows Ring3层注入——使用Windows挂钩注入(七)

Windows Ring3层注入——使用Windows挂钩注入(七)Windows挂钩注入原理Windows挂钩注入函数原型设置钩子API函数:取消设置钩子API获取模块句柄API:继续调用钩子链中的钩子过程:钩子回调Windows挂钩注入代码示例Windows挂钩注入优缺点优点缺点 SetWindowsHookEx() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视...

qq_38493448的博客 927

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

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

【转】反NP监视原理

********************************************标题:【原创】反NP监视原理                **作者:堕落天才                            **日期:2007年1月3号                        **版权声明:请保存文章的完整,转载请注明出处****************************

!VChen的专栏 1318

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

反NP监视原理(+Bypass NP in ring0)

标 题: 【原创】反NP监视原理(+Bypass NP in ring0)作 者: 堕落天才时 间: 2007-01-03,11:58链 接: http://bbs.pediy.com/showthread.php?t=37353NP=nProtect GameGuard(如果你不知道这是什么,请不要往下看)********************************************标

1925

(转载)反nProtect监视原理(+Bypass NP in ring0)

(收藏) 反nProtect监视原理(+Bypass NP in ring0) 标 题: 【原创】反NP监视原理(+Bypass NP in ring0)作 者: 堕落天才时 间: 2007-01-03,11:58链 接: http://bbs.pediy.com/showthread.php?t=37353NP=nProtect GameGuard(如果你不知道这是什么,请不要往下看)*

TingyaBak的专栏 2245

反NP监视原理

标 题: 反NP监视原理作 者: 堕落天才时 间: 2007-01-03,11:58链 接: http://bbs.pediy.com/showthread.php?t=37353NP=nProtect GameGuard(如果你不知道这是什么,请不要往下看)********************************************标题:【原创】反NP监视原理            

晓斌的博客 1223

反NP监视原理并有实例说明

********************************************标题:【原创】反NP监视原理*作者:堕落天才*日期:2007年1月3号*版权声明:请保存文章的完整,转Q载请注明出处**************************************

hmc1985的专栏 1438

标 题: 【原创】反NP监视原理(+Bypass NP in ring0)(转)

标 题: 【原创】反NP监视原理(+Bypass NP in ring0) 作 者: 堕落天才 时 间: 2007-01-03,11:58 链 接: http://bbs.pediy.com/showthread.php?t=37353 NP=nProtect Gam

zzh520420的专栏 866
上一篇: 封包和拆包
下一篇: 自己动手,制作inline hook扫描工具
M-先生
博客等级 码龄17年 60粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值