PHP Steamlogin не будет показывать sessionID - PullRequest
0 голосов
/ 22 октября 2018

У меня есть сценарий, который я использовал в течение многих лет, и теперь вдруг он не будет работать так, как предполагалось.

Вот сценарий.

    define('php-steamlogin', true);
    require('main.php');
    $SteamLogin = new SteamLogin(array(
    'username' => 'XXXXX',
    'password' => 'XXX.XXX',
    'datapath' => dirname(__FILE__) //path to saving cache files
    ));

    if($SteamLogin->success){
    include_once("api/AuthFunctions.php");
    $SteamAuth = new SteamAuth;
    // $selsec = mysql_query("SELECT * FROM bots WHERE id='1' LIMIT 1");
    // $selsecnow = mysql_fetch_assoc($selsec);
    $authcode = $SteamAuth->GenerateSteamGuardCode('XXXXMr8jXXXXXXc5scljA='); // shared_secret
    $blank = '';
    $logindata = $SteamLogin->login($blank,$authcode);
    $login = array_values($logindata);

    $db = mysqli_connect('localhost', 'root', '', 'mydb');

    var_dump($logindata);

    echo $logindata['sessionId'];
    echo $logindata['cookies'];

Этодолжен показывать sessionid и cookie , и он всегда делал это правильно, но не больше.SessionID кажется NULL, и я не знаю, сделал ли Steam какое-то обновление или что могло вызвать это.

Это то, что var_dump($logindata); показывает мне.

array (3) {["steamid"] => string (17) "76561XXX1XX17XX8" ["sessionId"] => NULL ["cookies"] => string (286) "steamCountry = XX% 7C4cbd97aaffac4XXXXX92a3318ef; steamLoginS= 76561198113017978% 7C% 7CEF264F2DAA8BEDD0C76C5AD7F6C03B2440C0BC53; steamMachineAuth7656XXXXX3017978 = XXXXXXXEFF251E143FD8A3; steamRememberLogin = 76561XXXXX017978% 7C% 7C95c377d0ce2497XXXX8a2a0e14528896; "}

так почему-то sessionID = NULL, одна теория состоит в том, что это может быть потому, что это первый разЯ вхожу через это "устройство".Но это все равно должно работать, потому что steam не имеет никакого перезарядки при входе в аккаунт с нового устройства, только когда дело доходит до сделок, к которым этот скрипт не имеет никакого отношения.

Я что-то пропустил?Это мой код?Это пара?

Вы также можете посмотреть корыто main.php, если это будет интересно.

<?php
defined('php-steamlogin') or die('null');
require_once("lib/Math/BigInteger.php");
require_once("lib/Crypt/RSA.php");
class SteamLogin {
    public $error = false;
    public $success = false;
    private $config = array(
        'username' => '',
        'password' => '',
        'datapath' => ''
    );
    private $accountdata = array();
    public function __construct($config) {
        $this->config = $config;
        if ($this->config['username'] != '' && $this->config['password'] != '' && $this->config['datapath'] != '') {
            if (file_exists($this->config['datapath'] . '/logindata.json')) {
                $account = json_decode(file_get_contents($this->config['datapath'] . '/logindata.json'));
                $this->accountdata['steamid'] = ((isset($account->steamid)) ? $account->steamid : '');
            }
            $this->success = true;
        } else
            $this->error('Bad config!');
    }
    public function login($authcode = '', $twofactorcode = '') {
        $dologin = $this->getRSAkey();
        if ($dologin->publickey_mod && $dologin->publickey_exp && $dologin->timestamp) {
            $password = $this->config['password'];
            $rsa = new Crypt_RSA();
            $key = array('modulus' => new Math_BigInteger($dologin->publickey_mod, 16), 'publicExponent' => new Math_BigInteger($dologin->publickey_exp, 16));
            $rsa->loadKey($key, CRYPT_RSA_PUBLIC_FORMAT_RAW);
            $rsa->setPublicKey($key);
            $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
            $enc_password = base64_encode($rsa->encrypt($password));
            $login = $this->request('POST', 'https://steamcommunity.com/login/dologin/', array(
                'password' => $enc_password,
                'username' => $this->config['username'],
                'twofactorcode' => $twofactorcode,
                'emailauth' => $authcode,
                'loginfriendlyname' => '',
                'capatcha_text' => '',
                'emailsteamid' => ((isset($this->accountdata['steamid'])) ? $this->accountdata['steamid'] : ''),
                'rsatimestamp' => $dologin->timestamp,
                'remember_login' => 'true',
                'donotcache' => time()
            ));
            $login = json_decode($login);
            if ($login->success == false) {
                if (isset($login->emailsteamid) && $login->emailauth_needed == true) {
                    if ($authcode == '') {
                        file_put_contents($this->config['datapath'] . '/logindata.json', json_encode(array('steamid' => $login->emailsteamid)));
                        $this->error('Please enter AUTHCODE available in your e-mail inbox (domain: ' . $login->emaildomain . ').');
                    } else
                        $this->error('You enter bad authcode!');
                }else if ($login->requires_twofactor == true) {
                    if ($twofactorcode == '') {
                        $this->error('Please enter twofactorcode (mobile auth).');
                    } else
                        $this->error('You enter bad twofactorcode!');
                }
            }else {
                preg_match_all('#g_sessionID\\s\=\\s\"(.*?)\"\;#si', $this->view('http://steamcommunity.com/id'), $matches);
                return array(
                    'steamid' => $login->transfer_parameters->steamid,
                    'sessionId' => $matches[1][0],
                    'cookies' => $this->cookiejarToString(file_get_contents($this->config['datapath'] . '/h2px74b0c98dn2m11.txt'))
                );
            }
            return $login;
        } else
            $this->error('Bad RSA!');
        return $dologin;
    }
    public function view($url) {
        return $this->request('POST', $url);
    }
    private function request($type, $url, $data = array()) {
        $c = curl_init();
        curl_setopt($c, CURLOPT_HEADER, false);
        curl_setopt($c, CURLOPT_NOBODY, false);
        curl_setopt($c, CURLOPT_URL, $url);
        curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
        curl_setopt($c, CURLOPT_COOKIESESSION, false);
        curl_setopt($c, CURLOPT_COOKIEJAR, $this->config['datapath'] . '/h2px74b0c98dn2m11.txt');
        curl_setopt($c, CURLOPT_COOKIEFILE, $this->config['datapath'] . '/h2px74b0c98dn2m11.txt');
        curl_setopt($c, CURLOPT_POST, 1);
        curl_setopt($c, CURLOPT_POSTFIELDS, http_build_query($data));
        curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($c, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
        curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($c, CURLOPT_CUSTOMREQUEST, strtoupper($type));
        $return = curl_exec($c);
        curl_close($c);
        return $return;
    }
    private function getRSAkey() {
        return json_decode($this->request('POST', 'https://steamcommunity.com/login/getrsakey/', array(
                    'username' => $this->config['username'],
                    'donotcache' => time()
        )));
    }
    private function cookiejarToString($string) {
        $cookieString = '';
        $lines = explode("\n", $string);
        foreach ($lines as $line) {
            if (isset($line[0]) && substr_count($line, "\t") == 6) {
                $tokens = explode("\t", $line);
                $tokens = array_map('trim', $tokens);
                $cookieString .= $tokens[5] . '=' . $tokens[6] . '; ';
            }
        }
        return $cookieString;
    }
}
?>

Что я заметил, так это то, что в функции getRSAKey() используется ссылкаhttps://steamcommunity.com/login/getrsakey/, и когда я направляюсь к этой ссылке, она отображает "success: false".

Я не знаю, связано ли это с этим, но я подумал, что на это можно было бы указать.

...