公告-无限期停更
公告-停更博主要参加27考研,不打算二战,且本科课程学得稀烂,遂开始逐步复习。本博客主要记录信息安全相关主题,大概考前不打算继续学习技术相关。
(考前也可能会诈尸
UEFI编程入门-GUI开发
UEFI编程入门-GUI开发入门UEFI的事件接口函数运行于启动服务环境下,有不同的任务优先级TPL要求。启动服务环境下有4种任务优先级,高优先级任务可以中断低优先级任务。
TPL要求
含义
TPL_APPLICATION
最低优先级,应用程序运行在这个级别
TPL_CALLBACK
中等优先级,比较耗时的操作,如磁盘操作
TPL_NOTIFY
高优先级,不允许阻塞,如底层IO操作
TPL_HIGH_LEVEL
最高优先级,不允许被中断,如UEFI内核全局变量修改
事件存在两种互斥的状态:等待和触发。当事件被创建后,UEFI系统将其设置为等待状态。事件被触发后,UEFI系统将其转换为触发状态。
对于处于TPL_CALLBACK和TPL_NOTIFY级别的事件,存在处理队列。若队列中同志函数的TPL小于等于目前任务TPL,那它只能等到当前任务TPL降低,一般通过启动服务的RestoreTPL来改变TPL。
常用函数CreateEvent/CreateEventEx函数CreateEvent和CreateEventEx均用于产生事件,原型如下。其中Cr ...
WindowsAPI编程核心技术-NPcap网络抓包入门
WindowsAPI编程核心技术-NPcap网络抓包入门环境搭建NPcap是WinPcap的改进版,后者已停止维护。在官网https://npcap.com/ 获取安装包和SDK,并运行安装包。
新建Visual Studio工程,添加SDK的Include目录为包含目录,添加Lib\x64目录为库目录,链接器附加依赖项添加wpcap.lib、packet.lib和ws2_32.lib文件。
PCAP文件格式文件格式大致为:
1234文件头24字节数据报头16字节 + 数据包数据报头16字节 + 数据包...
文件头格式为:
123456789struct pcap_file_header { bpf_u_int32 magic; //PCAP文件标识 如d4 c3 b2 a1 u_short version_major; //主版本号 u_short version_minor; //次版本号 bpf_int32 thiszone; /* 时区修正 未使用 总为0 */ bpf_u_int32 sigfigs; /* 精确时间戳 未使用 总为 ...
Windows驱动开发入门-WDF初探
Windows驱动开发入门-WDF初探基本结构WDF基本对象包括驱动对象WDFDRIVER和设备对象WDFDEVICE。
每个设备驱动都必须有与之对应的唯一的驱动对象,该对象由内核执行体I/O管理器在驱动首次加载时创建,结构定义为:
1234567typedef struct _WDF_DRIVER_CONFIG { ULONG Size; PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd; //设备对象添加例程 PFN_WDF_DRIVER_UNLOAD EvtDriverUnload; //卸载例程 ULONG DriverInitFlags; //初始化标识符 ULONG DriverPoolTag; //调试器显示的内存表示 4字节} WDF_DRIVER_CONFIG, *PWDF_DRIVER_CONFIG;
驱动至少创建一个设备对象,每个设备对象包含指向下一个对象的指针,形成一个设备链。设备对象是能使软件操作硬件的数据结构,包括位于设备堆栈最底层的物理设备对象PDO ...
Windows软件调试初探-事件追踪ETW
Windows软件调试初探-事件追踪ETW入门ETW使用提供器-消耗器-控制器设计模式。输出追踪消息的目标程序是提供器,接收和查看追踪消息的工具或文件是消耗器,负责控制追踪会话的工具是控制器。用于支持ETW传输追踪信息的通信连接称为ETW会话,Windows最多支持64个ETW会话,其中有两个是系统专用的,分别是启动早期用的Global Logger Session和记录系统预定义事件的NT Kernel Logger Session。
ETW基础设施核心部分是实现在内核模块的,作为WMI一个部分实现。有一部分函数在DDK中公开,供驱动调用,用户模式API在ADVAPI32.DLL输出。
1x nt!Wmi*trace*
提供ETW消息ETW提供器通过RegisterTraceGuids向系统注册自己的GUID,这样ETW控制器才能通过GUID找到该提供器。若ETW控制器启动或停止该提供器,则系统调用回调函数。
123456789101112#include <evntrace.h>#define RegisterTraceGuids RegisterTrace ...
OpenSSL入门-SM2实践
OpenSSL入门-SM2实践MIRACL下载MIRACL:https://github.com/miracl/MIRACL ,打开x64 Native Tools Command Prompt for VS 2022,工作目录改为source下,并将include目录内所有文件拷贝到source目录下,并运行../lib/ms64doit_cpp.bat。于是在source目录下生成miracl.lib,接下来工程需要链接该.lib。
SM2加密需要复制来miracl.h和mirdef.h头文件。
test.c:
1234#include "SM2_ENC.h"void main() { SM2_ENC_SelfTest();}
SM2_ENC.c:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 ...
OpenSSL入门-SSL-TLS编程实战
OpenSSL入门-SSL-TLS编程实战入门用SSL_library_init、OpenSSL_add_ssl_algorithms或SSLeay_add_ssl_algorithms初始化SSL算法库,调用SSL系列函数前必须先调用一个:
123int SSL_library_init(); //成功1 否则0#define OpenSSL_add_ssl_algorithms() SSL_library_init()#define SSLeay_add_ssl_algorithms() SSL_library_init()
用SSL_CTX_new和SSL_CTX_free分别初始化和释放SSL上下文环境变量。
123456SSL_CTX* SSL_CTX_new( SSL_METHOD* meth //使用的SSL协议算法); //成功返回指针 否则NULLvoid SSL_CTX_free( SSL_CTX* ctx);
其中参数meth可以是:
12345678SSLv2_server_method();SSLv2_client_method();SSLv3 ...
OpenSSL入门-PKI实战
OpenSSL入门-PKI实战入门需要准备三台电脑:根CA主机、子CA主机和客户主机,下面先搭建根CA主机和子CA主机:
先查看防火墙,若开启则要关闭:
12firewall-cmd --state #查看状态systemctl stop firewalld
打开OpenSSL配置文件如下,或Windows下为/bin/openssl.cfg。
1cat /etc/ssl/openssl.cnf
部分内容为:
123456789101112131415161718192021222324252627282930313233343536[ ca ]default_ca = CA_default # 默认CA[ CA_default ]dir = /etc/pki/CA # CA工作目录 这里改一下certs = $dir/certs # 证书存储路径crl_dir = $dir/crl # 证书吊销列表da ...
OpenSSL入门-椭圆曲线
OpenSSL入门-椭圆曲线数学基础例如求椭圆曲线$y^2=x^3-x$在有限域$\operatorname{GF}(89)$上所有点:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112#include <iostream>#include<string.h>#include<math.h>#include<time.h>#define MAX 100typedef struct point { int point_x; int point_y;}Point;typedef struct ecc ...
OpenSSL入门-RSA综合
OpenSSL入门-RSA综合PKCS#1加密填充格式:
1EB=00+BT+PS+00+D
EB位转化后十六进制表示的数据块,如密钥为1024位时EB长度为128字节。BT为处理模式,公钥操作为02,私钥操作为00或01,当D以00开头时BT为01,不以00开头时为00。PS为填充字节,填充数量为$密钥字节长-3-明文字节长$,最小长度为8,当BT为00时填充用00,BT为01时填充用FF,BT为02时随机非零填充。
C语言实现:
12345678910111213141516171819202122232425262728293031323334353637383940#include <iostream>#include <stdlib.h>#include <time.h>int rsaEncDataPaddingPkcs1(unsigned char* in, int ilen, unsigned char* eb, int olen) { int i; unsigned char byteRand; if ( ...