CyCTF25资格赛—Vault Raider移动挑战题解

本文详细解析CyCTF25资格赛中Vault Raider移动挑战的解题过程。通过APK解包、资源分析、IMEI回退机制破解、Base64解码与XOR解密等技术,最终成功构建主密钥并生成比赛flag。

CyCTF25资格赛—Vault Raider移动挑战题解

快速总结

该应用被解包并进行分析。成功恢复三个秘密片段,将其组合、哈希处理,最后通过最终例程生成挑战flag。

秘密的发现过程

秘密1:IMEI回退值

当应用尝试读取设备IMEI时,在典型的测试/CTF环境中使用了回退值。该回退值为15个零组成的字符串。该字符串经过SHA-256哈希处理,成为第一个秘密。该发现在MainActivity中完成。

回退IMEI值:“000000000000000”
第一个秘密(该值的SHA-256):14bdcd6fd64180af5e7791df91b6af8e9a3e7bc844997eb8c29252706df97ca5

秘密2:编码名称

应用的资源包含一个短名称,实际上是编码数据。该值从Base64解码后,使用小密钥进行XOR操作以显示明文。经过这两个步骤后,获得第二个秘密。

编码资源值:MEclOVYt
用于XOR的密钥:ctfkey
第二个秘密(Base64解码+XOR后):S3CR3T

秘密3:占位符

一个本地例程看起来可能产生第三个片段,但附近的字符串表明使用了标准的CTF占位符,而不是复杂的运行时计算。该占位符被作为第三个秘密。

第三个秘密假设:deadbeef

构建主密钥

三个秘密按特定顺序连接:第一个秘密,然后是第二个秘密,最后是第三个秘密。该连接字符串的SHA-256哈希产生一个单一"主"值,供最终例程使用。

连接顺序:第一个 + 第二个 + 第三个
生成的主密钥(SHA-256):8fc2b0c53e485523edfbddef965bece3c5da451e58a2aed8d5281e8c43abe5e7

最终flag格式化

应用中存在硬编码前缀。取主密钥的前八个字符,反转,然后与该前缀和固定后缀连接形成flag主体。最后,该主体被包装在挑战的cyctf{…}格式中。

硬编码前缀(内部字节数组的十六进制形式):3465fb449e7e4ad1636a6511a0c23900be2d3dd4ac2e6a0ad594a1e23bb7ce8a9c
主密钥前8个字符:8fc2b0c5 → 反转后 → 5c0b2cf8
最终flag(组装后):cyctf{3465fb449e7e4ad1636a6511a0c23900be2d3dd4ac2e6a0ad594a1e23bb7ce8a9c_5c0b2cf8_solved}

简要概述

  • APK被解包,应用被反编译
  • 检查主活动和资源文件以寻找秘密材料
  • 定位IMEI回退值(000000000000000)并进行哈希(SHA-256)生成部分A
  • 编码资源字符串(MEclOVYt)经过Base64解码,然后使用密钥ctfkey进行XOR解码生成部分C
  • 检查本地函数并采用常见占位符(deadbeef)作为部分B
  • 三个部分按顺序连接:部分A + 部分C + 部分B
  • 连接字符串使用SHA-256哈希生成主密钥
  • 主密钥的前8个字符被反转
  • 硬编码前缀(来自应用)与反转片段和固定后缀连接形成flag主体
  • flag主体被包装在cyctf{…}格式中以产生最终flag
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计