private void LoginAccountOld() { switch (m_settings.Client) { case "W2BN": BncsPacket pck0x29 = new BncsPacket((byte)BncsPacketId.LogonResponse); pck0x29.Insert(m_clientToken); pck0x29.Insert(m_srvToken); pck0x29.InsertByteArray(OldAuth.DoubleHashPassword(m_settings.Password, m_clientToken, m_srvToken)); pck0x29.InsertCString(m_settings.Username); Send(pck0x29); break; case "STAR": case "SEXP": case "D2DV": case "D2XP": BncsPacket pck0x3a = new BncsPacket((byte)BncsPacketId.LogonResponse2); pck0x3a.Insert(m_clientToken); pck0x3a.Insert(m_srvToken); pck0x3a.InsertByteArray(OldAuth.DoubleHashPassword( m_settings.Password, m_clientToken, m_srvToken)); pck0x3a.InsertCString(m_settings.Username); Send(pck0x3a); break; default: throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, Strings.BnetClient_LoginAccountOld_ClientNotSupported_fmt, m_settings.Client)); } }
private async void LoginAccountOld() { switch (_settings.Client.ProductCode) { case "W2BN": BncsPacket pck0x29 = new BncsPacket(BncsPacketId.LogonResponse, _storage.Acquire()); pck0x29.InsertInt32(_clientToken); pck0x29.InsertInt32(_srvToken); pck0x29.InsertByteArray(OldAuth.DoubleHashPassword(_settings.Password, _clientToken, _srvToken)); pck0x29.InsertCString(_settings.Username); await pck0x29.SendAsync(_connection); break; case "STAR": case "SEXP": case "D2DV": case "D2XP": BncsPacket pck0x3a = new BncsPacket(BncsPacketId.LogonResponse2, _storage.Acquire()); pck0x3a.InsertInt32(_clientToken); pck0x3a.InsertInt32(_srvToken); pck0x3a.InsertByteArray(OldAuth.DoubleHashPassword(_settings.Password, _clientToken, _srvToken)); pck0x3a.InsertCString(_settings.Username); await pck0x3a.SendAsync(_connection); break; default: throw new NotSupportedException(string.Format("Client '{0}' is not supported with old-style account login.", _settings.Client.ProductCode)); } }
private void CreateAccountOld() { byte[] passwordHash = OldAuth.HashPassword(m_settings.Password); BncsPacket pck = new BncsPacket((byte)BncsPacketId.CreateAccount2); pck.InsertByteArray(passwordHash); pck.InsertCString(m_settings.Username); Send(pck); }
private void Send_SID_LOGONREALMEX(string a_sRealmTitle) { BncsPacket bncsPacket = new BncsPacket(62); byte[] b = OldAuth.DoubleHashPassword("password", this.g_iClientToken, this.g_iServerToken); bncsPacket.InsertInt32(this.g_iClientToken); bncsPacket.InsertByteArray(b); bncsPacket.InsertCString(a_sRealmTitle); this.SendPacket(bncsPacket.UnderlyingBuffer); }
private async void CreateAccountOld() { byte[] passwordHash = OldAuth.HashPassword(_settings.Password); BncsPacket pck = new BncsPacket(BncsPacketId.CreateAccount2, _storage.Acquire()); pck.InsertByteArray(passwordHash); pck.InsertCString(_settings.Username); await pck.SendAsync(_connection); }
private void Send_SID_LOGONRESPONSE() { byte[] b = new byte[0]; b = OldAuth.DoubleHashPassword(this.BnetInfo.BnetPassword, this.g_iClientToken, this.g_iServerToken); BncsPacket bncsPacket = new BncsPacket(58); bncsPacket.InsertInt32(this.g_iClientToken); bncsPacket.InsertInt32(this.g_iServerToken); bncsPacket.InsertByteArray(b); bncsPacket.InsertCString(this.BnetInfo.BnetUserName); this.SendPacket(bncsPacket.UnderlyingBuffer); }
/// <summary> /// Begins the connection to Battle.net. /// </summary> /// <returns><see langword="true" /> if the connection succeeded; otherwise <see langword="false" />.</returns> public override bool Connect() { BattleNetClientResources.RegisterClient(this); bool ok = base.Connect(); if (ok) { InitializeListenState(); CultureInfo ci = CultureInfo.CurrentCulture; RegionInfo ri = RegionInfo.CurrentRegion; TimeSpan ts = DateTime.UtcNow - DateTime.Now; OnConnected(BaseEventArgs.GetEmpty(null)); Send(new byte[] { 1 }); BncsPacket pck = new BncsPacket((byte)BncsPacketId.AuthInfo); pck.Insert(0); pck.InsertDwordString(PLATFORM_TYPE); // platform pck.InsertDwordString(m_settings.Client); // product pck.InsertInt32(m_settings.VersionByte); // verbyte pck.InsertDwordString(string.Concat(ci.TwoLetterISOLanguageName, ri.TwoLetterISORegionName)); pck.InsertByteArray(LocalEP.Address.GetAddressBytes()); pck.InsertInt32((int)ts.TotalMinutes); pck.InsertInt32(ci.LCID); pck.InsertInt32(ci.LCID); pck.InsertCString(ri.ThreeLetterWindowsRegionName); pck.InsertCString(ri.DisplayName); Send(pck); if (Settings.PingMethod == PingType.ZeroMs) { pck = new BncsPacket((byte)BncsPacketId.Ping); pck.InsertInt32(new Random().Next()); Send(pck); } StartParsing(); StartListening(); } return(ok); }
public virtual void LogonRealm(RealmServer server) { if (object.ReferenceEquals(server, null)) { throw new ArgumentNullException("server"); } Random r = new Random(); int clientToken = r.Next(); byte[] passwordHash = OldAuth.DoubleHashPassword("password", clientToken, m_serverToken); BncsPacket pck = new BncsPacket((byte)BncsPacketId.LogonRealmEx); pck.InsertInt32(clientToken); pck.InsertByteArray(passwordHash); pck.InsertCString(server.Title); m_client.Send(pck); }
public async Task <bool> ConnectAsync() { bool ok = await _connection.ConnectAsync(); if (ok) { CultureInfo ci = CultureInfo.CurrentCulture; RegionInfo ri = RegionInfo.CurrentRegion; TimeSpan ts = DateTime.UtcNow - DateTime.Now; ((IChatConnectionEventSource)this).OnConnected(); await _connection.SendAsync(new byte[] { 1 }); BncsPacket pck = new BncsPacket(BncsPacketId.AuthInfo, _storage.Acquire()); pck.InsertInt32(0); pck.InsertDwordString("IX86"); pck.InsertDwordString(_settings.Client.ProductCode); pck.InsertInt32(_settings.VersionByte); pck.InsertDwordString(ci.TwoLetterISOLanguageName + ri.TwoLetterISORegionName); pck.InsertByteArray(_connection.LocalEP.Address.GetAddressBytes()); pck.InsertInt32((int)ts.TotalMinutes); pck.InsertInt32(ci.LCID); pck.InsertInt32(ci.LCID); pck.InsertCString(ri.ThreeLetterISORegionName, Encoding.UTF8); pck.InsertCString(ri.DisplayName, Encoding.UTF8); await pck.SendAsync(_connection); if (_settings.PingMethod == PingKind.ZeroMs) { pck = new BncsPacket(BncsPacketId.Ping, _storage.Acquire()); pck.InsertInt32(new Random().Next()); await pck.SendAsync(_connection); } Listen(); } return(ok); }
public void Handle_SID_AUTH_INFO(BncsReader Reader) { int num = Reader.ReadInt32(); int num2 = Reader.ReadInt32(); int num3 = Reader.ReadInt32(); long num4 = Reader.ReadInt64(); string mpqName = Reader.ReadCString(); byte[] array = Reader.ReadNullTerminatedByteArray(); List <string> list = new List <string>(); this.g_iServerToken = num2; int num5; if (this.Exp) { num5 = 2; } else { num5 = 1; } BattleNetClient battleNetClient = new BattleNetClient(this.Exp); checked { string[] array2 = new string[num5]; CdKey[] array3 = new CdKey[num5]; byte[][] array4 = new byte[num5][]; int[] array5 = new int[num5]; array2[0] = this.BnetInfo.ClassicCdKey; array2[0] = array2[0].Replace("-", ""); array2[0] = array2[0].Replace(" ", ""); if (num5 >= 2) { array2[1] = this.BnetInfo.ExpCdKey; array2[1] = array2[1].Replace("-", ""); array2[1] = array2[1].Replace(" ", ""); } int arg_111_0 = 0; int num6 = num5 - 1; for (int i = arg_111_0; i <= num6; i++) { try { array5[i] = array2[i].Length; array3[i] = CdKey.CreateDecoder(array2[i]); array4[i] = array3[i].GetHash(this.g_iClientToken, this.g_iServerToken); if (!array3[i].IsValid) { this.WriteToLog("Warning Cd-Key(" + Conversions.ToString(i) + ") is invalid", Color.Red); this.Disconnect(); } } catch (Exception expr_186) { ProjectData.SetProjectError(expr_186); this.WriteToLog("Error while preparing the cd-key " + i, Color.Red); this.Disconnect(); ProjectData.ClearProjectError(); return; } } string str = ""; char[] array6 = new char[array.Length]; int arg_1EF_0 = 0; int num7 = array.Length - 1; for (int j = arg_1EF_0; j <= num7; j++) { array6[j] = Strings.ChrW((int)array[j]); } int exeInfo = CheckRevision.GetExeInfo(battleNetClient.g_sHashes[0], out str); int i2 = CheckRevision.DoCheckRevision(new string(array6), battleNetClient.g_sHashes, CheckRevision.ExtractMPQNumber(mpqName)); BncsPacket bncsPacket = new BncsPacket(81); bncsPacket.InsertInt32(this.g_iClientToken); bncsPacket.InsertInt32(exeInfo); bncsPacket.InsertInt32(i2); bncsPacket.InsertInt32(num5); bncsPacket.InsertBoolean(false); int arg_27B_0 = 0; int num8 = num5 - 1; for (int k = arg_27B_0; k <= num8; k++) { bncsPacket.InsertInt32(array5[k]); bncsPacket.InsertInt32(array3[k].Product); bncsPacket.InsertInt32(array3[k].Value1); bncsPacket.InsertInt32(0); bncsPacket.InsertByteArray(array4[k]); } bncsPacket.InsertCString(str); bncsPacket.InsertCString(this.BnetInfo.CdKeyOwner); this.SendPacket(bncsPacket.UnderlyingBuffer); } }
private async void HandleAuthInfo(BncsReader dr) { try { //DataReader dr = new DataReader(data.Data); //if (m_pingPck != null) //{ // Send(m_pingPck); // m_pingPck = null; //} _received0x50 = true; _loginType = dr.ReadUInt32(); _srvToken = dr.ReadInt32(); _udpVal = dr.ReadUInt32(); _mpqFileTime = dr.ReadInt64(); _versioningFilename = dr.ReadCString(); _usingLockdown = _versioningFilename.StartsWith("LOCKDOWN", StringComparison.OrdinalIgnoreCase); int crResult = -1, exeVer = -1; string exeInfo = null; if (!_usingLockdown) { _valString = dr.ReadCString(); int mpqNum = CheckRevision.ExtractMPQNumber(_versioningFilename); crResult = CheckRevision.DoCheckRevision(_valString, new Stream[] { File.OpenRead(_settings.GameExe), File.OpenRead(_settings.GameFile2), File.OpenRead(_settings.GameFile3) }, mpqNum); exeVer = CheckRevision.GetExeInfo(_settings.GameExe, out exeInfo); } else { _ldValStr = dr.ReadNullTerminatedByteArray(); string dllName = _versioningFilename.Replace(".mpq", ".dll"); BnFtpVersion1Request req = new BnFtpVersion1Request(_settings.Client, _versioningFilename, null); req.Gateway = _settings.Gateway; req.LocalFileName = Path.Combine(Path.GetTempPath(), _versioningFilename); await req.ExecuteRequest(); string ldPath = null; using (MpqArchive arch = MpqServices.OpenArchive(req.LocalFileName)) { if (arch.ContainsFile(dllName)) { ldPath = Path.Combine(Path.GetTempPath(), dllName); arch.SaveToPath(dllName, Path.GetTempPath(), false); } } _ldDigest = CheckRevision.DoLockdownCheckRevision(_ldValStr, new string[] { _settings.GameExe, _settings.GameFile2, _settings.GameFile3 }, ldPath, _settings.ImageFile, ref exeVer, ref crResult); } string prodCode = _settings.Client.ProductCode; if (prodCode == "WAR3" || prodCode == "W3XP") { _w3srv = dr.ReadByteArray(128); if (!NLS.ValidateServerSignature(_w3srv, _connection.RemoteEP.Address.GetAddressBytes())) { //OnError(new ErrorEventArgs(ErrorType.Warcraft3ServerValidationFailure, Strings.War3ServerValidationFailed, false)); //Close(); //return; } } // BattleNetClientResources.IncomingBufferPool.FreeBuffer(data.Data); CdKey key1 = _settings.CdKey1, key2 = _settings.CdKey2; _clientToken = new Random().Next(); byte[] key1Hash = key1.GetHash(_clientToken, _srvToken); if (WardenHandler != null) { try { if (!WardenHandler.InitWarden(BitConverter.ToInt32(key1Hash, 0))) { WardenHandler.UninitWarden(); //OnError(new ErrorEventArgs(ErrorType.WardenModuleFailure, "The Warden module failed to initialize. You will not be immediately disconnected; however, you may be disconnected after a short period of time.", false)); WardenHandler = null; } } catch (Win32Exception we) { //OnError(new ErrorEventArgs(ErrorType.WardenModuleFailure, "The Warden module failed to initialize. You will not be immediately disconnected; however, you may be disconnected after a short period of time.", false)); //OnError(new ErrorEventArgs(ErrorType.WardenModuleFailure, string.Format(CultureInfo.CurrentCulture, "Additional information: {0}", we.Message), false)); WardenHandler.UninitWarden(); WardenHandler = null; } } BncsPacket pck0x51 = new BncsPacket(BncsPacketId.AuthCheck, _connection.NetworkBuffers.Acquire()); pck0x51.InsertInt32(_clientToken); pck0x51.InsertInt32(exeVer); pck0x51.InsertInt32(crResult); if (prodCode == "D2XP" || prodCode == "W3XP") { pck0x51.InsertInt32(2); } else { pck0x51.InsertInt32(1); } pck0x51.InsertBoolean(false); pck0x51.InsertInt32(key1.Key.Length); pck0x51.InsertInt32(key1.Product); pck0x51.InsertInt32(key1.Value1); pck0x51.InsertInt32(0); pck0x51.InsertByteArray(key1Hash); if (key2 != null) { pck0x51.InsertInt32(key2.Key.Length); pck0x51.InsertInt32(key2.Product); pck0x51.InsertInt32(key2.Value1); pck0x51.InsertInt32(0); pck0x51.InsertByteArray(key2.GetHash(_clientToken, _srvToken)); } if (_usingLockdown) { pck0x51.InsertByteArray(_ldDigest); pck0x51.InsertByte(0); } else { pck0x51.InsertCString(exeInfo); } pck0x51.InsertCString(_settings.CdKeyOwner); await pck0x51.SendAsync(_connection); } catch (Exception ex) { //OnError(new ErrorEventArgs(ErrorType.General, "There was an error while initializing your client. Refer to the exception message for more information.\n" + ex.ToString(), true)); Disconnect(); Console.WriteLine(ex.ToString()); } }
private void HandleAuthInfo(ParseData data) { try { DataReader dr = new DataReader(data.Data); if (m_pingPck != null) { Send(m_pingPck); m_pingPck = null; } m_received0x50 = true; m_loginType = dr.ReadUInt32(); m_srvToken = dr.ReadUInt32(); m_udpVal = dr.ReadUInt32(); m_mpqFiletime = dr.ReadInt64(); m_versioningFilename = dr.ReadCString(); m_usingLockdown = m_versioningFilename.StartsWith("LOCKDOWN", StringComparison.OrdinalIgnoreCase); int crResult = -1, exeVer = -1; string exeInfo = null; if (!m_usingLockdown) { m_valString = dr.ReadCString(); int mpqNum = CheckRevision.ExtractMPQNumber(m_versioningFilename); crResult = CheckRevision.DoCheckRevision(m_valString, new string[] { m_settings.GameExe, m_settings.GameFile2, m_settings.GameFile3 }, mpqNum); exeVer = CheckRevision.GetExeInfo(m_settings.GameExe, out exeInfo); } else { m_ldValStr = dr.ReadNullTerminatedByteArray(); string dllName = m_versioningFilename.Replace(".mpq", ".dll"); BnFtpVersion1Request req = new BnFtpVersion1Request(m_settings.Client, m_versioningFilename, null); req.Server = m_settings.Gateway.ServerHost; req.LocalFileName = Path.Combine(Path.GetTempPath(), m_versioningFilename); req.ExecuteRequest(); string ldPath = null; using (MpqArchive arch = MpqServices.OpenArchive(req.LocalFileName)) { if (arch.ContainsFile(dllName)) { ldPath = Path.Combine(Path.GetTempPath(), dllName); arch.SaveToPath(dllName, Path.GetTempPath(), false); } } m_ldDigest = CheckRevision.DoLockdownCheckRevision(m_ldValStr, new string[] { m_settings.GameExe, m_settings.GameFile2, m_settings.GameFile3 }, ldPath, m_settings.ImageFile, ref exeVer, ref crResult); } m_prodCode = m_settings.Client; if (m_prodCode == "WAR3" || m_prodCode == "W3XP") { m_w3srv = dr.ReadByteArray(128); if (!NLS.ValidateServerSignature(m_w3srv, RemoteEP.Address.GetAddressBytes())) { OnError(new ErrorEventArgs(ErrorType.Warcraft3ServerValidationFailure, Strings.War3ServerValidationFailed, false)); //Close(); //return; } } BattleNetClientResources.IncomingBufferPool.FreeBuffer(data.Data); CdKey key1, key2 = null; key1 = new CdKey(m_settings.CdKey1); if (m_prodCode == "D2XP" || m_prodCode == "W3XP") { key2 = new CdKey(m_settings.CdKey2); } m_clientToken = unchecked ((uint)new Random().Next()); byte[] key1Hash = key1.GetHash(m_clientToken, m_srvToken); if (m_warden != null) { try { if (!m_warden.InitWarden(BitConverter.ToInt32(key1Hash, 0))) { m_warden.UninitWarden(); OnError(new ErrorEventArgs(ErrorType.WardenModuleFailure, "The Warden module failed to initialize. You will not be immediately disconnected; however, you may be disconnected after a short period of time.", false)); m_warden = null; } } catch (Win32Exception we) { OnError(new ErrorEventArgs(ErrorType.WardenModuleFailure, "The Warden module failed to initialize. You will not be immediately disconnected; however, you may be disconnected after a short period of time.", false)); OnError(new ErrorEventArgs(ErrorType.WardenModuleFailure, string.Format(CultureInfo.CurrentCulture, "Additional information: {0}", we.Message), false)); m_warden.UninitWarden(); m_warden = null; } } BncsPacket pck0x51 = new BncsPacket((byte)BncsPacketId.AuthCheck); pck0x51.Insert(m_clientToken); pck0x51.Insert(exeVer); pck0x51.Insert(crResult); if (m_prodCode == "D2XP" || m_prodCode == "W3XP") { pck0x51.Insert(2); } else { pck0x51.Insert(1); } pck0x51.Insert(false); pck0x51.Insert(key1.Key.Length); pck0x51.Insert(key1.Product); pck0x51.Insert(key1.Value1); pck0x51.Insert(0); pck0x51.Insert(key1Hash); if (key2 != null) { pck0x51.Insert(key2.Key.Length); pck0x51.Insert(key2.Product); pck0x51.Insert(key2.Value1); pck0x51.Insert(0); pck0x51.Insert(key2.GetHash(m_clientToken, m_srvToken)); } if (m_usingLockdown) { pck0x51.InsertByteArray(m_ldDigest); pck0x51.InsertByte(0); } else { pck0x51.InsertCString(exeInfo); } pck0x51.InsertCString(m_settings.CdKeyOwner); Send(pck0x51); } catch (Exception ex) { OnError(new ErrorEventArgs(ErrorType.General, "There was an error while initializing your client. Refer to the exception message for more information.\n" + ex.ToString(), true)); Close(); } }