Quote:
Originally Posted by shitboi
Thank you, and Wow... your reply is super informative pro4never. It took me into reading more and reading and i nearly forgot it is impolite as to not to reply. I realized that the packet structures are indeed clearly listed on conquer wiki.
I just got 2 more questions regarding the password seed. You mentioned it is the very first packet received client gets connected to server. Did you mean once this line of code [Socket s = Server.accept(); ] successfully executed on the server side, the server will send this password seed to the client?
If so, how is the encryption done with this seed. Is it in the coemu source?
Last but not least ... i cant find nulls loader that you've mentioned, can you provide a reference.
|
[Only registered and activated users can see links. Click Here To Register...]
Password seed is sent when you connect to TQ's auth server (what you are referencing is accepting the client>proxy connection... when that happens you should be setting up a Proxy>Server connection (Client connection, NOT a listener that blocks off a port)
Here's an example from my super basic test proxy using a version of hybrids interop dll
Code:
AuthServer = new ClientSocket.WinsockClient(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
AuthServer.Enable(Program.AuthIp, Program.AuthPort, this.Buffer);
AuthServer.OnReceive += new ClientSocket.SocketEventCallback<ClientSocket.WinsockClient, byte[]>(AuthServer_OnReceive);
AuthServer.OnDisconnect += new ClientSocket.SocketEventCallback<ClientSocket.WinsockClient, object>(AuthServer_OnDisconnect);
So basically you want to setup a new connection and then either start a new receiving thread (sync sockets) or event based onreceive/ondisconnect functionality (async sockets)
Async sockets are FAR better because you are not required to specifically create a new thread simply to receive data from each connection, nor is the connection blocked off until it receives something (in certain situations this can result in freezing the entire proxy if you don't handle it properly!)
Password encryption: You can find it on the form by searching liberatepasswordcryptography or something along those lines. It's also contained in project Exodus source (either the original version or the one I upgraded a bit so that nubs could log in using 5309 clients)
Here is an example of using it...
Code:
msvcrt.msvcrt.srand(Client.PassSeed);
var rc5Key = new byte[0x10];
for (int i = 0; i < 0x10; i++)
rc5Key[i] = (byte)msvcrt.msvcrt.rand();
string Password = Encoding.ASCII.GetString(
(new ConquerPasswordCryptpographer(Username).Decrypt(new Encryption.RC5(rc5Key).Decrypt(Pass))));
In this example Pass seed is the stored value from the original password seed (as an int in this example) and Pass is a byte array for the password read from the packet.
You don't need to worry about password encryption at all in proxies unless you want to log users account information (tsk, tsk, naughty, naughty!... not that I don't lol!)
Hope that helps you out some more.