Share Code lấy mã 2FA giống 2fa.live

2FA hay còn gọi là xác minh 2 bước giúp bạn bảo mật tài khoản Facebook hơn. Khi nhập Password đăng nhập Facebook xong, bạn cần phải cung cấp thêm mã 6 số ngẫu nhiên được cung cấp bởi trình tạo mã 2FA. Tuy nhiên nếu bạn không có điện thoại, bạn vẫn có thể tự làm cho mình trang Web lấy mã 2FA. Dưới đây là source  Code lấy mã 2FA giống 2fa.live. Cách thực hiện như sau:

Share Code lấy mã 2FA giống 2fa.live

Bộ source code dưới đây bạn có thể dùng cài xampp để chạy php trên Windows hoặc upload lên hosting.

Tạo File tên GoogleAuthenticator.php với nội dung

<?php

class PHPGangsta_GoogleAuthenticator
{
    protected $_codeLength = 6;

    
    public function createSecret($secretLength = 16)
    {
        $validChars = $this->_getBase32LookupTable();

        
        if ($secretLength < 16 || $secretLength > 128) {
            throw new Exception('Bad secret length');
        }
        $secret = '';
        $rnd = false;
        if (function_exists('random_bytes')) {
            $rnd = random_bytes($secretLength);
        } elseif (function_exists('mcrypt_create_iv')) {
            $rnd = mcrypt_create_iv($secretLength, MCRYPT_DEV_URANDOM);
        } elseif (function_exists('openssl_random_pseudo_bytes')) {
            $rnd = openssl_random_pseudo_bytes($secretLength, $cryptoStrong);
            if (!$cryptoStrong) {
                $rnd = false;
            }
        }
        if ($rnd !== false) {
            for ($i = 0; $i < $secretLength; ++$i) {
                $secret .= $validChars[ord($rnd[$i]) & 31];
            }
        } else {
            throw new Exception('No source of secure random');
        }

        return $secret;
    }

  
    public function getCode($secret, $timeSlice = null)
    {
        if ($timeSlice === null) {
            $timeSlice = floor(time() / 30);
        }

        $secretkey = $this->_base32Decode($secret);

        $time = chr(0).chr(0).chr(0).chr(0).pack('N*', $timeSlice);
        
        $hm = hash_hmac('SHA1', $time, $secretkey, true);
        
        $offset = ord(substr($hm, -1)) & 0x0F;
        
        $hashpart = substr($hm, $offset, 4);

        $value = unpack('N', $hashpart);
        $value = $value[1];
        $value = $value & 0x7FFFFFFF;

        $modulo = pow(10, $this->_codeLength);

        return str_pad($value % $modulo, $this->_codeLength, '0', STR_PAD_LEFT);
    }

    
    public function setCodeLength($length)
    {
        $this->_codeLength = $length;

        return $this;
    }

    
    protected function _base32Decode($secret)
    {
        if (empty($secret)) {
            return '';
        }

        $base32chars = $this->_getBase32LookupTable();
        $base32charsFlipped = array_flip($base32chars);

        $paddingCharCount = substr_count($secret, $base32chars[32]);
        $allowedValues = array(6, 4, 3, 1, 0);
        if (!in_array($paddingCharCount, $allowedValues)) {
            return false;
        }
        for ($i = 0; $i < 4; ++$i) {
            if ($paddingCharCount == $allowedValues[$i] &&
                substr($secret, -($allowedValues[$i])) != str_repeat($base32chars[32], $allowedValues[$i])) {
                return false;
            }
        }
        $secret = str_replace('=', '', $secret);
        $secret = str_split($secret);
        $binaryString = '';
        for ($i = 0; $i < count($secret); $i = $i + 8) {
            $x = '';
            if (!in_array($secret[$i], $base32chars)) {
                return false;
            }
            for ($j = 0; $j < 8; ++$j) {
$x .= str_pad(base_convert(@$base32charsFlipped[@$secret[$i + $j]], 10, 2), 5, '0', STR_PAD_LEFT);
            }
            $eightBits = str_split($x, 8);
            for ($z = 0; $z < count($eightBits); ++$z) {
                $binaryString .= (($y = chr(base_convert($eightBits[$z], 2, 10))) || ord($y) == 48) ? $y : '';
            }
        }

        return $binaryString;
    }

    
    protected function _getBase32LookupTable()
    {
        return array(
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', //  7
            'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 15
            'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 23
            'Y', 'Z', '2', '3', '4', '5', '6', '7', // 31
            '=',  // padding char
        );
    }

   
    private function timingSafeEquals($safeString, $userString)
    {
        if (function_exists('hash_equals')) {
            return hash_equals($safeString, $userString);
        }
        $safeLen = strlen($safeString);
        $userLen = strlen($userString);

        if ($userLen != $safeLen) {
            return false;
        }

        $result = 0;

        for ($i = 0; $i < $userLen; ++$i) {
            $result |= (ord($safeString[$i]) ^ ord($userString[$i]));
        }

        
        return $result === 0;
    }
}

?>

Tạo file 2fa.php với nội dung:

<?php 

require_once 'GoogleAuthenticator.php';

if (isset($_GET['key']))
{
    $key = trim($_GET['key']);
    $ga = new PHPGangsta_GoogleAuthenticator();
    $code = $ga->getCode($key);
    $list = [
    "key"=>$key,
    "code"=>$code
    ];
    $daucatmoi = json_encode($list, JSON_PRETTY_PRINT);
    $memay = json_decode($daucatmoi, true);
    echo $memay['code'];
}
?>

Upload lên Hosting. Vậy là chúng ta có bộ source code lấy mã 2FA giống 2fa.live.

Kích hoạt 2FA trên Facebook lấy mã bí mật

Bạn truy cập vào link bật 2FA cho ứng dụng tại: https://www.facebook.com/security/2fac/settings

Tìm đến chỗ Ứng dụng xác thực -> Thiết lập

Trên màn hình sẽ hiển thị mã QR và mã bí mật, bạn cần copy mã bí mật này lại vào notepad và lưu trên máy tính. Mã bí mật này dùng để lấy mã 2FA của Facebook

Bây giờ ta có mã bí mật là: MM5B7S2J605NE4CSXXXXXXXXX (hãy xóa các dấu cách đi nhé).

Bây giờ để lấy 2FA chúng ta làm như sau:

Nhập mã bí mật phía sau dấu =. Ví dụ: https://domain.com/2fa.php?key=mã-bí-mật (Thay domain thành tên miền của bạn)

Ví dụ: https://domain.com/2fa.php?key=MM5B7S2J605NE4CSXXXXXXXXX

Dãy số bên dưới là mã 2FA để bạn xác thực với Facebook.

Nếu ai chưa hiểu thì comment bên dưới, mai mình sẽ hướng dẫn chi tiết bằng hình ảnh từng bước một

Đánh giá post
Exit mobile version