京麒CTF2025 热身赛 RE
字数 1518 2025-08-29 22:41:10
Rust逆向分析与加密算法解析
1. RE1 - Rust逆向分析
1.1 题目概述
这是一个Rust编写的逆向题目,符号表已被删除,需要通过动态调试来分析加密逻辑。
1.2 加密逻辑分析
加密过程主要包含以下关键点:
- 密钥流生成:密钥流与输入的前两个明文字符(v29)有关
- 加密操作:对密文进行简单的异或操作
- 密钥流特点:密钥流的生成逻辑可以逆向推导
1.3 解题方法
两种可行的解题路径:
-
动态调试法:
- 跟踪程序执行流程
- 直接获取v35的值(密钥流)
- 进行异或解密
-
静态分析法:
- 逆向密钥流生成逻辑
- 仿写密钥流生成算法
- 使用生成的密钥流进行异或解密
1.4 示例flag
flag{1c98572d-7f7b-4fbf-8750-4a2986c695ce}
2. RE2 - SIMD指令分析
2.1 题目概述
该题目使用了SIMD指令集进行加密操作,主要涉及两个关键指令。
2.2 关键指令分析
-
_mm_add_epi8:
- 功能:对两个参数进行逐字节相加
- 特点:相对简单直接的加法操作
-
_mm_shuffle_epi8:
- 功能:以第二个参数作为索引,从第一个参数中取值
- 特点:实现数据重排(shuffle)
- 注意事项:
- 参数传递采用小端序
- 若不注意字节序,可能导致打乱前后无明显区别
2.3 解题要点
- 理解SIMD指令的行为
- 注意小端序的影响
- 逆向shuffle操作需要还原索引映射关系
2.4 示例flag
flag{cdb0444318e24beb8f374e9181599072}
3. RE3 - iOS逆向分析
3.1 题目概述
iOS平台逆向题目,涉及多层加密逻辑。
3.2 关键函数分析
-
ViewController.init:
- 初始化密钥:"Haruhikage"
- 注意:伪代码中密钥可能不完整,实际可能还有两位
-
ViewController.encryptButtonClicked():
- 主要校验逻辑所在处
- 检查输入flag是否为空
- 调用多层加密函数
-
加密流程:
RC4 → base64 → obfuscateString → transformString
3.3 加密函数详解
3.3.1 transformString函数
- 主要逻辑:异或操作
- 特殊处理:
- 异或后有一个特殊逻辑(需要分析)
- 涉及
__clz()函数(前导零计数)
- 可疑字符串格式:
c2..c3..等c3开头的在解密时需要减去0x40
3.3.2 obfuscateString函数
加密逻辑:
(索引index + 常数0xDEADBEEF) & 0xFF
3.4 解密流程
- 逆向transformString的特殊处理
- 处理
c2/c3前缀的字符串 - 逆向obfuscateString的加密
- Base64解码
- RC4解密
3.5 示例flag
flag{N4nd3_H4ruhik4g3_Y4tt4n0?!!}
3.6 中间结果示例
YWRiZTI5NzkzNTg3OTgzMDhjOTExZGQ0NjQ3YTJmNmExM2MwNDJjYzMyNDU5N2UxZWRiYzA4OWE5ZTkwMTVmYmE5
4. 通用逆向技巧总结
-
动态调试:
- 适用于符号表被删除的情况
- 可获取运行时数据
-
加密算法识别:
- 注意常见算法特征(如RC4、base64)
- 识别自定义加密逻辑
-
数据处理:
- 注意字节序问题(小端序/大端序)
- 注意特殊处理逻辑(如
c3前缀的特殊处理)
-
逆向工程工具:
- 使用合适的反编译器
- 结合静态分析和动态调试
-
脚本编写:
- 仿写加密逻辑进行逆向
- 注意编程语言特性(如Rust的内存安全特性可能影响逆向)
5. 附录:关键函数伪代码
5.1 transformString伪代码
func transformString(input: String) -> String {
// 异或操作
let xorResult = input.map { $0 ^ key }
// 特殊处理
if condition {
// 涉及__clz()的处理
}
// 处理c2/c3前缀
if prefix == "c3" {
value -= 0x40
}
return result
}
5.2 obfuscateString伪代码
func obfuscateString(input: String) -> String {
return input.enumerated().map { (index, char) in
(index + 0xDEADBEEF) & 0xFF
}
}