WindowsAPI学习笔记
WindowsAPI学习笔记Windows窗口程序基础在屏幕上显示一个窗口的过程一般包括以下步骤,也就是入口函数WinMain的执行流程: 注册窗口类 在注册之前,要先填写RegisterClassEx函数的参数WNDCLASSEX结构的各个字段。 创建窗口 显示窗口、刷新窗口客户区 运行消息循环 获取消息、转换消息、将消息分发到回调函数WindowProc处理。 接下来分别介绍每一个步骤: 注册窗口类RegisterClassEx函数用于注册窗口类,其函数原型如下: 1ATOM RegisterClassEx(_In_const WNDCLASSEX* lpwcx); 其中参数lpwcx是一个指向WNDCLASSEX结构的指针,调用RegisterClassEx函数必须先初始化此结构: 1234567891011121314typedef struct tagWNDCLASSEX { UINT cbSize; // 结构体大小 UINT style; // 窗口类的样式 WNDPROC lpfnWndProc; // 窗口过程函数 ...
C++学习笔记(更新中)
C++学习笔记基础的输入与输出 输出工具cout 1cout << "Hello World"; // 输出Hello World cout可根据变量类型自动识别输出格式,免去printf中要使用的如%d的格式控制符。 换行符endl 1cout << "Hello World" << endl; // 输出Hello World并换行 等效于输出"\n" 输入工具cin 12int a;cin >> a; // 输入a的值 cin根据变量类型自动识别输入格式,免去scanf中要使用的如%d的格式控制符。 插入运算符<<和>> 指明信息流动的路径 cout是一个ostream类对象,cin是istream类对象,它们都定义在iostream头文件中。要使用cout和cin,必须在程序开头包含iostream头文件,并使用using namespace...
ChaCha20算法总结
算法详解ChaCha20 是一种基于流密码的加密算法,由 Daniel J. Bernstein 于 2008 年提出,是 Salsa20 的改进版本。它的主要优点是速度快、安全性高且易于实现。ChaCha20 将密钥(256 位)、**随机数(Nonce,96 位)和计数器(Counter,32 位)**经过一系列混合运算生成密钥流(Key Stream),再与明文进行按位异或得到密文。 ChaCha20 内部状态为一个 4×4 的 32 位无符号整数矩阵,初始排列如下: 1234[ 常量 ][ 常量 ][ 常量 ][ 常量 ][ key0 ][ key1 ][ key2 ][ key3 ][ key4 ][ key5 ][ key6 ][ key7 ][counter][nonce0][nonce1][nonce2] 每一次加密生成 64 字节的密钥流块,ChaCha20 的核心是 Quarter Round(四分之一轮),它使用加法、异或、循环左移(ROTL)混合数据。 加密流程示意图: 实战识别在逆向分析中判断 ChaCha20 的常见特征: 常量字符串...
Salsa20算法总结
算法详解Salsa20是一种流加密算法,是由 Daniel J. Bernstein 于 2005 年设计的流加密算法,速度快、安全性高,被广泛用于网络加密(如 Google 的 QUIC 协议)。它的加密方式是生成密钥流(Key Stream)与明文按位异或,从而得到密文(解密时也是异或,过程相同)。 加密流程示意图: 实战识别在逆向分析实战中判断Salsa20算法的可从一下几点入手: 初始化矩阵中出现 "expand 32-byte k" 或 "expand 16-byte k". 使用 ROTL32 循环左移 7、9、13、18 位。 20 轮循环,且分为 “列变换” 与 “行变换” 两个阶段。 数据块为 64...
Hexo+Butterfly博客的评论系统实现(Giscus)
前情提要: Hexo+Butterfly主题博客搭建 Giscus是什么Giscus是一个基于GitHub Discussions的评论系统,它允许你将评论嵌入到你的网站中。其拥有开源、无需自建数据库等优点,你可以自由地使用和修改它。用户通过GitHub账户登录,简化注册流程,也增强了评论者的身份可信度、便于评论的及时回复与管理。 安装点击如下的链接进入Giscus的安装界面,点击install进行安装。 安装完成后看到如下的界面即说明安装成功 配置任选一个合适的仓库存储评论数据,但要确保: 仓库是公开的 Giscus功能已安装(“安装”步骤已完成) 仓库的Discussions功能已启用,开启方式如下所示: 在仓库的界面中,点击Settings进入设置界面 往下翻找到Discussions的选项并勾选 进入官网,在“仓库”中选择自己要使用的仓库,此时网站会自动确认该仓库是否满足上述条件。 后续是是一些个性化配置选项,这是推荐的配置建议: 页面↔️discussion...
Windbg双机调试配置
原理简介要使用Windbg进行内核级调试,必须进行双机调试配置,因为被调试的对象是整个虚拟机操作系统内核,而不仅仅是其中的某个应用程序或进程。 配置虚拟机的管道串口使用VMware制作Windows10虚拟机,安装完成后进入编辑虚拟机设置,若存在打印机则将其移除(因为打印机占用了com_1端口,而后续双机通信要使用的就是com_1端口)。然后点击下方的添加,添加串行端口,选择使用命名的管道并输入\\.\pipe\com_1,剩下两项保持默认的该端是服务器和另一端是应用程序,勾选I/O模式中的轮询时主动放弃CPU,最后点击确定。 此处展示本人已配置好的设置 配置被调试机的管道串口在虚拟机中以管理员身份运行命令行,依次输入如下指令: 1bcdedit /dbgsettings serial baudrate:115200 debugport:1 #设置端口com_1, baudrate为115200 1bcdedit /copy {current} /d DebugEntry #复制一个开机选项,...
UPX基本处理+魔改+手动脱壳
UPX (Ultimate Packer for eXecutables) 是一种流行的运行时压缩壳,拥有多平台支持和较高的压缩率但保护强度较低等特点。在逆向工程的题目中算是一个常见的考点。 基础解法下载upx.exe加/脱壳工具,将其与目标可执行文件放在同一目录下,在当前目录下打开cmd输入如下指令: 1upx -d 要脱壳的程序名.exe 即可完成脱壳 加壳可使用如下指令 1upx -1 要加壳的程序名.exe #更快 或 1upx -9 要加壳的程序名.exe ...
ADB调试
模拟器+jadx+adb调试(Java/Smali层)模拟器本人选择BlueStack5为例,首先点开模拟器的设置菜单: 在“手机”一栏中勾选启用Root权限 在“高级”一栏中找到Android调试(ADB),勾选以127.0.0.1:5555连接到Android 然后用jadx分析要调试的apk文件,点开右上角的调试配置 用命令行打开adb,并输入如下指令连接模拟器服务 1adb connect 127.0.0.1:5555 可使用如下指令确认设备连接状态 1adb devices 此时jadx的调试配置窗口就会出现对应的设备及其包含的程序,选择要调试的程序,点击运行APP即可开始调试 可在Smali层中对指令打断点,运行使断点命中即可。步进、步过、步出功能与IDA类似,可在下方的调试窗口中按按键使用 已Root实机+IDA 8.3+adb调试(Native层)将已Root的实机用USB连接到电脑,打开命令行输入如下指令查看已连接的设备信息 1adb...
AES算法总结
算法详解AES(Advanced Encryption Standard)是新一代的加密标准,其分组长度为128位,密钥长度常为128位。AES的SPN(Substitution-Permutation Network,代换-置换网络) 结构是其加密过程的核心设计思想。SPN 是一种对称密钥分组密码结构,通过多轮重复的 代换(Substitution) 和 置换(Permutation) 操作,结合密钥扩展机制,实现高效的混淆(Confusion)和扩散(Diffusion),从而确保安全性。 AES加密算法的SPN结构有四步操作:逐字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。 逐字节替代SubBytes: AES 加密中的核心非线性操作步骤,通过S盒对状态矩阵的每个字节进行替换,实现混淆。代码中,SubBytes通过查表高效实现: 123456789101112131415// S 盒定义(部分)unsigned char S[256] = { 0x63,...