1. Molen13.03.2025 в 04:22от
  2. D1zo13.03.2025 в 03:06от
Загрузка...

C++. Steam авторизация.

Тема в разделе "С/С++/Pascal/Delphi", создана пользователем DoomAngelBlade, 09.07.2015.

Метки:
  1. DoomAngelBlade

    DoomAngelBlade

    Статус:
    Оффлайн
    Регистрация:
    23.09.12
    Сообщения:
    11
    Репутация:
    8 +/-
    Уже неделю долбимся над проблемой аутентификации в стиме.
    Итак. Аутентификация происходит следующим образом:
    1. На Steam посылается запрос на генерацию ключей RSA и других данных.
    2. Просиходит кодировка пароля.
    3. Отсылаются закодированный пароль, логин и другие данные. Steam расшифровывает пароль и логинит человека, если все сходится.
    Вот что у нас получилось и НЕ работает:
    С++ пост запрос:

    crypted_pass->LoadFromFile("C:\\Lol\\file.txt");
    LoginData1->Add("&password="+crypted_pass->Strings[0]);
    LoginData1->Add("&username="+login);
    LoginData1->Add("&twofactorcode=");
    LoginData1->Add("&emailauth=");
    LoginData1->Add("&loginfriendlyname=");
    LoginData1->Add("&captchagid=");
    LoginData1->Add("&captcha_text=");
    LoginData1->Add("&emailsteamid=");
    LoginData1->Add("&rsatimestamp="+rsatimestamp);
    LoginData1->Add("&remember_login=false");
    Memo4->Lines->Add(Login->Post("https://steamcommunity.com/login/dologin/",LoginData1));

    Кодирование мы сделали, точнее СЛИЗАЛИ с видео об RSA на С#. Мы поставили запуск программы в коде С++.
    Перед тем как отправлять ПОСТ запрос - в Файле содержится пароль. Оно считывает, кодирует, записывает в файл file.txt .

    Кодировка:
    НАПИСАНА НА С#.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Security.Cryptography;

    namespace RSA
    {
    public class RSA
    {
    private byte[] _exponent;
    private byte[] _modulus;

    public string Exponent
    {
    set
    {
    _exponent = hexToBytes(value);
    }
    }

    public string Modulus
    {
    set
    {
    _modulus = hexToBytes(value);
    }
    }

    public string Encrypt(string data)
    {

    string encrypted;
    byte[] byteData = Encoding.ASCII.GetBytes(data);

    var parameters = new RSAParameters();
    var provider = new RSACryptoServiceProvider();

    parameters.Exponent = _exponent;
    parameters.Modulus = _modulus;
    provider.ImportParameters(parameters);


    return Convert.ToBase64String(provider.Encrypt(byteData, false)).ToString();

    }


    private byte[] hexToBytes(string hex)
    {
    byte[] arr = new byte[hex.Length >> 1];

    for (int i = 0; i < hex.Length >> 1; i++)
    {
    arr = (byte)((getHexVal(hex[i << 1]) << 4) + (getHexVal(hex[(i << 1) + 1])));
    }
    return arr;

    }

    private int getHexVal(char hex)
    {
    int val = (int)hex;
    return val - (val < 58 ? 48 : 55);
    }
    }
    }
    Результат - А ничего не выходит.
    Судя по всему - RSA.
    Просим помощи.

    Если у кого-либо есть БИБЛИОТЕКА на ЛЮБОМ языке программирования для шифрования кода методом RSA, то будем благодарны.
     
    Последнее редактирование: 09.07.2015
  2. sPHP

    sPHP

    Статус:
    Оффлайн
    Регистрация:
    24.06.14
    Сообщения:
    58
    Репутация:
    4 +/-
    //---------------------------------------------------------------------------
    int __fastcall TForm1::GetNumChar(char a)
    {
    for (int i = 0; i < 256; i++) {
    if((char)i==a){
    return i;
    }
    }
    }
    //---------------------------------------------------------------------------
    char __fastcall TForm1::GetCharNum(int a)
    {
    for (int i = 0; i < 256; i++) {
    if(i==a){
    return (char)i;
    }
    }
    }
    //---------------------------------------------------------------------------

    About немного ССЫЛКа
    Исходники
    Базовая реализация
    [​IMG]