Tsukushi くんは TsukuCTF の開催記念に新しく暗号資産「TsukuCTFCoin」を作りました!(この資産は問題用に作成されたものであり、実用できるものではありません) どうやら Tsukushi くんはブロックチェーンに、フラグ形式の記念のメッセージを埋め込んだようです。 以下にブロックチェーンエクスプローラーの URL を示します。 そこから得られる情報を用いて、フラグを取得してください。
この問題では、提供されるブロックチェーンエクスプローラー以外にバイナリをテキスト(ascii)に変換する手段が必要です。
https://tsukuctfcoin.sechack365.com
ヒント 1 が遠回しですが、「ブロックチェーン メッセージ」で Google 検索をすると、その他の候補として「ビットコイン ジェネシスブロック メッセージ」というものが出てきます。 このワードで検索すると、例えば以下のサイトが検索結果として得られます。 https://alis.to/nonbiritokei/articles/3GqMZgbQ0wMz
上記のサイトにはジェネシスブロックは「block0」であることが記されています。 また、ジェネシスブロックにはメッセージが埋め込めることがわかります。
以上のように、何かしらの方法でジェネシスブロック(block 0)にメッセージが埋め込まれていることさえわかれば、あとはジェネシスブロックを探し出し、その中からメッセージを探し出すだけです。
Web サイト上からジェネシスブロックを探したいところですが、トップページで見られるブロックの一覧を見ても、1 ブロックが限界です。
そこで、ブロックチェーンエクスプローラーが提供してくれている API を用います。
ヒント 2 には、「ブロックハッシュを元にブロックが求められる」ことが書かれています。
なので、「block0」のブロックハッシュを求めます。
API 一覧からブロックハッシュを求めるものを探すと「getblockhash」が該当します。
index
にブロックの高さを指定すればよいことが書かれているので、 https://tsukuctfcoin.sechack365.com/api/getblockhash?index=0 にアクセスすればブロックハッシュが得られます。
a57c276878b629f165b8de7a3d19a3e71bb2a532c3da91b6a068030b51a9b26c
次いでブロックハッシュからブロックを求めるものを探すと、「getblock」が該当します。
hash
にブロックハッシュを指定すれば良いことが書かれているので、 https://tsukuctfcoin.sechack365.com/api/getblock?hash=a57c276878b629f165b8de7a3d19a3e71bb2a532c3da91b6a068030b51a9b26c にアクセスすればブロックのデータが得られます。
ここで詰まってしまいますが、ヒント 3 として、「トランザクション(tx)に注目すればいい」ということがわかります。
「getblock」のリザルトにはtx
が含まれています。これを使用します。
トランザクションを見るための API は「getrawtransaction」です。
txid
にtx
で得られたものを代入します。
ここからは想定解法が 2 つに分かれます。
decrypt=0
を用いる場合
getrawtransaction には、オプションとしてdecrypt
という項目があります。
これは、トランザクションを分解して、見やすくする機能で、0 で未適用、1 で適用されます。
decrypt=0
で得られた結果は、そのまま hex to ascii 変換器に投げれば、どこかにフラグが浮かび上がります。
decrypt=1
を用いる場合decrypt=1
で得られた結果はその中からさらにフラグに該当する部分を探さなければなりません。
ここからは総当たりでもよいでしょう。
coinbase
キーのバリューにあたる部分にフラグが含まれています。
とりあえず API ページを見に行きます。
ご丁寧にも、API のサンプルは全てジェネシスブロックに関連するものにしてあるので(これはたまたま当たるレベルなので、本来は)、ヒント 3 の「トランザクション(tx)に注目すればいい」という点からgetrawtransaction
API をたたきます。
これ以降は想定解法 1-1 や 1-2 と同じです。
TsukuCTF{2021_09_11_GENESIS_TKC}