Jump to content
  • 0

login server encryption, and login procedure


Question

Posted

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.

4 answers to this question

Recommended Posts

  • 0
Posted

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

  • 0
Posted

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

  • 0
Posted

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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • Hi, great work! Are there any bugs? And will it work with a high five?
    • For others that would like to understand in more details:   The login server also uses a protocol (sent by the server to the client in the very first packet). For instance, the C4 client (the one I'm developing my emulator for) expects the protocol number `50721` (or `0xc621`) which works as follow (from what I've gathered): Preamble: L2 packets are divided into two parts: size and payload; As mentioned, every packet starts with two bytes containing the whole packet size (thus including those two bytes, e.g. a packet of size 15 will have the number `15` written onto its first two bytes and a following payload of 13 bytes); For login server, first byte of the payload is the opcode (game server must deal with variable-sized opcodes); Next bytes are the packet content; Before sending the packet, its buffer size (minus the initial two bytes) is padded to 8 bytes (required by upcoming Blowfish encoding); A checksum of the packet is appended at the end, then the payload is again padded to 8 bytes; If the opcode is not `0` (also written as `0x00`), then the payload is encoded by Blowfish; Packet is sent over the network. You can have a look at my implementation (in C++) here (do note I'm assuming little-endian).   In this protocol, the auth packet (`0x00`) sent back by the client is RSA encrypted using the RSA modulus sent in the first server packet, inserted right after the protocol number.  
    • Hello guys I wanna buy some  Lessons for an L2J Developer
    • Let me give you something for inspiration and get you addicted to bot AI     And a siege 😛     What I have notice helps a lot the LLM to act real, is to give it a real-persons background. So for each LLM in the context beggining, besides the L2 facts, give it a real-life back story "You are a 67 years old retired nurse who plays Lineage 2 while her husband reads his newspaper, you are calm, collected but get mad if insulted". But that makes for a creative bot but its repetitive. So what you can also do, is pick random 20 news sites and for each bot every 2-3 days, initialize a context that is affected by the "news" the bot reads in the "real world".  So for example there's Iran - US war ok ? You take the news, put it in an LLM and ask it, extract the "abstract feelings" that this news piece invokes into you without mentioning anything related to the news. Then you take the result and inject it to the bots LLM prompt after its backstory.  This leads to some VERY human-like behavior from bots. 
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..