Ich habe mir die Liste der neuen Smart Contracts auf Etherscan angesehen, um den Nachmittag zu verbringen, und bin auf diese hier gestoßen:
https://etherscan.io/address/0x70bf9df6967dc96156e76cc43b928a7ef02e159a
Der Vertrag scheint ein einfaches Frage-und-Antwort-Spiel zu sein, aber mir ist aufgefallen, dass die ursprüngliche Antwort hier deutlich zu sehen ist:
https://etherscan.io/tx/0xb479a806fd83e528e635c285b7302a28f0119c4be90ed37232c385bb855f8584
Die Antwort lautet "Ein Telefon", und ich dachte, es würde schnell gestohlen werden, da ich nicht der einzige sein kann, der dies tut. Ich beschloss, es zu nehmen, den Besitzer zu kontaktieren und es in Sicherheit zu bringen. Ich habe einige Tests im TestNet durchgeführt, um zu sehen, ob alles funktioniert (Sie müssen 1 ETH senden, um eine Nachricht zu senden), und es lief gut. Dies ist die Adresse des Testvertrags. Sie können die Transaktionen überprüfen, um den Prozess zu sehen, dem ich folgen wollte:
https://ropsten.etherscan.io/address/0x69e0d22469f654467bcf5c021f3e2162df96e099
Wie Sie sehen können, lief alles gut, also entschied ich mich, es auf dem MainNet zu tun. Obwohl die Nachrichten und alle korrekt sind, hat es meine ETH gefressen und nichts ist passiert. Ich habe den Verlust des Ethers akzeptiert, aber ich frage mich, warum sollte es nicht funktionieren, obwohl es im TestNet funktioniert hat?
Ich habe einen Blogbeitrag geschrieben , um Ihr Missgeschick ausführlicher zu beschreiben. Folgendes ist passiert:
HiddenQuestionSender
Vertrag bereit, der Befehle weiterleitet .X_GAME
Vertrag mit dieser Transaktion um .HiddenQuestionSender
die Frage mit 0 Ether einrichten StartGame
und den Hash NewQuestion
mit dieser Transaktion ändern sollen . In den Anrufdaten sehen Sie die Frage, aber nicht die Antwort; aber am Ende ist es egal. Sie können auch den neuen gefälschten Hash finden: 0xaee11ed86334ac3afdac440921f36b90a937dfbc02f43b02a81b763b769fca4a
.StartGame
mit 1,03 Ether bei dieser Transaktion . Beachten Sie die TxReceipt Status: Success
.X_GAME
aufgeführt ist . Es ist das einzige dort und es ist zu spät, um Sie zu warnen.Für andere, die dies lesen, wäre es möglich gewesen, etwas Fischiges früher mit web3.eth.getStorageAt(X_GAME.address, slotIndex)
und zu erkennen:
1
heraus, dass questionSender
dies nicht ihre Adresse ist, sondern seltsamerweise die eines Smart Contracts:HiddenQuestionSender
2
heraus, dass responseHash
dies nicht übereinstimmtweb3.sha3(“A phonE”)
Sie hätten Ganache auch verwenden können, um --fork
vom Hauptnetz aus das Ergebnis Ihres eigenen Angriffs sicher zu testen .
Tut mir leid, dass du darauf hereingefallen bist!
NewQuestion
wurde gerufen, bevor Sie versuchten, den Äther zu nehmen.
Ich glaube, das ist die Transaktion, die es getan hat: https://www.etherchain.org/tx/f1df0e4113cdd8e864235ff2bbd472c98703794ae10e923cd51c8aea260f102a/parityTrace . Suchen Sie nach 0x3e3ee859, dem Funktionsselektor für NewQuestion(string,bytes32)
.
mariohm1311