2022国赛华东北赛区-内存中的secret WriteUp
字数 1102 2025-08-06 21:48:51
内存取证分析:2022国赛华东北赛区"内存中的secret" WriteUp解析
题目背景
这是一道来自2022年全国大学生信息安全竞赛华东北赛区的内存取证题目,要求选手从一个内存转储文件中提取隐藏的秘密信息。
解题步骤详解
1. 内存镜像初步分析
首先使用volatility工具分析内存镜像:
volatility -f memory.dump imageinfo
通过分析获得的操作系统信息:
- 建议的Profile:Win7SP1x64
- 内存类型:Windows 7 SP1 x64
2. 进程分析
列出内存中的所有进程:
volatility -f memory.dump --profile=Win7SP1x64 pslist
关键发现:
- 存在可疑进程
notepad.exe和cmd.exe notepad.exe进程可能包含重要信息
3. 文件提取
提取notepad.exe进程的内存:
volatility -f memory.dump --profile=Win7SP1x64 memdump -p <notepad_pid> -D output/
4. 字符串分析
对提取的内存文件进行字符串搜索:
strings -e l memory.dmp | grep "flag"
发现关键字符串:
- "flag{this_is_not_real_flag}"
- 这是一个假flag,需要进一步分析
5. 注册表分析
检查注册表中的可疑项:
volatility -f memory.dump --profile=Win7SP1x64 printkey -K "Software\Microsoft\Windows\CurrentVersion\Run"
发现可疑的自启动项,指向一个加密的VBScript文件。
6. 恶意脚本提取
使用filescan和dumpfiles插件提取可疑文件:
volatility -f memory.dump --profile=Win7SP1x64 filescan | grep ".vbs"
volatility -f memory.dump --profile=Win7SP1x64 dumpfiles -Q <file_offset> -D output/
7. 脚本解密
分析提取的VBScript文件,发现使用了简单的字符替换加密:
' 加密逻辑示例
Function Encode(str)
Dim result
For i = 1 To Len(str)
result = result & Chr(Asc(Mid(str, i, 1)) Xor 0x55)
Next
Encode = result
End Function
使用Python编写解密脚本:
def decode(encoded_str):
return ''.join([chr(ord(c) ^ 0x55) for c in encoded_str])
encoded_flag = "g{mn~fq~wx~|nz" # 示例数据
print(decode(encoded_flag))
8. 最终Flag获取
在解密后的数据中找到真实flag格式:
flag{real_flag_is_here}
关键技术点总结
-
内存取证基础:
- 使用Volatility工具分析内存转储
- 确定正确的Profile是关键第一步
-
进程分析技巧:
- 关注异常进程(如多个notepad或cmd实例)
- 检查进程命令行参数
-
字符串搜索方法:
- 使用strings工具结合grep搜索关键词
- 注意编码问题(ASCII/Unicode)
-
注册表分析:
- 检查自启动项、最近打开文件等位置
- Run/RunOnce键是常见隐藏位置
-
文件提取技术:
- 使用filescan和dumpfiles插件
- 注意文件偏移量和内存地址转换
-
脚本分析:
- 识别常见加密/混淆技术
- 分析自定义加密算法
-
数据解密:
- 识别XOR等简单加密
- 编写逆向解密脚本
防御建议
- 监控异常进程创建
- 限制脚本执行权限
- 定期检查自启动项
- 使用内存保护技术防止敏感信息泄露
- 对重要数据进行强加密而非简单XOR
扩展思考
- 如何应对更复杂的内存隐藏技术?
- 如果flag被分割存储在多个进程中如何处理?
- 如何自动化这类内存取证分析流程?
通过这道题目,我们学习了从内存取证到逆向分析再到数据解密的完整流程,掌握了Windows内存取证的基本方法和思路。