赞
踩
题目连接:
https://play.picoctf.org/practice/challenge/361?originalEvent=72&page=3
我们是windows系统,所以点击windows game下载游戏
双击运行pico.exe
屏幕上方的一串英文是叫我们找flag,我在这个小地图里走来走去也没flag,我上梯子后才发现突破点
墙外有一个旗帜,但是我们无法出去,有空气墙,我们碰到旗帜就应该能拿到flag了
目前能拿到flag的思路:
使用Cheat Engine控制人物的坐标,直接修改坐标值,强制出去
使用DnSpy修改程序代码,使一开始运行游戏的时候就显示flag
这两个方式我都会演示
Cheat Engine是一款用于修改计算机游戏运行时内存中数值的开源工具。它可以搜索和修改游戏中的各种数值,如生命值、金钱、经验值等等
下载地址:
https://www.cheatengine.org/
使用ctrl+alt+tab使游戏在后台运行,安装好Cheat Engine后双击运行
点击左上角的图标,导入我们的游戏进程
导入之后就要搜索我们要修改的值了,在unity中,玩家的坐标是浮点数,我们可以一直移动来找到坐标值
由于我们不知道坐标,scantype选择未知的值,valuetype选择浮点数,然后点击firstscan
可以看到,他扫描到了215168000个值,太多了,现在来慢慢筛选,点击scantype,选择增加值
然后回到游戏,我们向前走几步
然后回到Cheat Engine,点击nextscan
可以看到,值减少了很多,现在我们回到游戏,后退几步,回到Cheat Engine,选择减少值
点击扫描后又少了一些值,一直重复这几个动作
现在值减少到了6千多个,然后选择不变的值,点击repeat
点击nestscan
现在有400多个值,取消repeat,回到游戏,继续重复上面的动作
现在只剩下60多个值了,我们点击address然后右下角的图标
在最下面我们随便勾选几个值,代表着冻结,然后回到游戏看能不能移动,如果不能就慢慢筛选,直到找到坐标的值
经过一段时间的筛选后,发现这个值就是坐标值,一旦我冻结了他,回到游戏就无法移动
首先我们冻结这个值,然后双击,随便改一个值
注意别改太大了,大概这个值就能出去
现在解禁函数,我们走到旗帜前
出现了falg
picoCTF{WELCOME_TO_UNITY!!}
DnSpy是一款开源的.NET程序集反编译工具,它可以将.NET程序集反编译成可读性较高的C#代码或者IL代码。DnSpy不仅可以查看反编译后的代码,还可以编辑和调试.NET程序集,包括修改程序集中的变量值、方法等等
下载地址:
https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8
Assembly-CSharp.dll是unity的程序集,所以我们反汇编这个文件就好了
双击打开DnSpy,将Assembly-CSharp.dll拖入
在APTX里找到了一些有趣的函数
private void OnTriggerEnter(Collider collision)
{
if (collision.gameObject == this.player)
{
this.Mysterious.SetActive(true);
}
}
如果玩家碰撞了这个对象,就会输出一些东西,这应该就是flag的触发方式了
在下面,可以看到游戏启动的函数名次Start
首先我们复制this.Mysterious.SetActive(true);这一行代码,然后右击APTX
然后右击我们创建的Start,选择编辑方法
然后进行修改,使一进入游戏就输出flag
ctrl+shift+s保存所有,双击打开游戏
一进去就能看见flag了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。