Windows驱动开发入门-NDIS小端口驱动
Windows驱动开发入门-NDIS小端口驱动碎碎念小端口驱动就是真正的网卡驱动,相对协议驱动而言,更贴近物理层。小端口驱动主要用于虚拟网卡,例如将通信接口由网络接口变为USB接口等。NDIS小端口驱动之一为ndisedge,使用WDF方式编码,是个虚拟网卡驱动,下层不通过任何物理设备,通过上节ndisprot协议驱动进行收包和发包。
NDIS体系
与上一层关系
TCP/IP NDIS协议驱动
ndisedge NDIS小端口驱动
通过NDIS接口
ndisprot NDIS协议驱动
通过IRP的发送和完成
物理网卡驱动 NDIS小端口驱动
通过NDIS接口
网卡 硬件
通过IO和中断资源
本节我只找到Windows Vista之前的解决方案,最新解决方案为https://learn.microsoft.com/zh-cn/windows-hardware/drivers/network/roadmap-for-developing-ndis-miniport-drivers但需要时间研究,先搁着。
Windows驱动开发入门-NDIS协议驱动源码
Windows驱动开发入门-NDIS协议驱动源码debug.c:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119 ...
Windows驱动开发入门-NDIS协议驱动
Windows驱动开发入门-NDIS协议驱动碎碎念本节代码需要最低警告、关警告按错误处理、关符合模式、关SDL检查、导入ndis.lib和wdmsec.lib。可直接参考Github上微软官方的驱动代码示例库的ndisprot工程。本节代码用传统型驱动编码方式,后面NDIS小端口驱动将用WDF驱动编码方式。
最常用的Ethernet V2(ARPA)以太网包如下,若类型2字节为0x80、0x00则表示为IP包。
低地址
高地址
源网卡MAC地址
目标网卡MAC地址
类型
数据
6字节
6字节
2字节
其他
协议驱动接收上层用户的Socket请求,把这些数据封装为IP包,再把IP包封装成以太网包发送出去;接收到以太网包时,分析这时给哪个用户程序的,把用户数据解析出来,提交给上层应用程序。协议驱动较多用于嗅探,如Wincap,一般不用于防火墙,应为这玩意儿不好干预应用程序发送或接收包。
网卡驱动接口标准NDIS是一组定义好的函数接口的集合。NDIS网络驱动有三种:协议驱动、小端口驱动、中间层驱动(包含过滤驱动),开发者可提供这三种不同的内核模块给NDIS使用。协议驱 ...
Windows驱动开发入门-WFP过滤平台
Windows驱动开发入门-WFP过滤平台碎碎念本节讲网络传输层过滤,其中传输层接口TDI接口技术已被淘汰,取代其的新技术称为Windows过滤平台WFP。WFP包含用户态API和内核态API,本节只讲内核态开发。
WFP分为两大层次模块,用户态基础过滤引擎BFE和内核态过滤引擎KMFE。基础过滤引擎对上提供C调用方式的API以及RPC接口,这些接口封装在fwpuclnt.dll中。基础过滤引擎对下和内核态过滤引擎交互,受内核态过滤引擎控制。内核态过滤引擎与系统网络协议栈交互,通过垫片(此垫片非彼垫片)内核模块从网络协议栈Tcpip.sys中获取网络数据,垫片被插入到网络协议栈各个层中。垫片获取到数据后,通过内核态过滤引擎提供的分类API,把数据传到WFP相应分层中。内核态过滤引擎分为若干个分层,每个分层中存在一个或多个子层和过滤器,子层是分层的更小划分。子层被赋予不同权重,同一个子层中,WFP按照权重从大到小把数据交给相应子层。
例如TCP/IP协议栈中从上到下有数据流分层垫片、ALE网络连接管理、传输分层垫片(TCP/UDP)、网络分层垫片(IPv4/ ...
Java代码审计入门
Java代码审计入门环境准备Docker得用魔法,现在倒是有个经过审查的Docker镜像源。Linux下配置文件为/etc/docker/daemon.json,Windows下直接在Docker Desktop中改。配置文件如下:
12345{ "registry-mirrors": [ "https://hub.atomgit.com/" ]}
然后刷新守护:
123sudo systemctl daemon-reloadsudo systemctl docker restartdocker info #查看是否换源成功
若出现意外则用apt删了重装就行,反正我重装了三遍才换好。
Docker常用命令:
1234567891011121314#测试用docker pull hello-worlddocker run hello-world#基础命令docker run ubuntu echo "helloworld"docker search to ...
Web入门-Java相关
Web入门-Java相关[NUSTCTF 2022 新生赛]Ezjava1丢IDEA,HelloController.java主代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051package com.joe1sn.controller;import com.joe1sn.module.EvalBean;import java.io.File;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMa ...
Web入门-XXE初探
[NCTF 2019]Fake XML cookbook看到代码:
1234567891011121314151617181920212223242526272829303132function doLogin(){ var username = $("#username").val(); //jQuery选择器 var password = $("#password").val(); if(username == "" || password == ""){ alert("Please enter the username and password!"); return; } var data = "<user><username>" + username + "</username><password>" + password + "</pass ...
信息安全数学基础-数论
信息安全数学基础-数论本节数学公式稍多,页面渲染加载时间较长。
整除设$a,b$是任意两个整数,其中$b\not=0$,若存在$q\in\mathbb{Z}$使等式$a=qb$成立,则称$b$整除$a$或$a$被$b$整除,记作$b\mid a$,并把$b$叫做$a$的因数,把$a$叫做$b$的倍数。人们常将$q$写成$a/b$或$\dfrac{a}{b}$。否则称$b$不能整除$a$或$a$不能被$b$整除,记作$b\not\mid a$。
设$a,b\not=0,c\not=0$为仨整数,若$b\mid a,c\mid b$,则$c\mid a$。
设$c\not=0,c\in\mathbb{Z}$,若$c\mid a_1,\cdots,a_n\in\mathbb{Z}$,则$\forall s_1,\cdots,s_n\in\mathbb{Z}$有$\displaystyle c\left|\sum_{i=1}^ns_ia_i\right.$。
设$a,b$为非零整数,若$a\mid b,b\mid a$,则$ ...
Python-PyQt6入门
PyQt6入门安装1pip install pyqt6 pyqt6-tools #其实后面那个就够了
安装后Qt Designer在:
1.venv\Lib\site-packages\qt6_applications\Qt\bin
PyUic6在:
1.venv\Scripts
在PyCharm的工具->外部工具,名字建议Qt Designer,程序找上述Qt Designer安装目录,工作目录建议$ProjectFileDir$\ui。PyUic6添加方式类似,程序选Python解释器路径,实参填如下,工作目录同Qt Designer。
1-m PyQt6.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
新建一个ui文件夹,即可用工具->外部工具打开。
入门这里界面直接拿Qt Designer做了,要不太费劲了。这里举例输入半径,计算周长和面积,所需控件如下,可试着用Form Layout。
控件类别
对象名称
属性
Dialog
windowTitle:”计算园面积”
Label
...
恶意代码分析-Bootkit初探
恶意代码分析-Bootkit初探碎碎念第一个Bootkit恶意软件为1971年的1971年的Creeper,在VAX PDP-10上的TENEX网络操作系统下运行的恶意软件,第一个杀毒软件Reaper就是专门删除Creeper而设计的。引导扇区感染者BSI是最早的Bootkit恶意软件之一,第一次被发现是在MS-DOS时代,它们感染磁盘引导扇区(第一个物理扇区)。
第一个感染Apple II的BSI病毒为Rich Skrenta的Elk Cloner病毒(1982~1983),比PC引导扇区病毒早了几年。下一个影响Apple II的BSI恶意软件是1989年的Load Runner,监听Control-Command-Reset触发的Apple reset命令来将其写入磁盘并实现恶意软件持久化。1986年出现第一个PC病毒Brain。在Windows操作系统引入和普及后BSI时代终结。
绕过微软数字签名检查的所有已知技巧有4种。第一种在用户模式下运行,依靠内置的微软Windows方法来合法地禁用签名策略,操作系统提供一个接口以通过使用自定义证书来验证驱动程序的数字签名,从而暂时禁用驱动 ...