使用Cheat Engine与DnSpy破解Unity游戏

题目连接:

https://play.picoctf.org/practice/challenge/361?originalEvent=72&page=3

我们是windows系统,所以点击windows game下载游戏

使用Cheat Engine与DnSpy破解Unity游戏_第1张图片

双击运行pico.exe

屏幕上方的一串英文是叫我们找flag,我在这个小地图里走来走去也没flag,我上梯子后才发现突破点

墙外有一个旗帜,但是我们无法出去,有空气墙,我们碰到旗帜就应该能拿到flag了

目前能拿到flag的思路:

使用Cheat Engine控制人物的坐标,直接修改坐标值,强制出去
使用DnSpy修改程序代码,使一开始运行游戏的时候就显示flag

这两个方式我都会演示

Cheat Engine

Cheat Engine是一款用于修改计算机游戏运行时内存中数值的开源工具。它可以搜索和修改游戏中的各种数值,如生命值、金钱、经验值等等
下载地址:

https://www.cheatengine.org/

使用ctrl+alt+tab使游戏在后台运行,安装好Cheat Engine后双击运行

使用Cheat Engine与DnSpy破解Unity游戏_第2张图片

点击左上角的图标,导入我们的游戏进程

使用Cheat Engine与DnSpy破解Unity游戏_第3张图片

导入之后就要搜索我们要修改的值了,在unity中,玩家的坐标是浮点数,我们可以一直移动来找到坐标值

使用Cheat Engine与DnSpy破解Unity游戏_第4张图片

由于我们不知道坐标,scantype选择未知的值,valuetype选择浮点数,然后点击firstscan

使用Cheat Engine与DnSpy破解Unity游戏_第5张图片

可以看到,他扫描到了215168000个值,太多了,现在来慢慢筛选,点击scantype,选择增加值

使用Cheat Engine与DnSpy破解Unity游戏_第6张图片

然后回到游戏,我们向前走几步

然后回到Cheat Engine,点击nextscan

使用Cheat Engine与DnSpy破解Unity游戏_第7张图片

可以看到,值减少了很多,现在我们回到游戏,后退几步,回到Cheat Engine,选择减少值

使用Cheat Engine与DnSpy破解Unity游戏_第8张图片

点击扫描后又少了一些值,一直重复这几个动作

使用Cheat Engine与DnSpy破解Unity游戏_第9张图片

使用Cheat Engine与DnSpy破解Unity游戏_第10张图片

现在值减少到了6千多个,然后选择不变的值,点击repeat

使用Cheat Engine与DnSpy破解Unity游戏_第11张图片

点击nestscan

使用Cheat Engine与DnSpy破解Unity游戏_第12张图片

现在有400多个值,取消repeat,回到游戏,继续重复上面的动作

使用Cheat Engine与DnSpy破解Unity游戏_第13张图片

现在只剩下60多个值了,我们点击address然后右下角的图标

使用Cheat Engine与DnSpy破解Unity游戏_第14张图片

在最下面我们随便勾选几个值,代表着冻结,然后回到游戏看能不能移动,如果不能就慢慢筛选,直到找到坐标的值

经过一段时间的筛选后,发现这个值就是坐标值,一旦我冻结了他,回到游戏就无法移动

使用Cheat Engine与DnSpy破解Unity游戏_第15张图片

首先我们冻结这个值,然后双击,随便改一个值

使用Cheat Engine与DnSpy破解Unity游戏_第16张图片

注意别改太大了,大概这个值就能出去

现在解禁函数,我们走到旗帜前

出现了falg

picoCTF{WELCOME_TO_UNITY!!}

使用Cheat Engine与DnSpy破解Unity游戏_第17张图片

DnSpy

DnSpy是一款开源的.NET程序集反编译工具,它可以将.NET程序集反编译成可读性较高的C#代码或者IL代码。DnSpy不仅可以查看反编译后的代码,还可以编辑和调试.NET程序集,包括修改程序集中的变量值、方法等等

下载地址:

https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8

Assembly-CSharp.dll是unity的程序集,所以我们反汇编这个文件就好了

使用Cheat Engine与DnSpy破解Unity游戏_第18张图片

双击打开DnSpy,将Assembly-CSharp.dll拖入

使用Cheat Engine与DnSpy破解Unity游戏_第19张图片

使用Cheat Engine与DnSpy破解Unity游戏_第20张图片

在APTX里找到了一些有趣的函数

使用Cheat Engine与DnSpy破解Unity游戏_第21张图片

private void OnTriggerEnter(Collider collision)
{
	if (collision.gameObject == this.player)
	{
		this.Mysterious.SetActive(true);
	}
}

如果玩家碰撞了这个对象,就会输出一些东西,这应该就是flag的触发方式了

使用Cheat Engine与DnSpy破解Unity游戏_第22张图片

在下面,可以看到游戏启动的函数名次Start

首先我们复制this.Mysterious.SetActive(true);这一行代码,然后右击APTX

使用Cheat Engine与DnSpy破解Unity游戏_第23张图片

使用Cheat Engine与DnSpy破解Unity游戏_第24张图片

然后右击我们创建的Start,选择编辑方法

使用Cheat Engine与DnSpy破解Unity游戏_第25张图片

然后进行修改,使一进入游戏就输出flag

使用Cheat Engine与DnSpy破解Unity游戏_第26张图片

使用Cheat Engine与DnSpy破解Unity游戏_第27张图片

ctrl+shift+s保存所有,双击打开游戏

一进去就能看见flag了

你可能感兴趣的:(unity,安全,网络安全,ctf,逆向)