BJD hamburger competition

buu练题记录2

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

image-20210331185503124

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

0x00分析

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

在函数ButtonSpawnFruit中发现端倪:

image-20210331185753207

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

image-20210331190056427

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

image-20210331190255423

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

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

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

0x01总结

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

image-20210331191002227

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)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值