前言 昨天发了一篇,tx.origin、msg.sender有什么不一样 ,被认为太水了,所以把tx.origin 攻击的代码实现一遍,让大家有个清晰的认识。 其实前面的不一样是今天可以这么干的基础。 实现的过程有参考:Unboxing tx.origin. Rune Token case (adrianhetman.com) 原理 从被攻击的代码讲起: contract TxUserWallet is DSTest { handle proprietor; constructor() { proprietor = msg.sender; //emit log_named_address(“proprietor”, proprietor); } perform transferTo(handle payable dest, uint256 quantity) public payable { emit log_named_address(“tx.origin”, tx.origin); emit log_named_address(“proprietor”, proprietor); require(tx.origin == proprietor); //** 重点 ** dest.name{worth: quantity}(“”); } } Enter…

Read More