一,五道BUUCTF
1.
直接将exe文件拖入ida获得flag
2.reverse1
下载文件获得exe后
拖入ida文件没有得到信息
ctrl+f搜索整体字符,找到一个“flag wrong”的字符
对其就行交叉引用

查看伪代码,发现有if判断语句

发现string2是


要求将o都变为0
所以结果应该是

3.reverse2

和上题一样分析伪代码

进行替换
得到答案flag{hack1ng_fo1_fun}
4.内涵的软件

IDA打开。
找到_main_0函数,F5反编译
flag{49d3c93df25caad81232130f3d2ebfad}
5.新年快乐
这是32位,而且有壳

flag{HappyNewYear!

二,了解编码和加密算法
一、编码 (Encoding)
编码是将信息从一种形式转换为另一种形式的过程,目的是确保数据能被特定系统正确传输或存储,通常不涉及保密性。
-
ASCII编码
将字符映射为数字,例如:'A'→ 十进制65→ 二进制01000001- 数学表示:$c \in \text{字符集} \mapsto n \in [0, 255]$
-
Base64编码
将二进制数据转换为可打印字符(A-Z, a-z, 0-9, +, /),常用于邮件或网页传输。- 原理:每3字节(24位)分为4组6位数据,映射为64个字符。
- 示例:二进制
01001101 01100001 01101110→"TWFu"
二、加密算法 (Encryption)
加密通过数学变换使数据不可读,保护机密性,需密钥才能还原。
-
对称加密(如AES)
- 加密与解密使用相同密钥。
- 核心操作:字节替换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)、轮密钥加(AddRoundKey)。
- 安全性依赖密钥长度(128/256位)。
-
非对称加密(如RSA)
- 使用公钥加密、私钥解密。
- 数学基础:大数分解难题。
- 加密过程:
$$c \equiv m^e \pmod{n}$$
解密:
$$m \equiv c^d \pmod{n}$$
其中 $(n, e)$ 为公钥,$d$ 为私钥。
三,了解壳(什么是加密壳,什么是压缩壳)
加密壳与压缩壳详解
在软件保护领域,"壳"(Shell)指包裹在原始程序外层的代码层,主要分为加密壳和压缩壳两类:
1. 压缩壳(Compression Shell)
- 核心功能:通过算法减小程序体积
- 常见工具:UPX, ASPack
- 工作原理:
- 原始程序被压缩存储
- 运行时由壳代码动态解压到内存
- 执行解压后的原始代码
- 特征方程: $$ V_{\text{压缩后}} = f(V_{\text{原始}}, \eta) $$ 其中$\eta$表示压缩率
- 优势:
- 减少磁盘占用
- 加速网络传输
- 局限性:
- 无实质保护作用
- 易被自动脱壳工具处理
2. 加密壳(Encryption Shell)
- 核心功能:防止逆向分析与非法修改
- 常见工具:Themida, VMProtect
- 工作原理:
- 原始代码被加密/混淆
- 运行时动态解密/反混淆
- 配合反调试技术(如$ \text{IsDebuggerPresent} $检测)
- 保护机制: $$ P_{\text{安全}} = g(\text{加密强度}, \text{混淆复杂度}, \text{反调试层数}) $$
- 典型技术:
- 代码虚拟化(将指令转为自定义字节码)
- 多态加密(每次加壳产生不同指令)
- 完整性校验($ \text{CRC32} $校验)
- 应用场景:
- 商业软件授权保护
- 游戏反外挂系统
- 敏感算法保护
331

被折叠的 条评论
为什么被折叠?



