Like Mark said, keep a backup of any "Pendragon" or 1.115a~b "Live" DLL, once you used camelot.exe patcher you won't be able to get a working DLL anymore !
There could be a 1.115c pendragon from an old revision that doesn't match the 1.115c live, 1.115f Pendragon == 1.115c Live
So actually there is no distribution of working client through mytic patcher either way... and Pendragon just used this new DLL for 1.115f and there was no trouble before that !
Actually a lot of things have changed (listing for research purpose) :
- First Client packet with Version header changed (C=>S 0xF4), it can be match on its "Size" to use the correct Version Parsing, once the first packet Version have been "matched" the Client PacketProcessor will work fine and we will be able to use logical switch based on version to change Packet (using PacketLib subclass etc...)
- Login Client Packet has changed (C=>S 0xA7),version header changed, username and password are now transmitted in some kind of what I called "LowEndianShortString", it's like a pascal string but prefixed with a low endian ushort instead of a byte...
- CryptKey Exchange has changed (C=>S 0xF4, longer one with symmetric key included), the Version header changed, position of the key in the packet is not the same, and the key is writed with a "LowEndianShortString"
- Actually changing the "Crypt" Flag in the First Client Packet prevent the Portal From Working ! The workaround for previous version is not working anymore so, after the second 0xF4 packet with symmetric key, client only expect encrypted data, and will only send encrypted packet to server... If the server asks for unencrypted stream the client keep sending its First Packet until the server tells he handles crypto...
- We can either research how to update portal (but I'm really not able to use a decompiler), or research how to handle DAOC crypto...
It looks like a symmetric crypto, all existing code "comments" around crypto only talks about RSA and (Pseudo)RC4, the default client key is 64 byte long (512bits) and from "DAOCLogger" which can log clean text packet there is some way to know what is the expected result... From a recent session on Pendragon I'm pretty sure I haven't see any asymmetrical key exchange ! So it must be a symmetric algorithm only... (even if that's really WEAK !!!)