(BUU_[BJDCTF2020]BJD hamburger competition

(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.net/yeyang911/article/details/12882029
https://www.cnblogs.com/DorinXL/p/12905651.html
https://blog.csdn.net/huutu/article/details/50829828

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值