How to work with 6.0.5.0 2D client (Not for RunUO.com users)
First of all, i want to thank Mr. Jeremy from The Abyss for hours of
laughing. After i read his posts about 6.0.5.0 solution - i was in
hysterical state. New auth packet with size of 6 kb is nonsense! Good
joke!
OK, my dear ladies and gentlemen, i want to say that NO NEW encryption
was implemented in 6.0.5.0 patch. NO NEW packets were added in this
patch. It was just a game for children and you're faked :)
How UO works before this patch: client sends seed (4 bytes, really
local IP-address) and then sends packets for login server stage
authorization.
How UO works after this patch: client sends seed (same 4 bytes), THEN
SENDS 17 NEW BYTES, after this sends packets for login server state
authorization. That's all! It's very simple, really? OK, now for these
17 cursed bytes
First byte is random value, usually it's last byte of seed, because
first byte of seed is really new byte and our IP begins from second
byte.
Next 16 bytes is client version - 00 00 00 06 00 00 00 00 00 00 00 05 00 00 00 00
So, all we need is to expand seed buffer for new clients.
OK, example changes:
MessagePump.cs:
1) m_Peek = new byte[21]; // we need to increase buffer's size
2) int length = buffer.Length;
int seed_length = buffer.GetSeedLength(); // calculate our seed_length
3) if (buffer.Length >= seed_length) // change 4 for seed_length
4) buffer.Dequeue( m_Peek, 0, seed_length ); // change 4 for seed_length
ByteQueue.cs:
1) Add new function void GetSeedLength():
public int GetSeedLength()
{
if ( m_Buffer[4] == 0x80 ) // we need this check for old clients
return 4;
return 21;
}
That's all. RunUO 2.0 will now work with ANY 2D client.