-
-
[原创]BUUCTF逆向题:[BJDCTF2020]BJD hamburger competition
-
发表于: 2022-3-27 17:25 6247
-
看到文件的时候我就蒙了,这玩意儿完全没见过,直接就去百度。
百度了一下,发现网上关于这个题的wp基本都是以前没见过开头。
介是一个Unity3D开发的程序,Unity3D是嘛呢:
Unity3D是由Unity Technologies开发的一个让玩家轻松创建互动内容的多平台的综合型游戏开发工具,Unity3D是用C#开发的,c#的反汇编工具为dnspy,但是把哪个东西丢进去呢?
unity在打包玩程序后,会将所有的代码打进一个Assembly-CSharp.dll
的文件里面,通过这个文件的反编译,就能详细看见里面的代码内容。(这个文件在Managed
目录下)
是老八的蜜汁小汉堡:
先把它丢进dnspy
可以看到它调用了蛮多的模块,这里如何快速去定位关键模块呢,这就是游戏题先玩一下游戏的重要性了,玩了游戏就会知道其中的蔬果啥的是可以点击的而这些个玩意儿肯定是通关的关键,知道这点再看这些模块会发现只有ButtoSpawnFruit
模块里有个水果,点击看一下:
可以看到两个加密函数和一个不知道干啥的函数点过去看一下:
这里就是check并输出flag的函数,逻辑很清晰:
找个在线网站:
Str为1001,MD5加密一下
B8C37E33DEFDE51CF91E1E03E51657DA
flag为:flag{B8C37E33DEFDE51CF91E1E03E51657DA}
但是提交后发现不对:
遇事不决还是百度,发现它的md5只返回了前20个字符
这确实有点坑,就没怀疑过两个加密函数,那么最后的flag应为:
flag{B8C37E33DEFDE51CF91E}
/
/
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);
}
}
/
/
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
=
=
"鸭屁股"
)
赞赏
他的文章
- 关于迷宫题的一些求解思路 11050
- [原创]攻防世界PWN新手区:int_overflow 7791
- [原创]攻防世界PWN新手区:guess_num 11509
- [原创]攻防世界PWN新手区:level2 11796
- [原创]攻防世界PWN新手区:level0 6089
看原图
赞赏
雪币:
留言: