Appearance
S1C8: The Unverified
1. 問題
コントラクトはブロックエクスプローラー上で未検証です(ソースコードなし)。バイトコードを分析してコントラクトのロジックを理解し、正しい関数を呼び出す必要があります。
2. 原因
コントラクトは意図的にソースコードを公開しておらず、プレイヤーは EVM バイトコード分析能力を持つ必要があります。
3. 方案
cast codeを使用してデプロイ済みバイトコードを取得する- 4byte セレクターを通じて関数シグネチャをデコードする
- 関数ディスパッチテーブル(dispatch table)と関数ロジックを分析する
- 正しい calldata を構築してトランザクションを送信する
bash
# バイトコードを取得
cast code <CHALLENGE> --rpc-url $RPC
# セレクターをデコード
cast 4byte <SELECTOR>
# raw calldata を送信
cast send <CHALLENGE> <CALLDATA>
4. 遭遇したトラップ
バイトコード分析の複雑さ: 未検証コントラクトでは、JUMPDEST、スタック操作、ストレージアクセスを手動で追跡する必要があります。
5. トラップの原因
EVM バイトコードは低レベルの表現であり、Solidity ソースコードの意味情報を持ちません。EVM オペコード、ABI エンコーディング、および Solidity コンパイラが生成するコードパターンを理解する必要があります。
6. 解決方法
ツールを使用して分析を補助します:
cast selectorsですべての関数セレクターをリストアップcast storageでストレージスロットを読み取り- Python スクリプトで dispatch table と関数本体を解析
- revert 文字列(バイトコード末尾に格納され、手がかりを提供)に注目
7. 技術ポイント
| ポイント | 説明 |
|---|---|
| EVM バイトコード分析 | dispatch table、関数セレクター、JUMPDEST 構造の理解 |
| 関数ディスパッチ | Solidity はバイナリサーチ + 関数セレクターのディスパッチパターンを使用 |
| リバースエンジニアリング | バイトコードから Solidity ソースコードロジックを導出 |
| cast ツール | cast code, cast selectors, cast 4byte, cast storage |