BJD hamburger competition

buu练题记录2

这个题比较有意思,内部的代码比较简单,但是包装在一个Unity3D游戏中。

BJD hamburger competition

关于Unity逆向看这里:Unity游戏逆向及破解方法介绍

0x00分析

所以就找对文件就OK了,这里我们找到Managed文件夹下的Assembly-CSharp.dll文件。这里我们需要用反编译和分析dll代码的工具:ILSpy或者dnSpy(这里我是用dnspy)

在函数ButtonSpawnFruit中发现端倪:

BJD hamburger competition

可以看到flag就藏在str里面,将DD01903921EA24941C26A48F2CEC24E0BB0E8CC7通过sha1解码得:1001。再将1001 进行MD5加密:

BJD hamburger competition

可以看到这里总共有4种结果。再仔细看看代码,就可以找到:

BJD hamburger competition

可以看到这里有两个很重要的点:

  • ToString(“X2”):括号里面的大写的X表示结果取大写,同理若是x则是小写;
  • Substring(0,20):只取0到19(既前20位)

所以构建出flag为BJDCTF{B8C37E33DEFDE51CF91E}。由于是buu平台所以是flag{B8C37E33DEFDE51CF91E}

0x01总结

个人习惯在做题是用txt保留记录,整理一下就是基本思路:

BJD hamburger competition

0x02插曲

在看到源码之后我最开始想尝试能不能通过直接玩游戏玩出来,但是然后写了一个爆破的exp

def humburger(Init,i):
    if i == 1:
        Init += 997
    elif i == 2:
        Init -= 127
    elif i == 3:
        Init *= 3
    elif i == 4:
        Init ^= 18
    elif i == 5:
        Init += 29
    elif i == 6:
        Init -= 47
    elif i == 7:
        Init *= 5
    elif i == 8:
        Init ^= 87
    elif i == 9:
        Init ^= 127

    return Init

for j in range(111111,200000):
    Init = 0
    chu = 100000
    for k in range(5):
        step = int(j/chu)%10
        Init = humburger(Init,step)
        chu = int(chu/10)
    if Init == 1001:
        print(j)
    if j == 123459 or j == 134579:
        print(Init)

然而并没有跑出来,这出题人也太狗了,打他~

上一篇:关于DOS命令的基础学习


下一篇:jwplayer使用方法