Cùng 2q chia sẻ mã nguồn để có thể có mã xác thực hai yếu tố giống như trang 2fa.live vào năm 2024.
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'];
}
?>
Đăng tải lên Hosting. 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
Hướng dẫn chi tiết bằng hình ảnh:
Mình sẽ tạo một bài hướng dẫn chi tiết bằng hình ảnh, bao gồm các bước sau:
- Tìm mã bí mật: Giải thích cách tìm mã bí mật trong cài đặt bảo mật của tài khoản.
- Truy cập trang web lấy mã 2FA: Hướng dẫn cách truy cập vào trang web lấy mã 2FA và nhập mã bí mật vào ô tương ứng.
- Sao chép mã 2FA: Chỉ ra vị trí của mã 2FA sau khi nhập mã bí mật và hướng dẫn cách sao chép mã.
- Dán mã 2FA vào Facebook: Hướng dẫn cách dán mã 2FA đã sao chép vào ô xác thực trên Facebook.
Nội dung bổ sung:
- Giải thích về 2FA: Nên giải thích ngắn gọn về 2FA để người dùng hiểu rõ hơn về tầm quan trọng của việc bảo mật tài khoản bằng 2FA.
- Các phương pháp xác thực 2FA khác: Ngoài việc sử dụng mã bí mật, bạn có thể giới thiệu thêm các phương pháp xác thực 2FA khác như xác thực bằng SMS, xác thực bằng ứng dụng, vân tay, khuôn mặt,…
- Cách khôi phục tài khoản khi mất mã 2FA: Hướng dẫn người dùng cách khôi phục tài khoản trong trường hợp quên hoặc mất mã 2FA.
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
- 2fa.live
- code 2fa.live
- source code 2fa.live
- fake code 2fa.live
- code lấy mã 2fa