ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[BJDCTF2020]BJD hamburger competition

2022-01-22 19:02:45  阅读:164  来源: 互联网

标签:BJD hamburger name secret else Init str BJDCTF2020 MD5


下载附件

应用程序是一个有味道的游戏(属于untiy3D游戏),判断和逆向这类游戏参考此链接

分析

        首先查看信息,无壳64位。再下载dnSpy-net,下载地址

         打开dnSpy,找到BJD hamburger competition_Data\Managed目录下Assembly-CSharp.dll文件打开。

        之所以要打开这个文件是因为unity在打包后,会将所有的代码打进一个Assembly-CSharp.dll的文件里面,通过这个文件的反编译,就能详细看见里面的代码内容。

        找到与食物有关的模块,

见代码

// 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);
	}
}

   可以看到是先将str进行sha1加密得字符串

"DD01903921EA24941C26A48F2CEC24E0BB0E8CC7"

所以先进行sha1解密,sha1解密在线网站。得到

跟进MD5函数

 

public static string Md5(string str)
	{
		byte[] bytes = Encoding.UTF8.GetBytes(str);
		byte[] array = MD5.Create().ComputeHash(bytes);
		StringBuilder stringBuilder = new StringBuilder();
		foreach (byte b in array)
		{
			stringBuilder.Append(b.ToString("X2"));
		}
		return stringBuilder.ToString().Substring(0, 20);
	}

再将得到结果进行MD5加密,MD5在线加密网站

再分析MD5函数

.ToString("X2")是将字符串改为大写。

 .Substring(0, 20)是取父字符串的前20位。

 

 操作后得到flag{B8C37E33DEFDE51CF91E}

 

标签:BJD,hamburger,name,secret,else,Init,str,BJDCTF2020,MD5
来源: https://blog.csdn.net/qq_53008544/article/details/122641205

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有