Drained MEV Bot: No-Auth Transfers and Unsafe msg.sender.call

BSC • Address: 0xAD94…0449

We reverse-engineered a drained MEV bot on BSC using EVMDecompiler and found two fatal flaws hidden in bytecode (no published source):

Decompiled fragments

function d3MMSwapCallback(address _token, uint256 _amount, bytes calldata) external {
    IERC20(_token).transfer(msg.sender, _amount);
}

function swapX2YCallback(uint256 amountX, uint256, bytes calldata data) external {
    require(amountX <= 0 || amountX == 0);
    (bool success, bytes memory result) = msg.sender.call{value: amountX}("");
    require(success, "SwapX2Y: ERC20 operation did not succeed");
}

function swapCallback(uint256 amount0, uint256 amount1, bytes calldata data) external override {
    _swapCallback(msg.sender, amount0, amount1, data);
}

Why this is fatal

Safer patterns

Analysis performed from decompiled bytecode; function names reconstructed for clarity.