mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2026-08-15 13:04:36 +00:00
Bug fix
This commit is contained in:
parent
bcded40476
commit
db17babe58
6 changed files with 23 additions and 26 deletions
|
|
@ -572,6 +572,7 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
byte[] bodyDigest = dataTypes.ReadNextByteArray(packetData);
|
||||
|
||||
bool verifyResult;
|
||||
|
||||
if (!isOnlineMode)
|
||||
verifyResult = false;
|
||||
else if (senderUUID == handler.GetUserUuid())
|
||||
|
|
@ -579,6 +580,7 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
else
|
||||
{
|
||||
PlayerInfo? player = handler.GetPlayerInfo(senderUUID);
|
||||
|
||||
if (player == null || !player.IsMessageChainLegal())
|
||||
verifyResult = false;
|
||||
else
|
||||
|
|
@ -586,7 +588,7 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
bool lastVerifyResult = player.IsMessageChainLegal();
|
||||
verifyResult = player.VerifyMessageHead(ref precedingSignature, ref headerSignature, ref bodyDigest);
|
||||
if (lastVerifyResult && !verifyResult)
|
||||
log.Warn("Player " + player.DisplayName + "'s message chain is broken!");
|
||||
log.Warn("Player " + player.Name + "'s message chain is broken!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1705,7 +1707,7 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
if (protocolVersion >= MC_1_19_2_Version)
|
||||
fullLoginPacket.AddRange(dataTypes.GetArray(playerKeyPair.PublicKey.SignatureV2!)); // Public key signature received from Microsoft API
|
||||
else
|
||||
fullLoginPacket.AddRange(dataTypes.GetArray(playerKeyPair.PublicKey.Signature!)); // Public key signature received from Microsoft API
|
||||
fullLoginPacket.AddRange(dataTypes.GetArray(playerKeyPair.PublicKey.Signature!)); // Public key signature received from Microsoft API
|
||||
}
|
||||
}
|
||||
if (protocolVersion >= MC_1_19_2_Version)
|
||||
|
|
@ -1769,7 +1771,6 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
if (serverIDhash != "-")
|
||||
{
|
||||
log.Info(Translations.Get("mcc.session"));
|
||||
string serverHash = CryptoHandler.getServerHash(serverIDhash, serverPublicKey, secretKey);
|
||||
|
||||
bool needCheckSession = true;
|
||||
if (session.ServerPublicKey != null && session.SessionPreCheckTask != null
|
||||
|
|
@ -1782,6 +1783,8 @@ namespace MinecraftClient.Protocol.Handlers
|
|||
|
||||
if (needCheckSession)
|
||||
{
|
||||
string serverHash = CryptoHandler.getServerHash(serverIDhash, serverPublicKey, secretKey);
|
||||
|
||||
if (ProtocolHandler.SessionCheck(uuid, sessionID, serverHash))
|
||||
{
|
||||
session.ServerIDhash = serverIDhash;
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ namespace MinecraftClient.Protocol
|
|||
if (this.precedingSignature != null && !this.precedingSignature.SequenceEqual(precedingSignature!))
|
||||
return false;
|
||||
|
||||
bool res = PublicKey.VerifyHeader(ref bodyDigest, ref headerSignature);
|
||||
bool res = PublicKey.VerifyHeader(Uuid, ref bodyDigest, ref headerSignature, ref precedingSignature);
|
||||
|
||||
this.lastMessageVerified = res;
|
||||
this.precedingSignature = headerSignature;
|
||||
|
|
|
|||
|
|
@ -88,9 +88,12 @@ namespace MinecraftClient.Protocol.Keys
|
|||
/// <param name="bodyDigest">Message body hash</param>
|
||||
/// <param name="signature">Message signature</param>
|
||||
/// <returns>Is this message header vaild</returns>
|
||||
public bool VerifyHeader(ref byte[] bodyDigest, ref byte[] signature)
|
||||
public bool VerifyHeader(Guid uuid, ref byte[] bodyDigest, ref byte[] signature, ref byte[]? precedingSignature)
|
||||
{
|
||||
return VerifyData(bodyDigest, signature);
|
||||
|
||||
byte[] msgSignData = KeyUtils.GetSignatureData(precedingSignature, uuid, bodyDigest);
|
||||
|
||||
return VerifyData(msgSignData, signature);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue