Получение гугл аунтитификатора

Coleman

Новичок
Автор темы
12
0
Нужно сделать AHK которое при нажатии на клавишу будет получать тот самый код и вводить его
 

Kvisk

Известный
204
208
Какая-то левая прога... её нужно скачивать устанавливать... Фе, лучше так:

*так как залить эти файлы я сюда не могу вы создадите их сами*
Создаём файл и называем его GoogleAuthenticator.php, открываем через блокнот и записываем следующий код:
PHP:
<?php

/**
 * PHP Class for handling Google Authenticator 2-factor authentication.
 *
 * @author Michael Kliewe
 * @copyright 2012 Michael Kliewe
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
 *
 * @link http://www.phpgangsta.de/
 */
class PHPGangsta_GoogleAuthenticator
{
    protected $_codeLength = 6;
    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);
    }
 
    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
        );
    }

}
?>
Далее создаём второй файл и называем его index.php, открываем через блокнот и вставляем следующее:
PHP:
<?php
if(!$_GET['secret']){
    die("Не переданно значение секрета в GET параметре \"secret\"");
}
//проверяем наличие параметра и если его нет - ошибка

require_once 'GoogleAuthenticator.php'; //подключаем класс для работы с гугл аутентификатором

$ga = new PHPGangsta_GoogleAuthenticator(); //задаем переменной класс
$code = $ga->getCode($_GET['secret']); //в переменную code записываем шести значный код, который генерируется через класс


//следующие 2 строки не обязательны. Можно раз комментировать что-бы вместе с кодом выводилось время в секундах, через сколько код перестанет действовать
//если включить - будет так: код секунды. Например: 123456 20

$epoch = round(microtime(true));
$countDown = 30 - ($epoch % 30);

if(isset($countDown)){
    echo $code." ".$countDown;
}else{
    echo $code;
}
?>

После, закидываем их на наш бесплатный хостинг, далее дописываем к вашему основному адресу /index.php?secret=BLABLABLABALBA и получаем ваш гугл код и таймер с его сроком жизни, если таймер не нужен, можно в index.php закомментировать нижний код. BLABLABLA это ваш уникальный гугл ключ.

Вот так это будет выглядеть:
Безымянный.jpg

Если не хотите запариваться, можете взять уже готовый пример:
http://authenticator.zzz.com.ua/index.php?secret=BLABLABLABLA
Где вместо BLABLA ваш гугл ключ, который даёт вам сервер.

Теперь, просто через ахк скачиваем сайт и регулягкой проходимся
AutoHotKey:
authenticator := "MFJBLABLABLAU2ZS"
URLDownloadToFile, http://authenticator.zzz.com.ua/index.php?secret=%authenticator%, %A_Temp%\authenticator.txt
fileRead, code, %A_Temp%\authenticator.txt
RegExMatch(code, "(\d{6})\s(\d{1,2})", out)
out1 = 123456 ; Это ваш 6 значный временный код
out2 = 12 ; Это сколько секунд ещё он будет существовать


Надеюсь этот ответ многим поможет, так как когда я искал нормальный способ в ините нечего путного не было, единственное решение было переписать браузерное расширение. Если что способ мне рассказал Сёма Колотилов, спасибо ему большое. Моей заслуги тут нет ;)
 
Последнее редактирование:
  • Нравится
Реакции: Coleman и darksoor