Авторизация в Steam с помощью POST-GET



  • При взаимодействии со стимом стоит задача в виде реализации работы на POST-GET запросах. Проблема возникла при попытке авторизации в существующий аккаунт. Оказалось, что пароль, перед отправкой в форму запроса, шифруется с помощью алгоритма RSA, и затем уже в зашифрованном виде передается в форму для запроса. Отследил запросы, первым идет POST "https://steamcommunity.com/login/getrsakey/" И возвращает следующее(на данный момент не имеет значения то, что мы отправляли в нашем запросе): Код:

        {
            "success":true,
            "publickey_mod":"/* publickey_mod */",
            "publickey_exp":"010001",
            "timestamp":"435743550000",
            "token_gid":"/*  тут token_gid */"
        }
    

    Для RSA нам требуются 2 значения: publickey_mod и publickey_exp. В полученном виде работать с ними не удается, так как их нужно привести к base64. После приведения к base64 и создания ключа, удалось получить в зашифрованном виде сам пароль. Запрос с авторизацией("https://steamcommunity.com/login/dologin/"):

    Form Data:

        donotcache: 1577689139522
        password: /* crypted pass */
        username: username
        twofactorcode:
        emailauth:
        loginfriendlyname:
        captchagid: -1
        captcha_text:
        emailsteamid:
        rsatimestamp: 439344650000
        remember_login: false
    

    Как итог, в ответе получают ошибку с сообщением о неудачном входе(неправильный пароль или имя пользователя). В чем может быть ошибка, не знаю. Вот еще ниже проложу реализацию шифрования на NodeJS(Для тестов, брал из консоли полученный пароль и пытался авторизоваться):

    const RSA = require('node-rsa');
    var key = new RSA();
    key.setOptions({encryptionScheme: ''});
    key.importKey({
        n: Buffer.from('/* Здесь publickey_mod  */', 'hex'),
        e: Buffer.from('010001', 'hex')
    }, 'components-public');
    var test = 'hello';
    var crypt = key.encrypt(test, 'base64');
    console.log(crypt);
    


  • @truumm said in Авторизация в Steam с помощью POST-GET:

    При взаимодействии со стимом стоит задача в виде реализации работы на POST-GET запросах. Проблема возникла при попытке авторизации в существующий аккаунт. Оказалось, что пароль, перед отправкой в форму запроса, шифруется с помощью алгоритма RSA, и затем уже в зашифрованном виде передается в форму для запроса. Отследил запросы, первым идет POST "https://steamcommunity.com/login/getrsakey/" И возвращает следующее(на данный момент не имеет значения то, что мы отправляли в нашем запросе): Код:

        {
            "success":true,
            "publickey_mod":"/* publickey_mod */",
            "publickey_exp":"010001",
            "timestamp":"435743550000",
            "token_gid":"/*  тут token_gid */"
        }
    

    Для RSA нам требуются 2 значения: publickey_mod и publickey_exp. В полученном виде работать с ними не удается, так как их нужно привести к base64. После приведения к base64 и создания ключа, удалось получить в зашифрованном виде сам пароль. Запрос с авторизацией("https://steamcommunity.com/login/dologin/"):

    Form Data:

        donotcache: 1577689139522
        password: /* crypted pass */
        username: username
        twofactorcode:
        emailauth:
        loginfriendlyname:
        captchagid: -1
        captcha_text:
        emailsteamid:
        rsatimestamp: 439344650000
        remember_login: false
    

    Как итог, в ответе получают ошибку с сообщением о неудачном входе(неправильный пароль или имя пользователя). В чем может быть ошибка, не знаю. Вот еще ниже проложу реализацию шифрования на NodeJS(Для тестов, брал из консоли полученный пароль и пытался авторизоваться):

    const RSA = require('node-rsa');
    var key = new RSA();
    key.setOptions({encryptionScheme: ''});
    key.importKey({
        n: Buffer.from('/* Здесь publickey_mod  */', 'hex'),
        e: Buffer.from('010001', 'hex')
    }, 'components-public');
    var test = 'hello';
    var crypt = key.encrypt(test, 'base64');
    console.log(crypt);
    

    rsa можно использовать без ноды, смотрите скрипты на сайте



  • @Fox Пытался найти подобное тут. Но так и не смог. Не подскажите, где именно использовалось rsa-шифрование?



  • @truumm он имел ввиду смотреть скрипты на сайте стима. Там все есть.


Log in to reply