admin管理员组

文章数量:1530013

buuctf做题记录

分析

拿到手里是一堆文件:

(这里的code是我之后存在这里的一个文件夹,并不是题目给的)
看到了Unity,之前并未做过类似的题目,去查了相关参考:
比较关键的几点是:

  1. u3d支持c#和js两种脚本,而且c#是最普遍的
  2. 核心代码位于下述路径:

\TPH\TPH_Data\Managed\Assembly-CSharp.dll

  1. 关于

逆向分析

根据以上信息,使用ILSpy打开hamburger_competition\BJD hamburger competition_Data\Managed中的Assembly-CSharp.dll
ILSpy的安装

然后点击左上角的File之后save code,选择一个文件夹保存反编译后的代码(我这里就是新建了一个code文件夹)

在得到的一堆文件中,用VS打开这个文件

.csproj,是C#项目文件的扩展名,它是“C Sharp Project”的缩写。开发环境中建立项目时,会产生.csproj文件,这是C#的工程文件,其中记录了与工程有关的相关信息,例如包含的文件,程序的版本,所生成的文件的类型和位置信息等。

可以看到反编译后的代码了:

之前尝试点击过这个游戏,游戏界面是这样的:

显然,ButtonSpawnFruit.cs里的字符串与显示的界面有关,很有可能藏有flag,继续往下看:

显而易见的一个SHA1和一个md5,首先进行SHA1解密:

得到1001
再进行md5加密:

可是把32位和16位的结果都包上flag{}交上去了却都不对,找了一个把小写字母转换成大写字母的网站,提交大写字母的flag仍旧不对,于是思考,在SHA1已经解密出1001的情况下,出错的应该是md5的加密,返回去看具体的md5加密函数:


虽然我没学过c#,但substring应该是比较常见的名称了,它把md5得到的字符串截取了0-20的部分,所以flag只有20个字符,到这里我就大小字母都试了试交了flag,之后又去搜了下ToString("X2")

ToString(“X2”) 为C#中的字符串格式控制符X为 十六进制 2为 每次都是两位数比如 0x0A ,若没有2,就只会输出0xA 假设有两个数10和26,正常情况十六进制显示0xA、0x1A,这样看起来不整齐,为了好看,可以指定"X2",这样显示出来就是:0x0A、0x1A。
(由此知是大写的字母)

最后得到flag:

小结

更新了对、unity3D以及C#的知识,需要学习的东西又增多了。

本文标签: BJDhamburgerBUUCTFcompetition