admin管理员组

文章数量:1530017

(BUU_[BJDCTF2020]BJD hamburger competition


开始


分析


是个用Unity3D制作的恶趣味游戏hhh(奥里给干了兄弟们)
看看我的汉堡包做的咋样?

正式分析:

以前没见过Unity3D的逆向。。先康康别人的blog。
unity是用C#开发的,所以用dnSpy来进行分析。
注:dnSpy是分析net程序的反编译工具。

根据其它师傅的建议,把BJD hamburger competition_Data
\Managed文件夹中的Assembly-CSharp.dll拖到dnSpy进行分析。

拖进去后:

根据其它师傅的建议,找到ButtonSpawnFruit类:

反编译完后得到的文件里面,有重要线索:

核心代码:

	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") 	//Sha1加密
				{
					this.result = "BJDCTF{" + ButtonSpawnFruit.Md5(str) + "}"; //最后在flag里面的却是字符串的md5加密
					Debug.Log(this.result);	
				}
			}

解密

先从sha1开始反推。
sha1在线解密加密

所以紧接着就直接把1001进行md5加密:
md5加密

加密出了4种不同类型的。。
继续看一下源码,点进Md5函数看函数定义:

	public static string Md5(string str)
	{
		byte[] bytes = Encoding.UTF8.GetBytes(str);//转化成UTF-8编码
		byte[] array = MD5.Create().ComputeHash(bytes);//计算MD5值
		StringBuilder stringBuilder = new StringBuilder();//
		foreach (byte b in array)
		{
			stringBuilder.Append(b.ToString("X2"));//转化成16进制,大写的数字
		}
		return stringBuilder.ToString().Substring(0, 20);//只返回前20位
	}

所以最后应该是:
B8C37E33DEFDE51CF91E

BJDCTF{B8C37E33DEFDE51CF91E}

注:buuoj平台上应该是flag{B8C37E33DEFDE51CF91E}

总结

  1. C#入门
  2. Unity3D逆向
  3. dnSpy
  4. 从多个文件中抽取重要文件,文件中抽取重要代码段的方法

至于怎么在那么多文件中找到需要的关键文件,我以后再思考。

引用/参考

https://blog.csdn/yeyang911/article/details/12882029
https://wwwblogs/DorinXL/p/12905651.html
https://blog.csdn/huutu/article/details/50829828

本文标签: BJDcompetitionhamburger