公路建設(shè)管理辦公室網(wǎng)站中國最好的營銷策劃公司
題目連接:
https://play.picoctf.org/practice/challenge/361?originalEvent=72&page=3
我們是windows系統(tǒng),所以點擊windows game下載游戲
雙擊運行pico.exe
屏幕上方的一串英文是叫我們找flag,我在這個小地圖里走來走去也沒flag,我上梯子后才發(fā)現(xiàn)突破點
墻外有一個旗幟,但是我們無法出去,有空氣墻,我們碰到旗幟就應(yīng)該能拿到flag了
目前能拿到flag的思路:
使用Cheat Engine控制人物的坐標,直接修改坐標值,強制出去
使用DnSpy修改程序代碼,使一開始運行游戲的時候就顯示flag
這兩個方式我都會演示
Cheat Engine
Cheat Engine是一款用于修改計算機游戲運行時內(nèi)存中數(shù)值的開源工具。它可以搜索和修改游戲中的各種數(shù)值,如生命值、金錢、經(jīng)驗值等等
下載地址:
https://www.cheatengine.org/
使用ctrl+alt+tab使游戲在后臺運行,安裝好Cheat Engine后雙擊運行
點擊左上角的圖標,導(dǎo)入我們的游戲進程
導(dǎo)入之后就要搜索我們要修改的值了,在unity中,玩家的坐標是浮點數(shù),我們可以一直移動來找到坐標值
由于我們不知道坐標,scantype選擇未知的值,valuetype選擇浮點數(shù),然后點擊firstscan
可以看到,他掃描到了215168000個值,太多了,現(xiàn)在來慢慢篩選,點擊scantype,選擇增加值
然后回到游戲,我們向前走幾步
然后回到Cheat Engine,點擊nextscan
可以看到,值減少了很多,現(xiàn)在我們回到游戲,后退幾步,回到Cheat Engine,選擇減少值
點擊掃描后又少了一些值,一直重復(fù)這幾個動作
現(xiàn)在值減少到了6千多個,然后選擇不變的值,點擊repeat
點擊nestscan
現(xiàn)在有400多個值,取消repeat,回到游戲,繼續(xù)重復(fù)上面的動作
現(xiàn)在只剩下60多個值了,我們點擊address然后右下角的圖標
在最下面我們隨便勾選幾個值,代表著凍結(jié),然后回到游戲看能不能移動,如果不能就慢慢篩選,直到找到坐標的值
經(jīng)過一段時間的篩選后,發(fā)現(xiàn)這個值就是坐標值,一旦我凍結(jié)了他,回到游戲就無法移動
首先我們凍結(jié)這個值,然后雙擊,隨便改一個值
注意別改太大了,大概這個值就能出去
現(xiàn)在解禁函數(shù),我們走到旗幟前
出現(xiàn)了falg
picoCTF{WELCOME_TO_UNITY!!}
DnSpy
DnSpy是一款開源的.NET程序集反編譯工具,它可以將.NET程序集反編譯成可讀性較高的C#代碼或者IL代碼。DnSpy不僅可以查看反編譯后的代碼,還可以編輯和調(diào)試.NET程序集,包括修改程序集中的變量值、方法等等
下載地址:
https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8
Assembly-CSharp.dll是unity的程序集,所以我們反匯編這個文件就好了
雙擊打開DnSpy,將Assembly-CSharp.dll拖入
在APTX里找到了一些有趣的函數(shù)
private void OnTriggerEnter(Collider collision)
{if (collision.gameObject == this.player){this.Mysterious.SetActive(true);}
}
如果玩家碰撞了這個對象,就會輸出一些東西,這應(yīng)該就是flag的觸發(fā)方式了
在下面,可以看到游戲啟動的函數(shù)名次Start
首先我們復(fù)制this.Mysterious.SetActive(true);這一行代碼,然后右擊APTX
然后右擊我們創(chuàng)建的Start,選擇編輯方法
然后進行修改,使一進入游戲就輸出flag
ctrl+shift+s保存所有,雙擊打開游戲
一進去就能看見flag了