Jump to content
  • 0

login server encryption, and login procedure


tonmp

Question

How it works? I figured out some things, but i don't get the full picture.

 

So when the client establish a connection to server, the server sends an "init" packet what contains, the RSA keys. But as i see it's encrypted, then how the client reads it if it don't get the keys yet? And What is this blowfish key? it uses hybrid RSA and blowfish key enrcyption?

And what about those gameguard packets? If the server don't sends those static packets, the client can't login? (cuz as i see in l2j the gameguard isn't functioning, it's got just and emulation.

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

well the login encryption is a bit harder thing to explain im pretty sure i cant give you a good answer because i dont have that much knowledge and im sure as hell that the others dont have it too so the best solution for you would be to post this in l2jserver forum or in l2jfree forum to get an answer

Link to comment
Share on other sites

  • 0

well lemme explain u smth.. the client connects to he server via a thread socket instance when u press log in button.

 

Something like this:

 

public class MyClasy extends Thread

{

       // This is the socket that willc onnect to the server socket

      private Socket _socket;

 

      public MyClasy()

      {

            // here we define _socket.. we create it's instance xD useing his public constructor

            _socket = new Socket(/*This si where the ip is :*/ "127.0.0.1", /* The Port: */ 7777);

            // And here we start the thread, like a runnable starting the run() method ^^

            start();

      }

 

      public void run()

      {

           // Infinite loop xD, it never ends it gos and gos.. in miliseconds scaning for any data changes

           while(true)

           {

               // Well the connection was astablished on its construsctor.. now the data out put stream and imput are handled here.

               _socket.getOutputStream();

               _socket.getInputStream();

               // the data are encrypted in byts as u can see in GameCrypt.java file in net.sf.l2j.gameserver.network thus resulting into -> packets

               // And then added in a byte buffer array.. First byte [0] is the op code of the packet (the identifyer) then theres other types of bytes representing

               // Strings (Like names or passwords in game), Longs(Time in games), Integers, Doubles etc

               // When a packet it send thru the out put stream of this client thread to a server thread it's infinite loop will see it and read the opcode then decrypting

               // the infortmation that the packet contains.

           }

      }

}

 

Well thats the connection and packets explination... if i dindt make my self clearer enoth.. feel free to ask questions.

those rsa keys.. are mostly unread they are just created randomly.. same as the blowfish key... im not sure if im right... but as i was working on packs like c4 -> interlude it was like this useless:P

 

The blowfish key is a programs checksum (whats a programs checksum?), the checksum is a protection.. so ppl wount log with 3rd party programs... well mianly if the programs checksum was different that means something happend to the client and so the server wount let the client connect to it....

 

Something like this happens with l2phx.. phx hooks up to the l2's checksum then injectiong another checksum for the server to read...(the phx's fake checksum lies to the server, saying thats a normal client) and thats how ppl log with phx.. xD

 

But with l2j u dont need to care bout checksums and rsa cus ur login server can accept any client.. cus it moslty ignores everything xD

 

Again, if i sayd smth u dont understand feel free to ask questions xD

Link to comment
Share on other sites

  • 0

thx for reply, i nearly know how the communication begins and how it's work, the only thing i didn't understand is the encryption. As i see the init packet (0x00 ID) when a hellbound client connects to a ct1.5 l2j server, is always changing. Ofc the rsa keys should change, but the blowfish key and the protocol version changes too. Or i decoded them wrongly(are the login packets changed since c4 exept the encryption (cuz as i saw in c4 the login packets were sent without encryption, pass and login name by simple asciistring LOL)? ) :)

Btw why the server sends the blowfish key, if i should come from the client (or the client checks that itself isn't modified)?  As i see the blowfish key the "token" is the same thing, called with two different names.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock