tiechui_lesson14_网络连接请求的拦截

news2025/1/18 20:53:26

这一节主要学习网络请求的过滤,铁锤大佬讲了些关于IRP的知识。

笔记

先祭出一张灵魂作画,这是用来描述IRP的流转形式的。
IRP抽线作画
通过这幅图着重解释了一下IoSkipCurrentIrpStackLocation(pirp);的过程,就是在流转到当前的IRP请求之后,不做任何处理,将当前的IRP堆栈传到下一层,使之和上一次内容一样,就相当于“跳过”了。

VOID
IoSkipCurrentIrpStackLocation (
    _Inout_ PIRP Irp
){
    NT_ASSERT(Irp->CurrentLocation <= Irp->StackCount);
    Irp->CurrentLocation++;
    Irp->Tail.Overlay.CurrentStackLocation++;
}

在这里插入图片描述
各种IRP也是分层过滤的,一层一层的传递,然后不同的驱动设备都可以修改。

在拦截IRP这一步就很简单,下边是效果,网络请求也可以拦截到。
在这里插入图片描述

接下来是对请求IRP中的内容进行解析,一般是IRP堆栈里边有很多结构,我们需要通过文档或是经验贴,定义或者强转成我们需要的内容。

具体的分发例程:

NTSTATUS MyDispath(
	PDEVICE_OBJECT pdevice,
	PIRP pirp
) {
	PIO_STACK_LOCATION pripstack = NULL;

	// 我们只关心TCP请求,且流入本驱动的
	if (pdevice == pfilterdevobj)
	{
		pripstack = IoGetCurrentIrpStackLocation(pirp);

		if (pripstack ==NULL)
		{
			return STATUS_UNSUCCESSFUL;
		}

		if (pripstack->MinorFunction == TDI_CONNECT)
		{
			PTDI_REQUEST_KERNEL_CONNECT ptdiconnect =
				(PTDI_REQUEST_KERNEL_CONNECT)(&pripstack->Parameters);

			PTA_ADDRESS ta_addr =
				((PTRANSPORT_ADDRESS)(ptdiconnect->RequestConnectionInformation->RemoteAddress))->Address;

			PTDI_ADDRESS_IP tdi_addr =
				(PTDI_ADDRESS_IP)(ta_addr->Address);

			DWORD address = tdi_addr->in_addr;

			USHORT port = tdi_addr->sin_port;

			NETWORK_ADDRESS data = { 0 };

			data.address[0] = ((PCHAR)&address)[0];
			data.address[1] = ((PCHAR)&address)[1];
			data.address[2] = ((PCHAR)&address)[2];
			data.address[3] = ((PCHAR)&address)[3];
			data.post[0] = ((PCHAR)&port)[0];
			data.post[1] = ((PCHAR)&port)[1];

			port = HTONS(port);

			DbgPrint("connect %d.%d.%d.%d:%d\n", data.address[0],
				data.address[1],
				data.address[2],
				data.address[3], port);

			DbgPrint("connect io address <%x>\n", address);
		}

	}
	

	IoSkipCurrentIrpStackLocation(pirp);

	return IoCallDriver(pdodevobj, pirp);
}

里边在端口的转换时,使用了HTONS

HTONS本身所做的就是将USHORT从主机序转化为网络序
参考:用C语言进一步优化Windows Shellcode

然后里边对结构内容的查找,涉及很多类型和指针的调用,其实也米有难得地方,对应好结构的说明进行指定或强转。(很复杂就是😗)

在这里插入图片描述

小结

锤哥在视频里边花了很多时间来调试找错误,来接解决端口显示异常的问题,感谢大佬,很受用!

”本着调试的精神来解决问题“ Getit✅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/576117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jarvis OJ pwn——level1

checksec&& 运行 ida main函数里的vulnerable_function函数存在溢出 给输入分配的栈空间为0x88 利用思路 ret2shellcode 代码 Author : 白银 Date : 2023-05-27 14:43:28 LastEditors : 白银 LastEditTime : 2023-05-27 16:52:19 FilePath : /pw…

五十行代码教你写一个简单的内存池(二级指针的应用)

固定大小内存的内存池实现 该内存池是一个很简单的内存池&#xff0c;只能申请固定大小的内存&#xff0c;仅供学习 要点&#xff1a; 构造隐式链表二级指针 存储结构 typedef struct mempool_s{int block_size; // 每一块的大虚哎int free_count; // 剩余有多少块是可以…

C#医院LIS系统源码 LIS实验室管理信息系统源码 LIS检验系统源码

1、LIS系统技术框架 &#xff08;1&#xff09;总体框架&#xff1a; SaaS架构的Client/Server应用 服务可伸缩&#xff0c;多服务协同 服务可拆分&#xff0c;功能易扩展 &#xff08;2&#xff09;技术细节&#xff1a; 体系结构&#xff1a;Client/Server架构 客户端…

资深SRE带你看阿里云香港故障

一、故障背景 12月18日阿里云香港Region发生重大故障&#xff0c;多个重要互联网服务受到影响&#xff0c;包括澳门日报、金融管理局、澳门银河、莲花卫视、澳门水泥厂等基础服务&#xff0c;澳觅和MFood等外卖平台&#xff0c;多个区块链交易所也受到影响。详情见官方故障报告…

第12课【DMA 直接数据访问】直接数据访问 效率 数据总线冲突 通道 仲裁器

目录 简介功能框图请求通道仲裁器 使用配置传输方向数据量传输模式 实例分析存储器间传输存储器到外设 简介 DMA&#xff08;Direct Memory Access 直接内存访问&#xff09;指的是STM32中的一个外设。它可以在无需CPU介入的情况下&#xff0c;实现外设和存储器之间或存储器与…

毕业季,给大家用python画一个飞机吧~预祝大家一帆风顺

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 今天我们主要用到turtle这个模块&#xff0c;它是python自带的&#xff0c; 所以无需安装&#xff0c;我们直接导入使用就好了~命令如下&#xff1a; import turtle那这个模块有什么作用呢&#xff1f; 它是python中…

LeetCode刷题(ACM模式)-02链表

参考引用&#xff1a;代码随想录 注&#xff1a;每道 LeetCode 题目都使用 ACM 代码模式&#xff0c;可直接在本地运行&#xff0c;蓝色字体为题目超链接 0. 链表理论基础 0.1 链表定义 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff1a…

01背包问题-递推公式的自我理解与LeetCode 416. 分割等和子集

学算法好痛苦&#xff0c;完全是对我智力的一次次折磨&#xff0c;看了好多博客&#xff0c;对二维dp数组的理解都是直接搬了代码随想录&#xff0c;搬了随想录又没详细解释&#xff0c;大家都是一眼看懂的吗&#xff0c;好吧&#xff08;&#xff09; LeetCode 416. 分割等和子…

华侨大学主题模版

华侨大学主题模版 适用于 课程作业、实验报告、项目策划、毕业论文、毕设答辩... 这是一个非官方项目&#xff0c;仅供个人学习研究。 &#x1f680; 指南 &#x1f4d6; 仓库简介 该仓库提供了一系列适用于课程作业、实验报告、项目策划、毕业论文、毕设答辩等场景的华侨大…

API接口对电商平台有怎样的帮助?如何获取API接口?

API&#xff08;Application Programming Interface&#xff09;接口对电商平台有很多帮助&#xff0c;下面列举几点&#xff1a; 1.提高效率 API接口可以让电商平台的不同模块之间进行快速的数据交互&#xff0c;帮助平台实现更高效的业务处理。比如&#xff0c;在订单管理和…

牛客网学习之倒置字符串(详解fgets函数,如何读取含有空格的字符串)

题目要求&#xff1a; 过程分析&#xff1a;&#xff08;大致思路&#xff09; 具体代码&#xff1a; #include <stdio.h> #include <string.h> /*逆序字符串*/ void reverse(char* begin,char* end) {while (begin < end){char temp *begin;*begin *end;*en…

程序员的出路是什么?

做为一个程序员&#xff0c;工作了一定时间后&#xff0c;一定会有一个想法&#xff0c;那就是程序员能干多久&#xff0c;未来的发展方向是什么&#xff0c;更专业一点的说法是&#xff0c;职业规划到底是什么。 说实话&#xff0c; 我也仔细考虑过这个问题&#xff0c;偶尔也…

基于 HTTP Range 实现文件分片并发下载!

目录 前言 基础下载功能 进阶下载功能 单片下载 多片下载 浏览器发送预检&#xff08;preflight&#xff09;请求 express 不支持多段 range multipart/** 搭配 boundary** 分片下载功能 “只读的” ArrayBuffer 对象 DataView 子类 Uint8Array 操作二进制数据 Bl…

不愧是腾讯出来的,太厉害了...

前段时间公司缺人&#xff0c;也面了许多测试&#xff0c;一开始瞄准的就是中级水准&#xff0c;当然也没指望能来大牛&#xff0c;提供的薪资在15-20k这个范围&#xff0c;来面试的人有很多&#xff0c;但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…

Go对Json的支持[encoding/json]

数据类型中转json的函数 基本数据转json Marshal使用以下与类型相关的默认编码: 布尔值编码为JSON布尔值。 浮点数、整数和数字值编码为JSON数字。 字符串值编码为JSON字符串&#xff0c;强制为有效的UTF-8; 用Unicode替换符文替换无效字节。 这样JSON就可以安全地嵌入到HTML …

2023年5月软考考试真题及答案汇总

2023上半年软考考试在5月27日-5月28日举行&#xff0c;为大家整理了各科目的考试真题及答案&#xff0c;可用于估分。&#xff08;会持续更新哦&#xff09; ​ 2023年上半年系统集成项目管理工程师上午题 1、在&#xff08; &#xff09;领域&#xff0c;我国还远未达到世界…

【数据结构】---几分钟简单几步学会手撕链式二叉树(中)

文章目录 前言&#x1f31f;一、二叉树链式结构的实现&#x1f30f;1.1 二叉树叶子节点个数&#x1f4ab;代码&#xff1a;&#x1f4ab;流程图&#xff1a; &#x1f30f;1.2 二叉树的高度&#x1f4ab;第一种写法(不支持)&#xff1a;&#x1f4d2;代码&#xff1a;&#x1f…

TCP协议的三次握手和四次挥手

完整的TCP内容&#xff0c;请参考RFC 9293 TCP协议为应用提供可靠的、有序的的字节流服务。TCP是面向连接的&#xff0c;提供了全双工的通信。TCP使用端口号来识别应用程序服务并在主机之间复用不同的流。 TCP header格式 TCP header也像IP header一样&#xff0c;在header中…

【Kafka】超详细介绍

文章目录 概念部署方案磁盘网络CPUpartition的数量 命令查看版本找kafka和zookeeper的ip/porttopic创建 topic查看get topic 列表get topic 详情 修改topic修改分区级别参数(如增加partition) 删除topic设置消息大小上限 生产查看生产生产消息 查看消费server 查看 offset查看积…

车载电子之汽车HUD技术

一、什么是HUD技术 HUD&#xff08;head up display抬头显示器&#xff09;是将重要信息显示在挡风玻璃上的一种显示系统&#xff0c;基本原理是&#xff1a;投影仪发出的光信息&#xff0c;经过一系列的折射、反射等投影到挡风玻璃上&#xff0c;人眼就能看到投射在上面的信息…