BUUCTF Reverse/[2019红帽杯]Snake

BUUCTF Reverse/[2019红帽杯]Snake

BUUCTF Reverse/[2019红帽杯]Snake_第1张图片

下载解压缩后得到可执行文件,而且有一个unity的应用程序,应该是用unity编写的游戏

BUUCTF Reverse/[2019红帽杯]Snake_第2张图片

打开是一个贪吃蛇游戏

BUUCTF Reverse/[2019红帽杯]Snake_第3张图片

用.NET Reflector打开Assembly-CSharp.dll。(unity在打包后,会将所有的代码打进一个Assembly-CSharp.dll的文件里面,通过这个文件的反编译,就是详细看见里面的代码内容)

BUUCTF Reverse/[2019红帽杯]Snake_第4张图片

再将Assembly-CSharp.dll拖入IDA中查看函数关系

BUUCTF Reverse/[2019红帽杯]Snake_第5张图片
在这里插入图片描述

有个start函数,但是点击不能跳转

BUUCTF Reverse/[2019红帽杯]Snake_第6张图片

还有其他的一些函数

BUUCTF Reverse/[2019红帽杯]Snake_第7张图片

查了下各个函数的作用,看到了这个gameobject,这个是个创建物体的类,而在IDA中一共只有两个Gameobject,看了下这个游戏,一共就两个物体,一个食物还有一个蛇,

BUUCTF Reverse/[2019红帽杯]Snake_第8张图片

(详细参考unity3d中的 gameobject
详情看GameObject类的应用

BUUCTF Reverse/[2019红帽杯]Snake_第9张图片
BUUCTF Reverse/[2019红帽杯]Snake_第10张图片

回到reflector中查找Interface下的GameObject函数

BUUCTF Reverse/[2019红帽杯]Snake_第11张图片

根据这个推测出Interface为程序的入口点

BUUCTF Reverse/[2019红帽杯]Snake_第12张图片
BUUCTF Reverse/[2019红帽杯]Snake_第13张图片

知道了interface里面就是程序的入口点,然后在\Snake\Snake_Data\Plugins
找到interface.dll,将其拖入IDA64中分析
这个能够按f5查看伪代码

BUUCTF Reverse/[2019红帽杯]Snake_第14张图片

打开String窗口

BUUCTF Reverse/[2019红帽杯]Snake_第15张图片

看到flag提示

BUUCTF Reverse/[2019红帽杯]Snake_第16张图片

跟踪跳转

BUUCTF Reverse/[2019红帽杯]Snake_第17张图片

再次跟踪跳转到gameobject

BUUCTF Reverse/[2019红帽杯]Snake_第18张图片

按f5查看伪代码

BUUCTF Reverse/[2019红帽杯]Snake_第19张图片

分析伪代码,这个sub_18000A990输出的就是flag

BUUCTF Reverse/[2019红帽杯]Snake_第20张图片

代码太长了,继续往下翻看看还有没有哪里也能输出flag
中间部分也有地方能输出flag

BUUCTF Reverse/[2019红帽杯]Snake_第21张图片

继续翻发现了这个,real flag,条件居然是玩贪吃蛇游戏赢59把。。。

BUUCTF Reverse/[2019红帽杯]Snake_第22张图片

代码太复杂了,看到这个函数只有一个形参,后面输出flag都与a1有关,所以准备爆破

BUUCTF Reverse/[2019红帽杯]Snake_第23张图片

BUUCTF Reverse/[2019红帽杯]Snake_第24张图片

BUUCTF Reverse/[2019红帽杯]Snake_第25张图片

参考python中调用dll文件

a1的取值范围为0到99,参考网上的脚本

BUUCTF Reverse/[2019红帽杯]Snake_第26张图片

因为python中需要\作为反斜杠字符,所以路径中要打两个\

BUUCTF Reverse/[2019红帽杯]Snake_第27张图片

运行得到flag,这玩意运行时间贼长,跑了20多分钟才出来

BUUCTF Reverse/[2019红帽杯]Snake_第28张图片

flag: flag{Ch4rp_W1th_R$@}

你可能感兴趣的:(#,BUUCTF,Reverse)