首页
社区
课程
招聘
[原创]BUUCTF逆向题:[BJDCTF2020]BJD hamburger competition
发表于: 2022-3-27 17:25 6262

[原创]BUUCTF逆向题:[BJDCTF2020]BJD hamburger competition

2022-3-27 17:25
6262

看到文件的时候我就蒙了,这玩意儿完全没见过,直接就去百度。

百度了一下,发现网上关于这个题的wp基本都是以前没见过开头。

介是一个Unity3D开发的程序,Unity3D是嘛呢:

Unity3D是由Unity Technologies开发的一个让玩家轻松创建互动内容的多平台的综合型游戏开发工具,Unity3D是用C#开发的,c#的反汇编工具为dnspy,但是把哪个东西丢进去呢?

unity在打包玩程序后,会将所有的代码打进一个Assembly-CSharp.dll的文件里面,通过这个文件的反编译,就能详细看见里面的代码内容。(这个文件在Managed目录下)

是老八的蜜汁小汉堡:

先把它丢进dnspy

可以看到它调用了蛮多的模块,这里如何快速去定位关键模块呢,这就是游戏题先玩一下游戏的重要性了,玩了游戏就会知道其中的蔬果啥的是可以点击的而这些个玩意儿肯定是通关的关键,知道这点再看这些模块会发现只有ButtoSpawnFruit 模块里有个水果,点击看一下:

可以看到两个加密函数和一个不知道干啥的函数点过去看一下:

这里就是check并输出flag的函数,逻辑很清晰:

找个在线网站:

Str为1001,MD5加密一下

B8C37E33DEFDE51CF91E1E03E51657DA

flag为:flag{B8C37E33DEFDE51CF91E1E03E51657DA}

但是提交后发现不对:

遇事不决还是百度,发现它的md5只返回了前20个字符

这确实有点坑,就没怀疑过两个加密函数,那么最后的flag应为:

flag{B8C37E33DEFDE51CF91E}

 
 
 
 
 
 
 
 
 
 
 
// ButtonSpawnFruit
// Token: 0x0600000C RID: 12 RVA: 0x000021C8 File Offset: 0x000003C8
public void Spawn()
{
    FruitSpawner component = GameObject.FindWithTag("GameController").GetComponent<FruitSpawner>();
    if (component)
    {
        if (this.audioSources.Length != 0)
        {
            this.audioSources[Random.Range(0, this.audioSources.Length)].Play();
        }
        component.Spawn(this.toSpawn);
        string name = this.toSpawn.name;
        if (name == "汉堡底" && Init.spawnCount == 0)
        {
            Init.secret += 997;
        }
        else if (name == "鸭屁股")
        {
            Init.secret -= 127;
        }
        else if (name == "胡罗贝")
        {
            Init.secret *= 3;
        }
        else if (name == "臭豆腐")
        {
            Init.secret ^= 18;
        }
        else if (name == "俘虏")
        {
            Init.secret += 29;
        }
        else if (name == "白拆")
        {
            Init.secret -= 47;
        }
        else if (name == "美汁汁")
        {
            Init.secret *= 5;
        }
        else if (name == "柠檬")
        {
            Init.secret ^= 87;
        }
        else if (name == "汉堡顶" && Init.spawnCount == 5)
        {
            Init.secret ^= 127;
            string str = Init.secret.ToString();
            if (ButtonSpawnFruit.Sha1(str) == "DD01903921EA24941C26A48F2CEC24E0BB0E8CC7")
            {
                this.result = "BJDCTF{" + ButtonSpawnFruit.Md5(str) + "}";
                Debug.Log(this.result);
            }
        }
        Init.spawnCount++;
        Debug.Log(Init.secret);
        Debug.Log(Init.spawnCount);
    }
}
// ButtonSpawnFruit
// Token: 0x0600000C RID: 12 RVA: 0x000021C8 File Offset: 0x000003C8
public void Spawn()
{
    FruitSpawner component = GameObject.FindWithTag("GameController").GetComponent<FruitSpawner>();
    if (component)
    {
        if (this.audioSources.Length != 0)
        {
            this.audioSources[Random.Range(0, this.audioSources.Length)].Play();
        }
        component.Spawn(this.toSpawn);
        string name = this.toSpawn.name;
        if (name == "汉堡底" && Init.spawnCount == 0)
        {
            Init.secret += 997;
        }
        else if (name == "鸭屁股")

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//