1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SunshainCTF 2025 - misc Writeup

Posted at

SunshineCTF 2025

  • Sat, 27 Sept. 2025, 14:00 UTC — Mon, 29 Sept. 2025, 14:00 UT

misc: the poor challenge

  • 10pt
  • created by oatzs
  • provided txt file
its da poop challenge :DDDDDDDDDD
$  cat poop_challenge.txt                                                                                                               ❮❮❮
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩%                                                 

絵文字の羅列ファイルであることがわかった
vimで開いてみる

$ vim poor_challenge.txt
  1 💩💩<200b>💩<200b>💩<200b>💩💩💩<200b>💩<200b>
  2 💩💩<200b>💩<200b>💩<200b>💩💩<200b>💩💩<200b>
  3 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩
  4 💩💩<200b>💩<200b>💩<200b>💩<200b>💩💩<200b>💩<200b>
  5 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩💩
  6 💩💩<200b>💩<200b>💩💩💩<200b>💩💩<200b>
  7 💩💩<200b>💩<200b>💩<200b>💩💩💩<200b>💩<200b>
  8 💩💩<200b>💩<200b>💩<200b>💩💩💩<200b>💩<200b>
  9 💩💩<200b>💩<200b>💩<200b>💩💩💩<200b>💩<200b>
 10 💩💩<200b>💩<200b>💩💩💩<200b>💩<200b>💩<200b>
 11 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>
 12 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>
 13 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>
 14 💩💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>💩<200b>
 15 💩💩<200b>💩<200b>💩<200b>💩💩💩<200b>💩<200b>
 16 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>
 17 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩💩
 18 💩💩<200b>💩<200b>💩<200b>💩💩<200b>💩<200b>💩
 19 💩💩<200b>💩<200b>💩💩💩<200b>💩💩<200b>
 20 💩💩<200b>💩<200b>💩💩💩<200b>💩💩
 21 💩💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>💩<200b>
 22 💩💩<200b>💩<200b>💩<200b>💩💩<200b>💩💩
 23 💩💩<200b>💩<200b>💩💩<200b>💩💩💩
 24 💩💩<200b>💩<200b>💩💩💩<200b>💩💩<200b>
 25 💩💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>💩<200b>
 26 💩💩<200b>💩<200b>💩<200b>💩💩💩💩
 27 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>
 28 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>
 29 💩💩<200b>💩<200b>💩<200b>💩💩💩💩
 30 💩💩<200b>💩💩<200b>💩<200b>💩<200b>💩<200b>💩<200b>
 31 💩💩<200b>💩<200b>💩💩💩💩<200b>💩<200b>
 32 💩💩<200b>💩<200b>💩💩<200b>💩💩💩
 33 💩💩<200b>💩<200b>💩💩💩💩💩<200b>
 34 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩💩
 35 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩💩
 36 💩💩<200b>💩<200b>💩💩💩<200b>💩💩<200b>
 37 💩💩<200b>💩<200b>💩💩<200b>💩<200b>💩<200b>💩
 38 💩💩<200b>💩<200b>💩💩💩<200b>💩<200b>💩<200b>
 39 💩💩<200b>💩<200b>💩💩💩<200b>💩💩<200b>
 40 💩💩💩<200b>💩💩💩💩💩<200b>
 41 💩💩<200b>💩<200b>💩<200b>💩<200b>💩<200b>💩💩<200b>

不規則に<200b>が絵文字の間に挿入されている

200bはunicodeのZero Width Spaceで、ゼロ幅文字を表す
つまり、この問題はゼロ幅文字を用いたステガノグラフィが本質になる

ゼロ幅スペースによるエンコードがされているとすると以下の条件(もしくは逆条件)でデコードしてみる

  • 絵文字の後にゼロ幅文字あり = 1
  • 絵文字の後にゼロ幅文字なし = 0

検証

上記の1行目が以下
1 💩💩<200b>💩<200b>💩<200b>💩💩💩<200b>💩<200b>

それをデコードすると
01110011
になる

これを10進数にすると1+2+16+32+64 = 115
16進数にすると0x73

0x73 をASCIIの文字コードに直すと s

今回のCTFのFlagのフォーマットは sun{} のため、正しそう

2行目も確認してみる
2 💩💩<200b>💩<200b>💩<200b>💩💩<200b>💩💩<200b>

01110101 = 1+4+16+32+64 = 117 (10進数)
117 = 0x75 = u

s , u と続いたので正しい可能性が高い

Answer

pythonのスクリプトをGPTに組んでもらい手を加えたものが以下

def extract_binary_from_poop(filename):
    with open(filename, 'r', encoding='utf-8') as f:
        data = f.read()

    binary = ''
    i = 0
    while i < len(data):
        if data[i] == '💩':
            # 💩の次にゼロ幅スペースがあるか判定
            if i + 1 < len(data) and data[i + 1] == '\u200b':
                binary += '1'
                i += 2  # 💩と\u200bを飛ばす
            else:
                binary += '0'
                i += 1  # 💩だけ飛ばす
        else:
            i += 1  # 💩じゃないならスキップ

    return binary

def binary_to_ascii(binary):
    chars = []
    for i in range(0, len(binary), 8):
        byte = binary[i:i+8]
        if len(byte) == 8:
            chars.append(chr(int(byte, 2)))
    return ''.join(chars)

# 実行
binary = extract_binary_from_poop('poop_challenge.txt')
print("binary:", binary)
flag = binary_to_ascii(binary)
print("flag:", flag)

実行結果

$  python3 decode.py                                                                                                       ❮❮❮
binary: 0111001101110101011011100111101101101100011001010111001101110011011100110110011101101111011011110110111101011111011100110110111101101100011101100110010101100100010111110111010001101000011001010101111101110000011011110110111101110000010111110110001101101000011000010110110001101100011001010110111001100111011001010010000101111101
flag: sun{lesssgooo_solved_the_poop_challenge!}
  • ファイル全体を01のバイナリにした後、8biずつ取り出しASCIIの文字コードで文字化

Flag : sun{lesssgooo_solved_the_poop_challenge!}


misc: Tribble with my Skin

  • 10pt
  • created by oatzs

Question

My Minecraft account got hacked and now my skin seems to be a little off...

Might be having trouble with the tribbles...

Mind checking it out? My Minecraft username is "oatzs".

PS: A Minecraft account/instance is not required for this challenge. The most recently used skin is the suspicious one.

Answer

Googleで minecraft oatzsと検索すると以下のoatzsのアカウントページが出てくる

「Download Skin」からスキンがDLできるのでDLする
DLしたpngを開くとFlagが表示されている

Flag : sun{Tribble_Craft}


OK BOOMER

  • 10pt
  • created by sachsuke

Question

7778866{844444777_7446666633_444777_26622244433668}

alternatively (if that one is producing invalid results)

77778866{8444447777_7446666633_4447777_26622244433668}

フラグを直接エンコードしたものっぽ
7778866 or 77778866sun になればいい
がこれだけではさっぱり分からないので、OK BOOMERの意味を調べた

ロートルを揶揄するスラング的な意味合いらしい...
ということは、昔からある技術やデバイスを利用したデコードなのかと思ったが、さっぱりだったのでここまでの情報をまとめてGPTに聞く

テンキーの表示なのでは?という回答
検証してみる

検証

77778866{8444447777_7446666633_4447777_26622244433668}
77778866がsunになればいいので

  • 7777 -> s
  • 88 -> u
  • 66 -> n
    ということが推測できた
    つまり、数値は入力するテンキーの位置を示し、数字の回数は何回タップするかを示す

iPhoneのフリック入力を無効化して、以下の条件で試してみる

@ -> 1
a -> 2
d -> 3
g -> 4
j -> 5
m -> 6
p -> 7
t -> 8
w -> 9

つまり、7777であれば7のpのテンキーを4回

  • p -> q -> r -> s
    sになった

Answer

この調子でデコードすると
sun{ths_phne_is_ancient}
になる

flagっぽいがどこか足りない
文字列から4回以上ある区切りを意識してみる

8444447777

  • 8 -> t
  • 44444 -> 44 + 444 -> hi
  • 7777 -> s
  • = this で意味が通る

上記の調整をするとFlagが取得できる

Flag : sun{this_phone_is_ancient}


misc: BigMak

  • 10pt
  • created by oatzs

Qustion

I tried typing out the flag for you, but our Astronaut **Cole**son seems to have changed the terminal's keyboard layout? He went out to get a big **mak** so I guess we're screwed. Whatever, here's the flag, if you can somehow get it back to normal.

rlk{blpdfp_iajylg_iyi}

最初はなんのことか問題文が理解できなかったが、Colemakが強調されていることがわかった
Coleson, mak, cole mak 等で検索すると、キーボードのColemak配列がヒットした

Qwerty配列の文字列をColemak配列でエンコードしたものだと推測

検証

以下のColemak配列の画像を元に、rlkをデコードしてみる

  • r -> aの右隣 -> s
  • l -> 7の右下 -> u
  • k -> spaceの上、Bの右隣 -> n

sun になったため正しい可能性が高い

Answer

上記の要領でデコードしていくとFlagが得られる

Flag : sun{burger_layout_lol}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?