private string playsafeLogin(string id, string pass, string skey) { try { string response = this.DownloadString("https://tw.newlogin.beanfun.com/login/playsafe_form.aspx?skey=" + skey); Regex regex = new Regex("id=\"__VIEWSTATE\" value=\"(.*)\" />"); if (!regex.IsMatch(response)) { this.errmsg = "LoginNoViewstate"; return(null); } string viewstate = regex.Match(response).Groups[1].Value; regex = new Regex("id=\"__EVENTVALIDATION\" value=\"(.*)\" />"); if (!regex.IsMatch(response)) { this.errmsg = "LoginNoEventvalidation"; return(null); } string eventvalidation = regex.Match(response).Groups[1].Value; response = this.DownloadString("https://tw.newlogin.beanfun.com/generic_handlers/get_security_otp.ashx?d=" + GetCurrentTime(1)); regex = new Regex("<playsafe_otp>(\\w+)</playsafe_otp>"); if (!regex.IsMatch(response)) { this.errmsg = "LoginNoSotp"; return(null); } string sotp = regex.Match(response).Groups[1].Value; PlaySafe ps = null; try { ps = new PlaySafe(); } catch (Exception e) { this.errmsg = "LoginNoPSDriver"; return(null); } var readername = ps.GetReader(); if (readername == null) { this.errmsg = "LoginNoReaderName"; return(null); } if (ps.cardType == null) { this.errmsg = "LoginNoCardType"; return(null); } string original = null; string signature = null; if (ps.cardType == "F") { ps.cardid = ps.GetPublicCN(readername); if (ps.cardid == null) { this.errmsg = "LoginNoCardId"; return(null); } var opinfo = ps.GetOPInfo(readername, pass); if (opinfo == null) { this.errmsg = "LoginNoOpInfo"; return(null); } original = ps.cardType + "~" + sotp + "~" + id + "~" + opinfo; signature = ps.EncryptData(readername, pass, original); if (signature == null) { this.errmsg = "LoginNoEncryptedData"; return(null); } } else if (ps.cardType == "G") { original = ps.cardType + "~" + sotp + "~" + id + "~"; signature = ps.FSCAPISign(pass, original); } NameValueCollection payload = new NameValueCollection(); payload.Add("__EVENTTARGET", ""); payload.Add("__EVENTARGUMENT", ""); payload.Add("__VIEWSTATE", viewstate); payload.Add("__EVENTVALIDATION", eventvalidation); payload.Add("card_check_id", ps.cardid); payload.Add("original", original); payload.Add("signature", signature); payload.Add("serverotp", sotp); payload.Add("t_AccountID", id); payload.Add("t_Password", pass); payload.Add("btn_login", "Login"); response = Encoding.UTF8.GetString(this.UploadValues("https://tw.newlogin.beanfun.com/login/playsafe_form.aspx?skey=" + skey, payload)); regex = new Regex("akey=(.*)"); if (!regex.IsMatch(this.ResponseUri.ToString())) { this.errmsg = "LoginNoAkey"; return(null); } return(ps.cardid + " " + regex.Match(this.ResponseUri.ToString()).Groups[1].Value); } catch (Exception e) { this.errmsg = "LoginUnknown\n\n" + e.Message + "\n" + e.StackTrace; return(null); } }
private string playsafeLogin(string id, string pass, string skey) { try { string response = this.DownloadString("https://tw.newlogin.beanfun.com/login/playsafe_form.aspx?skey=" + skey); Regex regex = new Regex("id=\"__VIEWSTATE\" value=\"(.*)\" />"); if (!regex.IsMatch(response)) { this.errmsg = "LoginNoViewstate"; return null; } string viewstate = regex.Match(response).Groups[1].Value; regex = new Regex("id=\"__EVENTVALIDATION\" value=\"(.*)\" />"); if (!regex.IsMatch(response)) { this.errmsg = "LoginNoEventvalidation"; return null; } string eventvalidation = regex.Match(response).Groups[1].Value; response = this.DownloadString("https://tw.newlogin.beanfun.com/generic_handlers/get_security_otp.ashx?d=" + GetCurrentTime(1)); regex = new Regex("<playsafe_otp>(\\w+)</playsafe_otp>"); if (!regex.IsMatch(response)) { this.errmsg = "LoginNoSotp"; return null; } string sotp = regex.Match(response).Groups[1].Value; PlaySafe ps = new PlaySafe(); var readername = ps.GetReader(); if (readername == null) { this.errmsg = "LoginNoReaderName"; return null; } if (ps.cardType == null) { this.errmsg = "LoginNoCardType"; return null; } string original = null; string signature = null; if (ps.cardType == "F") { ps.cardid = ps.GetPublicCN(readername); if (ps.cardid == null) { this.errmsg = "LoginNoCardId"; return null; } var opinfo = ps.GetOPInfo(readername, pass); if (opinfo == null) { this.errmsg = "LoginNoOpInfo"; return null; } original = ps.cardType + "~" + sotp + "~" + id + "~" + opinfo; signature = ps.EncryptData(readername, pass, original); if (signature == null) { this.errmsg = "LoginNoEncryptedData"; return null; } } else if (ps.cardType == "G") { original = ps.cardType + "~" + sotp + "~" + id + "~"; signature = ps.FSCAPISign(pass, original); } NameValueCollection payload = new NameValueCollection(); payload.Add("__EVENTTARGET", ""); payload.Add("__EVENTARGUMENT", ""); payload.Add("__VIEWSTATE", viewstate); payload.Add("__EVENTVALIDATION", eventvalidation); payload.Add("card_check_id", ps.cardid); payload.Add("original", original); payload.Add("signature", signature); payload.Add("serverotp", sotp); payload.Add("t_AccountID", id); payload.Add("t_Password", pass); payload.Add("btn_login", "Login"); response = Encoding.UTF8.GetString(this.UploadValues("https://tw.newlogin.beanfun.com/login/playsafe_form.aspx?skey=" + skey, payload)); regex = new Regex("akey=(.*)"); if (!regex.IsMatch(this.ResponseUri.ToString())) { this.errmsg = signature; return null; } return ps.cardid + " " + regex.Match(this.ResponseUri.ToString()).Groups[1].Value; } catch (Exception e) { this.errmsg = "LoginUnknown\n\n" + e.Message + "\n" + e.StackTrace; return null; } }