写点什么

CyberSpace2024 内存取证 CTF 挑战:AES 加密图像恢复实战

作者:qife
  • 2025-07-03
    福建
  • 本文字数:1520 字

    阅读完需:约 5 分钟

CyberSpace2024 Memory CTF : 有趣的内存取证挑战

作者:$ubh@nk@r


4 分钟阅读 · 2024 年 9 月 2 日


各位黑客好!本文将带您逐步解决 Cyberspace CTF 2024 的"Memory"挑战。该挑战围绕 Windows 内存取证展开,我们需要从内存转储中提取被删除的 flag.jpg 文件。让我们直接深入探索解决这个挑战的步骤!


挑战链接

开始挑战

在这个取证挑战中,我们获得了一个 Windows 内存转储文件,题目描述说明 Flag 图像文件已被删除,我们需要恢复它。


mem.dmp 文件是一个 MS Windows 64 位崩溃转储文件。作为基础步骤,我首先尝试从 dmp 文件中提取所有可读字符串并存储到文本文件中进行分析:


strings mem.dmp > out.txt
复制代码


分析文本文件时,我注意到以下字符串非常有趣:


$ifPath = [System.IO.Path]::Combine([System.Environment]::GetFolderPath('Desktop'), 'flag.jpg')$efPath = [System.IO.Path]::Combine([System.Environment]::GetFolderPath('Desktop'), 'flag.enc')$aes = New-Object System.Security.Cryptography.AesManaged$aes.KeySize = 256$aes.BlockSize = 128$aes.GenerateKey()$aes.GenerateIV()$cee = [System.Convert]::ToBase64String($aes.Key)$vee = [System.Convert]::ToBase64String($aes.IV)$content = [System.IO.File]::ReadAllBytes($ifPath)$encryptor = $aes.CreateEncryptor($aes.Key, $aes.IV)$encryptedData = $encryptor.TransformFinalBlock($content, 0, $content.Length)$encryptedBase64 = [System.Convert]::ToBase64String($encryptedData)[System.IO.File]::WriteAllText($efPath, $encryptedBase64)[System.Environment]::SetEnvironmentVariable("ENCD", $encryptedBase64, [System.EnvironmentVariableTarget]::User)[System.Environment]::SetEnvironmentVariable("ENCK", $cee, [System.EnvironmentVariableTarget]::User)[System.Environment]::SetEnvironmentVariable("ENCV", $vee, [System.EnvironmentVariableTarget]::User)if (Test-Path $ifPath) {    Remove-Item $ifPath -Force}
复制代码


关键点在于 flag.jpg 和 flag.enc。flag.jpg 已被删除,而 flag.enc 是加密文件。以下是代码解析:


  • $ifPath: 将桌面文件夹路径与 flag.jpg 组合,指向原始文件

  • $efPath: 将桌面文件夹路径与 flag.enc 组合,用于保存加密版本

  • AES 加密设置:密钥大小(256)、块大小(128)、生成密钥和初始化向量(IV)

  • $cee: 将 AES 密钥转换为 Base64 字符串

  • $vee: 将 AES IV 转换为 Base64 字符串

  • 将 Base64 编码的加密数据写入 flag.enc 文件

  • 将加密数据(ENCD)、AES 密钥(ENCK)和 IV(ENCV)存储为环境变量

  • 最后删除原始 flag.jpg 文件


ENCD 保存了 flag.jpg 的 Base64 编码加密内容,要解密需要使用 AES 密钥(ENCK)和 IV(ENCV)。我注意到内存转储中也没有 flag.enc 文件,但这些环境变量可能已被设置到 Windows 环境变量中,我们只需提取它们。


这里我们使用 Volatility 框架:


python3 vol.py -f mem.dmp windows.envars.Envars
复制代码


(windows.envars.Envars 插件可扫描提取 Windows 环境变量)


经过一番搜索,我成功获取了 ENCD、ENCK 和 ENCV 变量值。

解密过程

我使用 Python3 进行解密(也可用 PowerShell 脚本)。首先对 ENCD 值进行 Base64 解码并存储到 flag.enc 文件:


# 解码脚本[此处应为实际的Python解码脚本代码]
复制代码


运行后得到了 flag.enc 文件。接下来使用 ENCK 和 ENCV 进行解密,我编写了另一个 Python 脚本(借助了 ChatGPT😅)来逆向加密过程:


# 解密脚本[此处应为实际的Python解密脚本代码]
复制代码


运行脚本后成功获得了真实的 flag.jpg 文件。打开图像文件后——Boom!Flag 成功显现。


GitHub脚本仓库


感谢阅读!如果喜欢本文别忘了点赞关注,更多精彩内容等你发现~


Happy Hacking~更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
CyberSpace2024内存取证CTF挑战:AES加密图像恢复实战_内存取证_qife_InfoQ写作社区