Авторизация Steam
Необходима авторизация Steam без OpenId и библиотеки SteamKit2 Вроде все бы ничего,но что-то не так либо с шифрованием ,либо с куками
Скрипты Steam:
Скрипт шифрования(https://steamcommunity-a.akamaihd.net/public/shared/javascript/crypto/rsa.js)
Вспомогательный скрипт(https://steamcommunity-a.akamaihd.net/public/shared/javascript/crypto/jsbn.js)
Основной скрипт (https://steamcommunity-a.akamaihd.net/public/shared/javascript/login.js?v=dlXLXZHEdG_R&l=russian)
Вызывается все в основном скрипте:
var form = this.m_$LogonForm[0];
var pubKey = RSA.getPublicKey(results.publickey_mod, results.publickey_exp);
var username = this.m_strUsernameCanonical;
var password = form.elements['password'].value;
password = password.replace(/[^\x00-\x7F]/g, ''); // remove non-standard-ASCII characters
var encryptedPassword = RSA.encrypt(password, pubKey);
var rgParameters = {
password: encryptedPassword,
username: username,
twofactorcode: authCode,
emailauth: form.elements['emailauth'] ? form.elements['emailauth'].value : '',
loginfriendlyname: form.elements['loginfriendlyname'] ? form.elements['loginfriendlyname'].value : '',
captchagid: this.m_gidCaptcha,
captcha_text: form.elements['captcha_text'] ? form.elements['captcha_text'].value : '',
emailsteamid: this.m_steamidEmailAuth,
rsatimestamp: results.timestamp,
remember_login: ( form.elements['remember_login'] && form.elements['remember_login'].checked ) ? 'true' : 'false'
};
Делаю 2 запроса:
1)На https://store.steampowered.com/login/getrsakey/
В ответ получаю:
publickey_exp: "010001"
publickey_mod: "d09d5d926b94ea86c6971459486ce59d76b2b4682ddfb7d8fae9d9c68733835ecebb8c6a2c7463dd237c17c06fcc689c081d358c12dec82a68b4cef3fffd4ba9cbe0ee7397ac73caa4b0814d4932c7c33e098d91213972dd8fdad4e5de57628cbbc707066cb18f42d04463e9fa15632a26e9c12db4b5d74c4f7d06ec6c48fcfbcd39b5d40380a956b134cbf8afd74a2f5c761d1e0b0194fa0d4b9d1d489f55fd94471762c59765a566d193234e300eb5072e2254172dfbda9b1989d1edf8edcd1ba918b6bd7e3d29e8c6ba3488c38faa18935db2337fd384cf6d13e038a924d7280ab02b3279dfefdae1bf14587e0f0b8233eb36aa7bbb2a7e76a4b7e6abd0a3"
success: true
timestamp: "..."
token_gid: "..."
2)На https://store.steampowered.com/login/dologin/
Код:
public class Get
{
static CookieContainer CookCont = new CookieContainer();
public static string GetResponse(string URL)
{
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(URL);
Request.CookieContainer = CookCont;
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
CookieCollection RespCook = new CookieCollection();
RespCook = Response.Cookies;
CookCont.Add(RespCook);
Stream Stream = Response.GetResponseStream();
StreamReader SR = new StreamReader(Stream);
string ResponStr = SR.ReadToEnd();
return ResponStr;
}
public static string PostResponce(string URL,string Content)
{
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(URL);
Request.CookieContainer = CookCont;
Request.Method = "POST";
byte[] ContentBA = System.Text.Encoding.UTF8.GetBytes(Content);
Request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
Request.ContentLength = ContentBA.Length;
Stream RequestStream = Request.GetRequestStream();
RequestStream.Write(ContentBA, 0, ContentBA.Length);
RequestStream.Close();
HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
CookieCollection RespCook = new CookieCollection();
RespCook = Response.Cookies;
CookCont.Add(RespCook);
string ResponseStr = "";
using (Stream ResponseStream = Response.GetResponseStream())
{
StreamReader reader = new StreamReader(ResponseStream);
ResponseStr = reader.ReadToEnd();
}
Response.Close();
return ResponseStr;
}
public static int CookiesCount()
{
return CookCont.Count;
}
}
public class Hex
{
public static string EncodeHexString(byte[] input)
{
return input.Aggregate(new StringBuilder(),(sb, v) => sb.Append(v.ToString("x2"))).ToString();
}
public static byte[] DecodeHexString(string hex)
{
int chars = hex.Length;
byte[] bytes = new byte[chars / 2];
for (int i = 0; i < chars; i += 2)
{
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
return bytes;
}
}
public static class Encryptor
{
public static string Encrypt(string publickey_mod, string publickey_exp, string message)
{
byte[] pass = Encoding.ASCII.GetBytes(message);
byte[] mod = Hex.DecodeHexString(publickey_mod);
byte[] exp = Hex.DecodeHexString(publickey_exp);
RSACryptoServiceProvider lRSA = new RSACryptoServiceProvider();
RSAParameters lRSAKeyInfo = new RSAParameters();
lRSAKeyInfo.Modulus = mod;
lRSAKeyInfo.Exponent = exp;
lRSA.ImportParameters(lRSAKeyInfo);
return Convert.ToBase64String(lRSA.Encrypt(pass, true));
}
}
class StartKeyClass
{
public string success { get; set; }
public string publickey_mod { get; set; }
public string publickey_exp { get; set; }
public string timestamp { get; set; }
public string token_gid { get; set; }
}
static void Main(string[] args)
{
Get.GetResponse("https://store.steampowered.com/");
Console.WriteLine(Get.CookiesCount());
Get.GetResponse("https://store.steampowered.com/login/?redir=&redir_ssl=1");
Console.WriteLine(Get.CookiesCount());
string epoch = Convert.ToString((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds).Replace(",", "");
string Login = "login";
string Password = "password";
string GetStartKey = Get.PostResponce("https://store.steampowered.com/login/getrsakey/", "donotcache=" + epoch + "&username=" + Login);
Console.WriteLine(Get.CookiesCount());
var GetStartKeyJson = JsonConvert.DeserializeObject<StartKeyClass>(GetStartKey);
string EncryptedPassword = Encryptor.Encrypt(GetStartKeyJson.publickey_mod, GetStartKeyJson.publickey_exp, Password);
Console.WriteLine(EncryptedPassword);
epoch = Convert.ToString((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds).Replace(",", "");
string s = "donotcache=" + epoch + "&password=" + EncryptedPassword + "&username=" + Login + "&twofactorcode=&emailauth=&loginfriendlyname=&captchagid=-1&captcha_text=&emailsteamid=&rsatimestamp=" + GetStartKeyJson.timestamp + "&remember_login=false";
Console.WriteLine(s);
string Dologin = Get.PostResponce("https://store.steampowered.com/login/dologin", s);
Console.WriteLine(Get.CookiesCount());
Console.WriteLine(Dologin);
}
Помогите разобраться с этим,не могу уснуть уже неделю.Заранее спасибо))