硕士生
 
- 金币
- 3287
- 好评
- 25
- 信誉
- 173
|
最近在研究Godot引擎的逆向,其实市面上有比较多的教程,但是这些教程有点过时了,现在Godot引擎也在不断更新,虽然他是开源的,但是好像很少有人研究这个引擎
既然开源,那么这里就要介绍一个解包工具,Godot RE Tools
这里不讲具体案例,就说一下大致思路
这个游戏当然是经过加密的,既然加密,那就打开源码分析找密钥,经过分析4.6.3系列的源码
发现关键函数
Error open_and_parse(Ref<FileAccess> p_base, const Vector<uint8_t> &p_key, Mode p_mode, bool p_with_magic, const Vector<uint8_t> &p_iv);
定位到libgodot_android.so中的某个偏移地址0x39E9A5C
转伪C
这里伪c代码太长我就不放了,丢给ai分析,发现这个函数又调用了sub_3952728对应CryptoCore::AESContext::set_encode_key(const uint8_t *p_key, size_t p_bits),那么思路显而易见了,继续看伪c代码,发现key指针在x1寄存器里,那么hook该地址取得x1寄存器,然后
uint8_t *key = (uint8_t*)ctx->general.regs.x1;
if (!key) return;
char hex[65] = {0};
for (int i = 0; i < 32; i++) sprintf(hex + i*2, "%02X", key[i]);
LOGI("=== AES-256 KEY ===");
LOGI("HEX: %s", hex);
打印密钥,打开Re Tools,发现成功解包
但当然到此并没有结束,我对godot引擎了解不多,发现他解包以后居然无法导出,这是一件悲伤的事情……
|
|