💙

Full Weak EngineerCTF 2025 作問者Writeup

に公開

JUCKです。しれっとFull Weak EngineerCTFにてRev2問,Misc1問を作成していました。

No need Logical Thinking

論理的思考はどんな物事にも必要。

Logical Thiniking is need for everything.

solution

このプログラムはPrologで記述されたもので、process_flagでflagを読み出しtransform_codes()でflagの元の文字列+インデックスの値をASCiiにするプログラムとなっています。

def main():
    try:
        with open("output.txt", "r", encoding="utf-8") as f:
            content = f.read()
            i=1
            # 1文字ずつ出力
            for ch in content:
                print(chr(ord(ch)-i))
                i+=1
    except FileNotFoundError:
        print("Error: 'output.txt' not found.")

if __name__ == "__main__":
    main()
fwectf{the_Pr010g_10gica1_Languag3!}

Mystery Zone(なぞのばしょ)

よぉ~みんな! HelloWorld だぜ!!!  
flag を探してたら変な所に迷い込んじまったみてぇだ……。  
俺を操作して flag を見つけてくれ~!!  
お前たち最高だぜ!

Whoa, duuuudes! HelloWorld, righteous!  
I was cruisin' the EXE lookin' for the flag when I totally got lost in this gnarly place, man . . . .  
Gimme a ping and help me find that flag, little dudes! Cowabunga!

solution

Unityで作成されたasusnさんの持ちネタであるターミナルトークのようなゲームが配布されます。
UnityということでC#で記述されているので、dnSpyを使って解析することが出来ます。
Unityのコードは主にAssembly-CSharp.dllに書き込まれるので、Challenge_Data/Managed/Assembly-CSharp.dllをdnSpyに投げます。
ゲーム内座標が(65536f,65536f)になるとflag獲得になりますが、その前に SceneManager.LoadScene("Error")でエラーに遷移するので、SceneManager.LoadScene("Flag")をどこかに書き込めばflag獲得です。

fwectf{K494ku_no_Ch1k4r4_t7e_5u63h!}

Poison Apple

iOSではウォッチドッグタイマが故障した時に返ってくる不思議な4バイトがあるらしい…
大文字にしてfwectf{}で囲ってね
例:1234ABCD→fwectf{1234ABCD}

Apparently, there are four special bytes returned when the watchdog timer fails on iOS...
Capitalize them and enclose them in fwectf{}.
e.g.1234ABCD→fwectf{1234ABCD}

solution

「ウォッチドッグタイマが故障」に注目してインターネットで検索すると0x8badf00dが出てきます

fwectf{8BADF00D}

最後に

fwectfをお楽しみ頂きありがとうございました!!
作問陣にとんでもない方が多く、僕の作成した問題の質がかなり低いものだったと反省しています...。
来年以降も機会があればぜひご参加下さい!

Discussion