type
status
date
slug
summary
tags
category
icon
password
😀
最近在找unity 关于global-metadata加密的ctf题目

section 1

题目的要求很简单,输入flag,然后验证即可。直接打开libil2cpp.so然后搜索il2cpp_init函数:
notion image
对着源码继续往下走
notion image
sub_4B5564MetadataCache::Initialize函数
notion image
不难猜出sub_4B5518是字符串解密函数,sub_513060vm::MetadataLoader::LoadMetadataFile函数。
notion image
之后对着源码查看,找到作者自己加上的函数。
notion image
对照完发现sub_512FDC是作者自己加的。
notion image
解密算法是与一个大数组异或,搓个脚本。
解密完之后,文件的魔数头不对需要手动改成AF 1B B1 FA

section 2

接着使用Il2CppDumper恢复il2cpp.so的符号
notion image
运行脚本ida_with_struct_py3.py再依次选择生成的script.jsonil2cpp.h文件,之后就可以恢复符号了。

section 3

dump.cs文件里面搜索MonoBehaviour,找到可疑的类Check
notion image
从名字就可以看出是AES加密,注意.ctor.cctor不是作者自己写的函数,而是编译器生成IL语言的构造函数和静态构造函数。既然知道是AES加密了,那么就直接去找key和iv以及密文了。
notion image
交叉引用一下Check_TypeInfo就能在.cctor里面找到一堆的赋值语句,然后就可以得到key与iv了。
notion image
notion image
再去寻找密文
notion image
很明显的套了一层base,看看是那个系列以及是否换表。
notion image
用的是系统的标准base64加密,之后就是cyberchef直接解了。
notion image

📎 参考文章

global-metadata.gat加载流程2024年度总结
Loading...