Wie man Phalcon Debug verwendet, um in eine Transaktion einzutauchen

Phalcon unterstützt das Debugging einer Transaktion, eine leistungsstarke Funktion, die die Effizienz der Analyse komplexer Transaktionen erheblich verbessern kann.

Wie man Phalcon Debug verwendet, um in eine Transaktion einzutauchen

Phalcon unterstützt das Debugging einer Transaktion, ein leistungsstarkes Feature, das die Effizienz der Analyse komplexer Transaktionen erheblich verbessern kann. Im Folgenden werden wir die Transaktion zur Ausnutzung des Euler-Protokolls verwenden, um dieses Feature zu veranschaulichen.

Klicken Sie auf den Link für diese Transaktion: https://phalcon.blocksec.com/explorer/tx/eth/0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d

So rufen Sie den Debug-Modus auf

Es gibt zwei verschiedene Möglichkeiten, den Debug-Modus aufzurufen. Die erste besteht darin, den Debug-Modus von einer bestimmten Zeile in der Aufruflaufzeitansicht aufzurufen, und die zweite besteht darin, auf die Schaltfläche Debug zu klicken.

Methode I: Über die Ausführungsspur

Der Aufruflaufzeit in Phalcon bietet eine Ansicht, die es Benutzern ermöglicht, ein vollständiges Bild der gehackten Transaktion zu erhalten und mögliche Ausbeutungsstellen zu identifizieren. Dies ist nützlich, wenn Hunderte von externen Aufrufen und Ereignissen in der Transaktion enthalten sind.

Zeile im Aufruflaufzeit auswählen, um den Debug-Modus zu öffnen

Im Falle der Ausnutzung des Euler-Protokolls besteht die gehackte Transaktion aus vielen Schritten, einschließlich Borrowing Flashloan from Aave, Depositing Dai into the Euler protocol usw. Aber in einem der Schritte rief der Ausnutzer donateToReserves() auf, um einen massiven Geldbetrag an das Euler-Protokoll zu "spenden", was unsere Wachsamkeit erfordert. In diesem Fall können wir die Transaktion direkt ab diesem Schritt debuggen, indem wir auf das Debug-Symbol klicken.

Methode II: Über die Debug-Schaltfläche

Eine weitere Möglichkeit, den Debug-Modus aufzurufen, besteht darin, auf die Schaltfläche Debug in der oberen rechten Ecke zu klicken.

Layout der Debug-Ansicht

Nach dem Aufruf des Debug-Modus sehen wir den folgenden Bildschirm.

Layout der Debug-Ansicht

Dieser Bildschirm hat fünf Bereiche, die wie folgt lauten.

  • Aufrufspur-Bereich: Zeigt die Spur von externen Aufrufen und Ereignissen.
  • Quellcode-Bereich: Stellt den Quellcode des Vertrags und die aktuelle Zeile (hervorgehoben) bereit, die sich auf die Aufrufstelle einer Funktion bezieht.
  • Debug-Konsole: Eine aufrufebenen-einzelne Schritt-Debug-Konsole.
  • Debug-Spur-Bereich: Zeigt den Aufrufstapel des aktuellen Vertrags mit einer Kombination aus internen und externen Aufrufen.
  • Parameter & Rückgabewerte-Bereich: Zeigt Aufrufparameter und Rückgabewerte an.

Manchmal wird im Quellcode-Bereich kein Code angezeigt. Dies liegt daran, dass der Bereich standardmäßig die Aufrufstelle der Funktion anzeigt. Da der Hacking-Vertrag nicht verifiziert ist (nicht Open Source), kann der Quellcode nicht angezeigt werden.

Der eDai-Vertrag ist verifiziert, daher können wir Step In verwenden, um die spezifische Implementierung von donateToReserves() anzuzeigen. Nach dem Klicken auf Step In wird die aktuelle Zeile zur Aufrufstelle innerhalb des eDai-Vertrags. Dies ist ein Proxy-Vertrag, und der Code wird wie folgt angezeigt.

Debug-Modus, wenn der Vertrag verifiziert ist

Nachdem wir erneut Step In geklickt haben, können wir endlich die konkrete Implementierung von donateToReserves() sehen.

Debuggen von donateToReserves()

Verwendung der Debug-Konsole

Die Debug-Konsole dient dazu, die detaillierte Aufrufspur zu verstehen, einschließlich des internen Funktionsaufrufs (Das Jump am Anfang einer Zeile bedeutet, dass dies ein interner Aufruf ist). Beachten Sie, dass der Aufrufspur-Bereich keine interne Aufrufspur hat.

Layout der Debug-Ansicht

Um zwischen den detaillierten Ausführungen zu navigieren, bietet Phalcon vier Schaltflächen auf der Debug-Konsole, und Next und Previous haben unter den beiden Farben leicht unterschiedliche Logiken.

  • Next (Rote Schaltfläche): Geht zur nächsten Aufrufstelle in der gesamten Aufrufspur.
  • Next (Blaue Schaltfläche): Geht zur nächsten Aufrufstelle der aktuellen Funktion.
  • Previous (Rote Schaltfläche): Geht zur vorherigen Aufrufstelle in der gesamten Aufrufspur.
  • Previous (Blaue Schaltfläche): Geht zur vorherigen Aufrufstelle der aktuellen Funktion.
  • Step In: Geht zur aufgerufenen Funktion.
  • Step Out: Kehrt zur Aufrufstelle der aktuellen Funktion zurück.

Zum Beispiel können wir auf die Schaltfläche Next klicken, um die Implementierung von donateToReserves() zu analysieren. Wir können feststellen, dass der Hacker 100 Millionen eDAI gespendet hat, wodurch der eDAI weniger als der dDAI war und für die Liquidation in Frage kam. Daher ist die Grundursache, dass donateToReserves() eine fehlende Liquiditätsprüfung für die berechtigte Liquidation aufweist und der Ausnutzer sich selbst liquidiert und 38 Millionen eDAI entnommen hat.

Grundursachen der Euler-Ausnutzung

Teilen der Debug-Ansicht

Das Debugging einer Transaktion kann direkt über eine URL geteilt werden, die die Zeilennummer der Spur enthält. Wenn andere den Link öffnen, wird dieselbe Debug-Ansicht angezeigt. Dies ist nützlich, wenn Sie Analyseergebnisse mit anderen teilen möchten. Teammitglieder können dies für die Zusammenarbeit, Analyse und gemeinsame Diskussion nutzen!

Zusammenfassend lässt sich sagen, dass der typische Workflow für die Verwendung von Phalcon Debug zur Analyse einer gehackten Transaktion wie folgt aussieht.

  • Finden Sie das mögliche Problem im Aufruflaufzeit und starten Sie dort das Debugging.
  • Debuggen Sie den Quellcode und überprüfen Sie die Parameter und Rückgabewerte von internen Aufrufen.
  • Teilen Sie die Ansicht Ihrer Analyse mit Teammitgliedern (oder öffentlichen Lesern) zur Zusammenarbeit.

Weitere Features

Phalcon Debug bietet viele Funktionen, um Ihre Effizienz zu verbessern.

  • Die Aufrufspur-Ansicht kann die vollständigen Parameter anzeigen, indem der folgende Schalter aktiviert wird.
Parameter-Schalter
  • Bei externen Aufrufen können Sie durch Klicken auf "Rawdata" die rohen Aufrufparameter anzeigen.

Erfahren Sie mehr über BlockSec: Website | Dokumentation | Twitter | Medium | TG-Gruppe

Sign up for the latest updates