安洵杯 2023 RE 牢大想你了 WP

文章讲述了如何逆向Unity3D游戏中的Assembly-CSarp.dll文件,使用ILSpy和ILDASM工具,发现GameManager中的加密数据,通过TEA算法解密获取flag。

可以看到得到的是一个Unity文件

从Lazzaro师傅的blog里可以得到经验

Unity逆向 | Lazzaro​ 工具 Unity Dll逆向 一般的 Unity3D 游戏的主逻辑都在 Assembly-CSarp.dll 中,所以需要 dll文件逆向/重新打包 工具。Unity3D开发的游戏,其核心代码都在这个 dll 文件中,所以逆向/修改这个 dll 文件就可以了。 ILSpy 用于查看dll程序逻辑。 ILDASM 用于反编译dll文件,生成il文件(存放了dll反编译后的指令)和reicon-default.png?t=N7T8https://lazzzaro.github.io/2020/12/13/reverse-Unity%E9%80%86%E5%90%91/index.html

Unity Dll逆向

一般的 Unity3D 游戏的主逻辑都在 Assembly-CSarp.dll 中,所以需要 dll文件逆向/重新打包 工具。Unity3D开发的游戏,其核心代码都在这个 dll 文件中,所以逆向/修改这个 dll 文件就可以了。

所以我们在文件夹里找 Assembly-CSarp.dll 这个文件

Unity框架的文件我们用dnspy进行反编译

GameManager看起来像个正经文件,点开来看一下

有“牢大”“flag”的字符串,应该是主函数部分

往下翻看到类似key和密文的东西

跟进一下encryptedData后面的字符串

跳转到加密函数位置,标准TEA加密

结合上文得知:密文={ 3363017039,1247970816,549943836,445086378,3606751618,1624361316,3112717362,705210466,3343515702,2402214294,4010321577,2743404694 }

密钥={ 286331153,286331153,286331153,286331153 }

delta=2654435769

由此构建TEA解密脚本

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>

void Decrypt(uint32_t* data, uint32_t* key)
{
    uint32_t v0 = data[0], v1 = data[1];
    uint32_t delta = 2654435769;
    uint32_t sum = delta * 32; //反过来最后一次的sum,循环32次

    for (int i = 0; i < 32; i++)
    {
        v1 -= ((v0 << 4) + key[2]) ^ (v0 + sum) ^ ((v0 >> 5) + key[3]);
        v0 -= ((v1 << 4) + key[0]) ^ (v1 + sum) ^ ((v1 >> 5) + key[1]);
        sum -= delta;
    }

    data[0] = v0;
    data[1] = v1;
} //解密函数

int main()
{
    uint32_t encryptedData[] = 
    { 3363017039,1247970816,549943836,445086378,
     3606751618,1624361316,3112717362,705210466,
     3343515702,2402214294,4010321577,2743404694 };  //12个
    uint32_t key[] = { 286331153,286331153,286331153,286331153 };

    for (int i = 0; i < 12; i += 2)   
    {
        Decrypt(&encryptedData[i], key);
    }

    printf("%s", encryptedData);

    return 0;
}

得到 flag{it_is_been_a_long_day_without_you_my_friend}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值