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.execmd.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. 恶意脚本提取

使用filescandumpfiles插件提取可疑文件:

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}

关键技术点总结

  1. 内存取证基础

    • 使用Volatility工具分析内存转储
    • 确定正确的Profile是关键第一步
  2. 进程分析技巧

    • 关注异常进程(如多个notepad或cmd实例)
    • 检查进程命令行参数
  3. 字符串搜索方法

    • 使用strings工具结合grep搜索关键词
    • 注意编码问题(ASCII/Unicode)
  4. 注册表分析

    • 检查自启动项、最近打开文件等位置
    • Run/RunOnce键是常见隐藏位置
  5. 文件提取技术

    • 使用filescan和dumpfiles插件
    • 注意文件偏移量和内存地址转换
  6. 脚本分析

    • 识别常见加密/混淆技术
    • 分析自定义加密算法
  7. 数据解密

    • 识别XOR等简单加密
    • 编写逆向解密脚本

防御建议

  1. 监控异常进程创建
  2. 限制脚本执行权限
  3. 定期检查自启动项
  4. 使用内存保护技术防止敏感信息泄露
  5. 对重要数据进行强加密而非简单XOR

扩展思考

  1. 如何应对更复杂的内存隐藏技术?
  2. 如果flag被分割存储在多个进程中如何处理?
  3. 如何自动化这类内存取证分析流程?

通过这道题目,我们学习了从内存取证到逆向分析再到数据解密的完整流程,掌握了Windows内存取证的基本方法和思路。

内存取证分析:2022国赛华东北赛区"内存中的secret" WriteUp解析 题目背景 这是一道来自2022年全国大学生信息安全竞赛华东北赛区的内存取证题目,要求选手从一个内存转储文件中提取隐藏的秘密信息。 解题步骤详解 1. 内存镜像初步分析 首先使用 volatility 工具分析内存镜像: 通过分析获得的操作系统信息: 建议的Profile:Win7SP1x64 内存类型:Windows 7 SP1 x64 2. 进程分析 列出内存中的所有进程: 关键发现: 存在可疑进程 notepad.exe 和 cmd.exe notepad.exe 进程可能包含重要信息 3. 文件提取 提取 notepad.exe 进程的内存: 4. 字符串分析 对提取的内存文件进行字符串搜索: 发现关键字符串: "flag{this_ is_ not_ real_ flag}" 这是一个假flag,需要进一步分析 5. 注册表分析 检查注册表中的可疑项: 发现可疑的自启动项,指向一个加密的VBScript文件。 6. 恶意脚本提取 使用 filescan 和 dumpfiles 插件提取可疑文件: 7. 脚本解密 分析提取的VBScript文件,发现使用了简单的字符替换加密: 使用Python编写解密脚本: 8. 最终Flag获取 在解密后的数据中找到真实flag格式: flag{real_flag_is_here} 关键技术点总结 内存取证基础 : 使用Volatility工具分析内存转储 确定正确的Profile是关键第一步 进程分析技巧 : 关注异常进程(如多个notepad或cmd实例) 检查进程命令行参数 字符串搜索方法 : 使用strings工具结合grep搜索关键词 注意编码问题(ASCII/Unicode) 注册表分析 : 检查自启动项、最近打开文件等位置 Run/RunOnce键是常见隐藏位置 文件提取技术 : 使用filescan和dumpfiles插件 注意文件偏移量和内存地址转换 脚本分析 : 识别常见加密/混淆技术 分析自定义加密算法 数据解密 : 识别XOR等简单加密 编写逆向解密脚本 防御建议 监控异常进程创建 限制脚本执行权限 定期检查自启动项 使用内存保护技术防止敏感信息泄露 对重要数据进行强加密而非简单XOR 扩展思考 如何应对更复杂的内存隐藏技术? 如果flag被分割存储在多个进程中如何处理? 如何自动化这类内存取证分析流程? 通过这道题目,我们学习了从内存取证到逆向分析再到数据解密的完整流程,掌握了Windows内存取证的基本方法和思路。