首页
论坛
课程
招聘

[原创]奥里给汉堡 逆向得到flag

2020-3-3 11:30 1637

[原创]奥里给汉堡 逆向得到flag

2020-3-3 11:30
1637
接触到这道题是在buuctf上, 程序有点大下载的时候我还有点懵,下载完成之后有下面几个文件,打开那个魔幻exe就可以运行这个游戏

运行之后如图,开发者挺有趣



完事该对它操作,查过壳,根据reversingkr的做题经验,猜测.net平台程序。


没有其他的保护措施,然后用64位ida看程序结构也没有啥,然后就去文件夹里面瞎转找到一个明显的提示文件:


然后用Dnspy分析这个dll文件,然后在下面的类中找到了关键函数:


函数如下:
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);
	}
}

函数非常简单,就是Count从0开始到5,一共有六层,然后顶和底都是固定的,就从中间的7个数值找出4个,然后得到的序列sha1之后和关键字符串比较就得到flag,keygen:
'''BJD hamburger competition  穷举数字的hash,然后进行判断'''
import hashlib

def fun_1(a):     #循环数组
    num=997      #初始第一层是997
    for every in a:
        if(every=='1'):
            num -=127
        elif(every=='2'):
            num *=3
        elif(every=='3'):
            num ^=18
        elif(every=='4'):
            num +=29
        elif(every=='5'):
            num -=47
        elif(every=='6'):
            num *=5
        elif(every=='7'):
            num ^=87
    num ^=127
    return str(num)

list=['1','2','3','4','5','6',"7"]
res=''

for x in list:   #num1
    for y in list: 
        for z in list:
            for w in list:
                res=x+y+z+w
                res2=fun_1(res).encode('utf-8')
                if(hashlib.sha1(res2).hexdigest().upper()=="DD01903921EA24941C26A48F2CEC24E0BB0E8CC7"):
                    print(res)
                    print(res2)
爆破出的顺序有几个,但是result都是一样的:

然后对 1001  求md5值就应该是flag,但是这有个坑,我一开始怎么提交都不对,它的md5函数之后取前20位:


所以正确flag{B8C37E33DEFDE51CF91E}。

题目下载链接:https://buuoj.cn/files/5e191a07645769a4b238e92d7f5e6ef7/attachment.zip?token=eyJ1c2VyX2lkIjo1NTY4LCJ0ZWFtX2lkIjpudWxsLCJmaWxlX2lkIjoxMzgyfQ.Xl3PXg.oO6QpFwhRJEye81sgUzEEaRdujo



[求职]想求职找工作,请来看雪招聘投递简历!

最新回复 (7)
killpy 2 2020-3-3 14:33
2
0
已阅
GJHSQGD 2020-3-3 16:09
3
1
俘虏 臭豆腐 加柠檬
你看我这汉堡做的行不行!
hzqst 3 2020-3-3 16:23
4
0
GJHSQGD 俘虏 臭豆腐 加柠檬 你看我这汉堡做的行不行!
彳亍
t1an5g 2 2020-3-3 20:52
5
0
老八のCTF
Sprite雪碧 1 2020-3-3 21:08
6
1
一日三餐没烦恼,今天就吃老八秘制小汉堡儿,既好吃还管饱。
mb_xghoecki 2020-3-11 12:49
7
0
感谢分享
gaveu屯烫烫 2020-3-13 08:36
8
0
这是个有味道的CTF= =
游客
登录 | 注册 方可回帖
返回