Авторизация в 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 он имел ввиду смотреть скрипты на сайте стима. Там все есть.