院赛PWN方向WP
PWN方向WP快两年不打Pwn,限时回归一下,但是不得不说真的生疏了,泪目….
what??-mid
上来就给那么大的一个栈溢出,泪目,以为会很简单
看了下,栈不可执行,而且,在函数表里也没有发现后门函数
嘶,难搞,那咋整
问了下是SROP /(ㄒoㄒ)/~~
死去的记忆突然攻击
总之就是看这个文章
SROP - CTF Wiki
原理如下
sigreturn 是一个系统调用,它会在进程处理完信号时被调用,具体来说,sigreturn 用于恢复在信号处理程序中保存的上下文并返回到信号触发之前的程序执行状态。
执行这个系统调用,就会把栈上保存的之前状态的寄存器的值恢复
所以如果我们能够溢出足够多,并且能给 rax 赋值为 15,并且进行syscall
就能给所有寄存器赋值到我们想要的值
顺序参考这个,先恢复r8然后再r9,r10….
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051struct _fpstate ...
网络编程
网络编程Visual Studio跨平台因为我是一个Windows选手,VS用惯了,叫我去用别的IDE确实比吃了xx还难受,所以研究了一下如何在Windows桌面端用Visual Studio编译,运行,调试,附加调试Linux的程序
首先要按照 Visual Studio IDE跨平台编写和调试Linux C/C++程序_visual studio跨平台编译-CSDN博客 这篇博客的内容,用ssh协议,让虚拟机和Visual Studio建立连接
其次,会遇到一个问题,Visual Studio大规模遇到不认识的库,疯狂报错,飘红,但是可以编译成功,这是因为VS还没把库全部拷贝过来,具体要在这里设置,点击更新或者下载即可
还有,记得要以root帐户登录,这样才有足够的权限附加调试
但是ubuntu默认不能以root帐户登录,具体看这一篇文章 Ubuntu 系统直接使用 root 用户登录实例 - 知乎
然后就可以快乐地附加调试了
Linux前置知识主要是为了网络编程的考试
因为我是一个Windows选手,所以Linux的恶补了下
Linux下的编译和链接Linux下的 ...
ARK工具开发(持续更新)
项目更新进度:2024-11-26:ARK工具v1.0.0上线,泪奔~ 0xcc12138/ARK-: 一个开源的ARK工具,会持续更新,从简单做起
ARK工具开发ARK 是 Anti-Rootkit(反Rootkit工具) 的缩写
Rootkit 是一类恶意软件,它被设计用来隐藏自身或其他恶意活动(如病毒、后门等),以避开用户和安全工具的检测。它通常在系统的内核层或用户层中以深层方式运作,可以隐藏文件、进程、网络连接以及注册表项等。
开发框架尝试一波用QT框架开发😀,MFC太老了,泪目,要跟上时代
进程遍历Ring3方法Ring3权限级别枚举进程的方法
1.CreateToolhelp32Snapshot: 用于创建一个系统快照,该快照包含了系统中所有活动的进程和线程的列表。参数TH32CS_SNAPPROCESS表示快照类型为进程。然后Process32First / Process32Next: 这两个函数用于遍历由CreateToolhelp32Snapshot创建的进程快照。Process32First用于获取快照中的第一个进程,而Process32 ...
Windows应急响应(持续更新)
Windows应急响应基本命令:获取Ip地址
ipconfig /all: 显示Windows主机的详细IP地址信息,包括IP地址、子网掩码、默认网关等。
ipconfig /release: 释放当前网络接口的IP地址。 释放IP地址是指将之前分配给网络接口的IP地址返回给网络,使得该IP地址可以被其他设备使用。
ipconfig /flushdns: 清除DNS解析器的缓存。
ipconfig /renew: 更新网络接口的IP地址。
/all /flushdns 用得比较多
ipconfig 命令主要用于显示本地计算机的网络配置信息,包括本地IP地址(局域网IP)、子网掩码、默认网关等。这些信息对于诊断本地网络问题非常有用,但它们并不直接显示公网IP地址(即外部IP地址),因为公网IP地址是分配给互联网服务提供商(ISP)的路由器的,而不是直接分配给单个计算机的。 可以用搜索引擎在线查看自己的公网IP
获取端口信息
netstat -an: 显示所有端口的开放情况和网络连接状态,包括TCP和UDP端口。
监听端口是指计算机或服务器上的网络端口,它处于等 ...
Minifilter(nullfilter,scanner,sandbox)
MinifilterMinifilter简介MiniFilter是微软为我们开发的一个新的驱动,称为过滤管理器.(Filter Manager或者 fltmgr).这个驱动主要作用就是如果有文件操作可以通知我们.
Minifilter与legacy filter的区别:
1.比sfilter加载顺序更易控制,因为Minifilter可以设置Altitude
对于Minifilter来说,Altitude 是一个非常重要的概念,因为 Minifilter 结构允许多个过滤驱动共存,而 Altitude 数值用于规定每个驱动的层级位置,高度越低的驱动越靠近文件系统核心,优先处理文件操作。
而Sfilter要自己手动Attach,如果多个过滤设备的话,加载顺序难免会较难控制
2.Minifilter具有可卸载能力而legacy filter卸载可能会蓝屏,原因是可能存在仍在处理的IRP请求
3.CallBack模型,只需要处理必要操作的能力
提供了Pre和Post两个类型的回调
4.兼容性更好
5.名字更好处理:提供了函数一键获取文件路径
6.同样遵循IRQL,锁等内核机制
总体框架
以 ...
QT开发框架(持续更新)
QT框架笔记VS上使用QT环境搭建
C++实践之Qt学习(扩展):Visual Studio中Qt开发环境的搭建_visual studio 与 qt-CSDN博客
配置下32,64位的生成配置
【QT】visual studio QT 32位和64位生成配置_qt生成32位程序-CSDN博客
显示中文,防止乱码:
1#pragma execution_character_set("utf-8")
Qt 在跨平台开发中广泛支持 UTF-8 , 它告诉编译器将源代码中的字符串文字编码为 UTF-8,而不是默认的系统编码(例如GBK)。
关于父类的说明
QMainWindow
可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,可以作为桌面应用的主窗口
QWidget
是所有用户界面对象的基类,其他的窗口和控件都是直接或间接地集成自QWidget,一般创建桌面应用程序时需要创建一个窗口,此时选择QMainWindow或者QDialog即可,QMainWindow是主窗口,QDialog表示对话框。而如果不确定是否作为一个顶级窗口或者嵌入到其他窗口 ...
多线程安全
多线程安全总结就是
DISPATCH_LEVEL:SpinLock
APC/PASSIVE:互斥:ERESOURCE/FAST_MUTEX同步:KEVENT/KSEMAPHORE
R3/R0同步通讯:
KEVENT
常见函数的线程
调用源
运行环境
原因
DriverEntry,DriverUnload
单线程
这两个函数由系统进程的单一线程调用,不会出现多线程同时调用的情况
各种分发函数
多线程
分发函数不会和DriverEntry并发,但是可能和DriverUnload并发
完成函数
多线程
完成例程函数随时被未知的线程调用
各种NDIS回调函数
多线程
和完成函数相同
PsCreateSystemThread PsCreateSystemThread是 Windows 操作系统内核中的一个应用程序编程接口(API)。它主要用于在系统进程(System Process)的环境中创建一个新的线程。
123456789NTSTATUS PsCreateSystemThread( OUT PHANDLE ThreadHandle, ...
内核字符串,文件,注册表操作
字符串 文件 注册表UNICODE_STRING简介在Windows内核中,UNICODE_STRING结构体用于表示一个以UNICODE编码的字符串。它在内核和用户模式下的结构相同,并在内核驱动编程中用于处理字符串操作。
12345typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer;} UNICODE_STRING, *PUNICODE_STRING;
Length:
类型:USHORT
描述:表示字符串的实际长度,以字节为单位,包含字符串内容但不包括终止的空字符(即不一定为0终止)。Length值的上限是MaximumLength。
MaximumLength:
类型:USHORT
描述:表示分配给字符串缓冲区的最大长度(以字节为单位)。MaximumLength通常大于或等于Length,以确保在需要时能扩展字符串。
在分配时通常包含一个额外的2字节空间以便于0结尾的Unicode字符串处理,但这取决于特定的使用场景。
...
IRP的深入理解(持续更新)
IRP的深入理解参考文章: IRP IO_STACK_LOCATION 《寒江独钓》内核学习笔记(1) - 郑瀚 - 博客园
IRP是什么从概念上讲IRP类似于windows应用程序的消息。我们知道在windows中应用程序是由消息驱动的。
IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中的一种非常重要的数据结构。上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求,操作系统将相应的I/O请求转换成相应的IRP,不同的IRP会根据类型被分派到不同的派遣例程中进行处理。
IRQL等级在写驱动(软件)我们能接触到的的IRQL等级只有三种
1.无中断:PASSIVE_LEVEL(0):
在此级别,所有中断都可以被处理,没有任何屏蔽。线程可以被调度和抢占,因此用户模式代码大部分时间都运行在这个级别。在此级别下可以执行各种内核 API 和用户模式操作,比如文件 I/O、内存分配、访问分页内存、使用等待和同步对象等。
DriverEntry、 AddDevice、 Reinitialize 和 Unlo ...
Sfilter的实现原理
Sfilter的实现原理简介Windows 文件过滤驱动的原理主要基于操作系统的 I/O 管道,利用过滤驱动程序来监控、修改或控制文件系统的 I/O 操作。所有的 I/O 操作(如打开文件、读写文件、关闭文件等)都通过 IRP 来处理。当用户模式程序发出 I/O 请求时,操作系统生成相应的 IRP 并将其发送到适当的设备驱动程序。
回调函数 : 在 IRP 请求处理中,涉及的函数通常被称为 回调函数。这些回调函数是在驱动程序中定义的,用于处理特定类型的 IRP 请求。回调函数在特定的事件发生时被调用。这也就是为什么三环程序明明没有任何跳转就可以去执行注册的回调函数,就是发送了IRP请求,所以注册的回调函数会被执行
控制设备:DriverEntry中创建,接收自己客户端的IRP
过滤设备:绑定的时候创建,在设备栈上接收其他R3程序的IRP
驱动和设备的关系:
设备对象是驱动对象的具体实例:驱动对象定义驱动程序的属性和行为(例如处理各种IRP的函数),设备对象是驱动控制的具体设备,实际接收和处理IO请求。一个驱动对象可以管理多个设备对象,每个设 ...