pragma solidity ^0.4.18;

contract Reentrancy {

  mapping(address => uint) public balances;

  function withdraw(uint _amount) public {
    if(balances[msg.sender] >= _amount) {
      if(msg.sender.call.value(_amount)()) { // ==> Khai thác lỗ hổng Reentrancy tại đây: rút tiền khỏi tài khoản ngân hàng
        _amount;
      }
      balances[msg.sender] -= _amount; // ==> Trừ số tiền đã rút trong tài khoản. Nếu khai thác lỗi trên thành công, hàm này sẽ không bao giờ được thực thi.
    }
  }
}