Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.

Paste

Pasted as Java by registered user blacksabath ( 9 years ago )
public final class LoginPacketsDecoder extends Decoder {

 public LoginPacketsDecoder(Session session) {
  super(session);
 }

 @Override
 public int decode(InputStream stream) {
  if (stream.getRemaining() < 3 xss=removed xss=removed xss=removed> PacketId =:" + opcode);

  if (stream.getRemaining() < length xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed> stream.getRemaining()) {
   session.getLoginPackets().sendClosingPacket(10);
   return;
  }
  byte[] data = new byte[rsaBlockSize];
  stream.readBytes(data, 0, rsaBlockSize);
  InputStream rsaStream = new InputStream(Utils.cryptRSA(data,
    Settings.PRIVATE_EXPONENT, Settings.MODULUS));
  if (rsaStream.readUnsignedByte() != 10) {
   session.getLoginPackets().sendClosingPacket(10);
   return;
  }
  int[] isaacKeys = new int[4];
  for (int i = 0; i < isaacKeys xss=removed xss=removed xss=removed xss=removed xss=removed> 30 || password.length() < 3 xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed>= 3) {
   session.getLoginPackets().sendClosingPacket(9);
   return;
  }

  

  Player player = new Player();

  

  PlayerHandlerThread.addSession(session, isaacKeys, true, username,
    password, MACAddress, 0, 0, 0, null);
 }

 @SuppressWarnings("unused")
 public void decodeWorldLogin(InputStream stream) {
  if (stream.readInt() != Settings.MINOR_VERSION) {
   session.getLoginPackets().sendClosingPacket(6);
   return;
  }
  boolean unknownEquals14 = stream.readUnsignedByte() == 1;
  int rsaBlockSize = stream.readUnsignedShort();
  if (rsaBlockSize > stream.getRemaining()) {
   session.getLoginPackets().sendClosingPacket(10);
   return;
  }
  byte[] data = new byte[rsaBlockSize];
  stream.readBytes(data, 0, rsaBlockSize);
  InputStream rsaStream = new InputStream(Utils.cryptRSA(data,
    Settings.PRIVATE_EXPONENT, Settings.MODULUS));
  if (rsaStream.readUnsignedByte() != 10) {
   session.getLoginPackets().sendClosingPacket(10);
   return;
  }
  int[] isaacKeys = new int[4];
  for (int i = 0; i < isaacKeys xss=removed xss=removed xss=removed xss=removed xss=removed> 30 || password.length() < 3) {
   session.getLoginPackets().sendClosingPacket(3);
   return;
  }
  rsaStream.readLong(); // idk
  rsaStream.readLong(); // random value
  stream.xteaDecrypt(isaacKeys, stream.getOffset(), stream.getLength());
  boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
  String username = Utils
    .formatPlayerNameForProtocol(stringUsername ? stream
      .readString() : Utils.longToString(stream.readLong()));
  int displayMode = stream.readUnsignedByte();
  int screenWidth = stream.readUnsignedShort();
  int screenHeight = stream.readUnsignedShort();
  int unknown2 = stream.readUnsignedByte();
  stream.skip(24); // 24bytes directly from a file, no idea whats there
  String settings = stream.readString();
  if (!settings.equals(Settings.CLIENT_SETTINGS)) {
   session.getLoginPackets().sendClosingPacket(10);
   return;
  }
  int affid = stream.readInt();
  stream.skip(stream.readUnsignedByte()); // useless settings
  MachineInformation mInformation = decodeMachineInformation(stream);
  int unknown3 = stream.readInt();
  int userFlow = stream.readInt();
  int unknown9 = stream.readInt();
  String worldServerToken = stream.readString();
  if (!worldServerToken.equals(Settings.WORLD_SERVER_TOKEN)) {
   session.getLoginPackets().sendClosingPacket(35);
   return;
  }
  boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
  String aditionalInformation = hasAditionalInformation ? stream
    .readString() : "";
  boolean hasJagtheora = stream.readUnsignedByte() == 1;
  boolean js = stream.readUnsignedByte() == 1;
  int unknown4 = stream.readByte();
  int unknown5 = stream.readInt();
  String grabServerToken = stream.readString();
  if (!grabServerToken.equals(Settings.GRAB_SERVER_TOKEN)) {
   session.getLoginPackets().sendClosingPacket(35);
   return;
  }
  boolean differentServer = stream.readUnsignedByte() == 1;
  int serverId1 = stream.readUnsignedShort();
  int serverId2 = stream.readUnsignedShort();
  for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
   if (Cache.STORE.getIndexes()[index] == null)
    continue;
   int crc = Cache.STORE.getIndexes()[index].getCRC();
   int receivedCRC = stream.readInt();

   if (crc != receivedCRC && index < 30) { // outdated
    if (Settings.DEBUG)
     Logger.log(this, "Invalid CRC at index: " + index + ", "
       + receivedCRC + ", " + crc);
    session.getLoginPackets().sendClosingPacket(6);
    return;
   }
  }
  String MACAddress = stream.readString();
  

  Player player = new Player();

  

  PlayerHandlerThread.addSession(session, isaacKeys, false, username,
    password, MACAddress, displayMode, screenWidth, screenHeight,
    mInformation);
 }
}

 

Revise this Paste

Your Name: Code Language: