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++学习笔记(更新中)
基础的输入与输出 输出工具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 std;编译指令使std名称空间内的名称可用。 数据处理 以...
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 的常...
RC4算法及例题总结
算法详解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 字节 ,逐块生成密钥流。 代码实现下面是Salsa20算法过程的C语言函数实现 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626...
Hexo+Butterfly博客的评论系统实现(Giscus)
前情提要: Hexo+Butterfly主题博客搭建 Giscus是什么Giscus是一个基于GitHub Discussions的评论系统,它允许你将评论嵌入到你的网站中。其拥有开源、无需自建数据库等优点,你可以自由地使用和修改它。用户通过GitHub账户登录,简化注册流程,也增强了评论者的身份可信度、便于评论的及时回复与管理。 安装点击如下的链接进入Giscus的安装界面,点击install进行安装。 安装完成后看到如下的界面即说明安装成功 配置任选一个合适的仓库存储评论数据,但要确保: 仓库是公开的 Giscus功能已安装(“安装”步骤已完成) 仓库的Discussions功能已启用,开启方式如下所示: 在仓库的界面中,点击Settings进入设置界面 往下翻找到Discussions的选项并勾选 进入官网,在“仓库”中选择自己要使用的仓库,此时网站会自动确认该仓库是否满足上述条件。 后续是是一些个性化配置选项,这是推荐的配置建议: 页面↔️discussion 映射关系一项选择title ,使Discussion标题里的中文可以正常显示。 Discus...
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 #复制一个开机选项, 以进入OS的debug模式,需要...
UPX基本处理+魔改+手动脱壳
UPX (Ultimate Packer for eXecutables) 是一种流行的运行时压缩壳,拥有多平台支持和较高的压缩率但保护强度较低等特点。在逆向工程的题目中算是一个常见的考点。 基础解法下载upx.exe加/脱壳工具,将其与目标可执行文件放在同一目录下,在当前目录下打开cmd输入如下指令: 1upx -d 要脱壳的程序名.exe 即可完成脱壳 加壳可使用如下指令 1upx -1 要加壳的程序名.exe #更快 或 1upx -9 要加壳的程序名.exe #更好的压缩率 魔改UPX修改UPX头标准的UPX头在010Editor中查看内容如下: 会发现里面有UPX0,UPX1等特别的字符(注意是大写),若将其修改,就不能直接用upx.exe脱壳了 拖入Die或ExeinfoPE中,仍能检查出UPX壳并指出可能错误的地方。(本题用小写的“upx”进行混淆 自行在二进制编辑器中进行修改即可恢复 修改入口点用x64dbg打开加壳程序,将入口点处的4个push指令全部nop掉并保存 然后其也不能直接用upx.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 devices 打开IDA所在根目录,在/dbgsrv处找到对应的调试...
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, 0x7...
