2023-08-10 06:51:40 +00:00
|
|
|
|
using System.Text;
|
2023-08-09 14:23:41 +00:00
|
|
|
|
using MassTransit.Mediator;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
using NetCoreServer;
|
2023-08-10 08:47:35 +00:00
|
|
|
|
using Server.Packets;
|
2023-08-09 14:23:41 +00:00
|
|
|
|
|
|
|
|
|
namespace Server;
|
|
|
|
|
|
2023-08-10 08:47:35 +00:00
|
|
|
|
public class AuthSession : TcpSession
|
2023-08-09 14:23:41 +00:00
|
|
|
|
{
|
|
|
|
|
private readonly IMediator _mediator;
|
2023-08-10 08:47:35 +00:00
|
|
|
|
private readonly ILogger<AuthSession> _logger;
|
2023-08-09 14:23:41 +00:00
|
|
|
|
|
2023-08-10 08:47:35 +00:00
|
|
|
|
public AuthSession(TcpServer
|
|
|
|
|
server, IMediator mediator, ILogger<AuthSession> logger) : base(server)
|
2023-08-09 14:23:41 +00:00
|
|
|
|
{
|
|
|
|
|
_mediator = mediator;
|
2023-08-10 08:47:35 +00:00
|
|
|
|
_logger = logger;
|
2023-08-09 14:23:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void OnReceived(byte[] buffer, long offset, long size)
|
|
|
|
|
{
|
2023-08-10 06:45:51 +00:00
|
|
|
|
Console.WriteLine($"Length: {size} & offset: {offset}");
|
|
|
|
|
Span<byte> decryptedBuffer = new byte[size];
|
2023-08-09 14:23:41 +00:00
|
|
|
|
|
2023-08-10 06:45:51 +00:00
|
|
|
|
// xor every value after the first 8 bytes
|
|
|
|
|
var dataBuffer = Decrypt(new ArraySegment<byte>(buffer, 8, (int)size - 8).ToArray());
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Length " + BitConverter.ToUInt16(buffer, 0));
|
|
|
|
|
var opCode = BitConverter.ToUInt16(buffer.ToArray(), 2);
|
|
|
|
|
Console.WriteLine("Packet Op Code: " + opCode);
|
|
|
|
|
Console.WriteLine("Some Value: " + buffer[4]);
|
|
|
|
|
var clientAliveTime = BitConverter.ToUInt16(buffer.ToArray(), 5);
|
|
|
|
|
Console.WriteLine("Client Alive time: " + clientAliveTime);
|
|
|
|
|
Console.WriteLine("Might be a flag:" + buffer[7]);
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Full buffer: " + Encoding.ASCII.GetString(dataBuffer.ToArray()));
|
|
|
|
|
|
|
|
|
|
RawPacket rawPacket = new RawPacket((OperationCode)opCode, dataBuffer, clientAliveTime, buffer[0],
|
|
|
|
|
buffer[3],
|
|
|
|
|
Id, this);
|
|
|
|
|
Parallel.Invoke(() => _mediator.Send(rawPacket));
|
|
|
|
|
_logger.LogInformation("Connection from: {@RemoteEndpoint}", Socket.RemoteEndPoint?.ToString());
|
|
|
|
|
base.OnReceived(decryptedBuffer.ToArray(), offset, decryptedBuffer.Length);
|
2023-08-09 14:23:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private byte[] Decrypt(byte[] buffer)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < buffer.Length; ++i)
|
|
|
|
|
{
|
|
|
|
|
buffer[i] = (byte)(buffer[i] ^ i ^ (3 * (0xFE - i)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return buffer;
|
|
|
|
|
}
|
|
|
|
|
}
|