Phalconは、複雑なトランザクションの分析効率を大幅に向上させることができる強力な機能であるトランザクションのデバッグをサポートしています。以下では、この機能を紹介するために、Eulerプロトコルの悪用のトランザクションを使用します。
このトランザクションへのリンクはこちらです: https://phalcon.blocksec.com/explorer/tx/eth/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d
デバッグモードへの入り方
デバッグモードに入るには2つの方法があります。1つ目は、呼び出しフロービューの特定の行からデバッグモードに入ること、2つ目は、デバッグボタンをクリックすることです。
方法I:実行トレース経由
PhalconのInvocation Flowは、ユーザーが悪用されたトランザクション全体像を把握し、潜在的な悪用箇所を特定できるビューを提供します。これは、トランザクションに多数の外部呼び出しやイベントが含まれている場合に役立ちます。 トランザクション

Eulerプロトコルの悪用の場合、ハックトランザクションは、Aaveからのフラッシュローン借り入れ、EulerプロトコルへのDaiの預け入れなど、多くのステップで構成されています。しかし、ステップの1つで、悪用者はdonateToReserves()を呼び出してEulerプロトコルに巨額の資金を「寄付」しましたが、これは注意が必要です。この場合、デバッグアイコンをクリックすることで、このステップから直接トランザクションをデバッグできます。
方法II:デバッグボタン経由
デバッグモードに入るもう1つの方法は、右上隅にあるデバッグボタンをクリックすることです。
デバッグビューのレイアウト
デバッグモードに入ると、以下の画面が表示されます。

この画面には5つのパネルがあり、それぞれ以下の通りです。
- 呼び出しトレースパネル: 外部呼び出しとイベントのトレースを表示します。
- ソースコードパネル: コントラクトのソースコードと、関数の呼び出しサイトを参照している現在の行(ハイライト表示)を提供します。
- デバッグコンソール: 呼び出しレベルのシングルステップデバッグコンソールです。
- デバッグトレースパネル: 内部呼び出しと外部呼び出しの組み合わせによる、現在のコントラクトのコールスタックを表示します。
- パラメータと戻り値パネル: 呼び出しパラメータと戻り値を表示します。
ソースコードパネルにコードが表示されない場合があります。これは、パネルがデフォルトで関数の呼び出しサイトを表示するためです。ハッキングコントラクトが検証されていない(ソースコードが公開されていない)ため、ソースコードを表示できません。
eDaiコントラクトは検証されているため、ステップインしてdonateToReserves()の具体的な実装を確認できます。ステップインをクリックすると、現在の行はeDaiコントラクト内の呼び出しサイトになります。これはプロキシコントラクトであり、コードは以下の通りです。

再度ステップインすると、donateToReserves()の具体的な実装を確認できます。

デバッグコンソールの使い方
デバッグコンソールは、内部関数呼び出しを含む詳細な呼び出しトレースを理解するのに役立ちます(行の先頭にあるJumpは、それが内部呼び出しであることを示します)。呼び出しトレースパネルには内部呼び出しトレースがないことに注意してください。

詳細な実行を移動するために、Phalconはデバッグコンソールに4つのボタンを提供しており、次へと前へは2つの色でわずかに異なるロジックを持っています。
- 次へ(赤ボタン):コールトレース全体で次の呼び出しサイトに移動します。
- 次へ(青ボタン):現在の関数の次の呼び出しサイトに移動します。
- 前へ(赤ボタン):コールトレース全体で前の呼び出しサイトに移動します。
- 前へ(青ボタン):現在の関数の前の呼び出しサイトに移動します。
- ステップイン:呼び出し先関数に移動します。
- ステップアウト:現在の関数の呼び出しサイトに戻ります。
例えば、次へボタンをクリックしてdonateToReserves()の実装を分析できます。ハッカーが1億eDAIを寄付したことがわかり、eDAIがdDAIより少なくなり、清算対象となったことがわかります。したがって、根本原因はdonateToReserves()に清算対象となるための流動性チェックが欠けていたことであり、悪用者は自身を清算して3800万eDAIを引き出しました。

デバッグビューの共有
トランザクションのデバッグは、URLを介して直接共有できます。このURLにはトレースの行番号が含まれています。他の人がリンクを開くと、同じデバッグビューが表示されます。これは、分析結果を他の人と共有したい場合に役立ちます。チームメンバーはこれを使用して共同で分析し、議論することができます!
要約すると、Phalcon Debugeを使用してハックトランザクションを分析する典型的なワークフローは次のとおりです。
- Invocation Flowで潜在的な問題を特定し、そこからデバッグを開始します。
- ソースコードをデバッグし、内部呼び出しのパラメータと戻り値を確認します。
- 分析ビューをチームメンバー(または公開読者)と共有して共同作業を行います。
その他の機能
Phalcon Debugには、効率を向上させるための多くの機能があります。
- 以下のスイッチをオンにすると、呼び出しトレースビューで完全なパラメータを表示できます。

- 外部呼び出しの場合、「Rawdata」をクリックすると、生の呼び出しパラメータを確認できます。

BlockSecについてさらに詳しく:ウェブサイト | ドキュメント | Twitter | Medium | TGグループ



