type
status
date
slug
summary
tags
category
icon
password
最近在找unity 关于global-metadata加密的ctf题目
section 1
题目的要求很简单,输入flag,然后验证即可。直接打开libil2cpp.so然后搜索il2cpp_init函数:

对着源码继续往下走

sub_4B5564
是MetadataCache::Initialize
函数
不难猜出
sub_4B5518
是字符串解密函数,sub_513060
是vm::MetadataLoader::LoadMetadataFile
函数。
之后对着源码查看,找到作者自己加上的函数。

对照完发现
sub_512FDC
是作者自己加的。
解密算法是与一个大数组异或,搓个脚本。
解密完之后,文件的魔数头不对需要手动改成
AF 1B B1 FA
section 2
接着使用Il2CppDumper恢复il2cpp.so的符号

运行脚本
ida_with_struct_py3.py
再依次选择生成的script.json
和il2cpp.h
文件,之后就可以恢复符号了。section 3
在
dump.cs
文件里面搜索MonoBehaviour
,找到可疑的类Check
。
从名字就可以看出是AES加密,注意
.ctor
和.cctor
不是作者自己写的函数,而是编译器生成IL语言的构造函数和静态构造函数。既然知道是AES加密了,那么就直接去找key和iv以及密文了。
交叉引用一下Check_TypeInfo就能在.cctor里面找到一堆的赋值语句,然后就可以得到key与iv了。


再去寻找密文

很明显的套了一层base,看看是那个系列以及是否换表。

用的是系统的标准base64加密,之后就是cyberchef直接解了。

📎 参考文章
- 作者:fei3ei
- 链接:https://www.fei3ei.xyz/p/n1ctf-2018
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。