Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void decodeLobbyLogin(InputStream stream) {
- if (stream.readInt() != Settings.MINOR_VERSION) {
- session.getLoginPackets().sendClosingPacket(6);
- return;
- }
- 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.length; i++)
- isaacKeys[i] = rsaStream.readInt();
- int unknownType = rsaStream.readUnsignedByte(); // type of data
- int unknown = rsaStream.readInt();
- if (unknown != 0L) { // rsa block check, pass part
- session.getLoginPackets().sendClosingPacket(10);
- return;
- }
- String password = rsaStream.readString();
- if (password.length() > 30 || password.length() < 3) {
- session.getLoginPackets().sendClosingPacket(3);
- return;
- }
- password = Encrypt.encryptSHA1(password);
- 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 game = stream.readUnsignedByte();
- int locale = stream.readUnsignedByte();
- int displayMode = stream.readUnsignedByte();
- int screenWidth = stream.readUnsignedShort();
- int screenHeight = stream.readUnsignedShort();
- int unknown2 = stream.readUnsignedByte();
- stream.skip(24);
- String settings = stream.readString();
- if (!settings.equals(Settings.CLIENT_SETTINGS)) {
- session.getLoginPackets().sendClosingPacket(10);
- System.out.println(settings + " does not equal " + Settings.CLIENT_SETTINGS);
- return;
- }
- stream.skip(stream.readUnsignedByte()); // useless settings
- MachineInformation mInformation = decodeMachineInformation(stream);
- int unknown3 = stream.readInt();
- String worldServerToken = stream.readString();
- if (!worldServerToken.equals(Settings.WORLD_SERVER_TOKEN)) {
- //session.getLoginPackets().sendClosingPacket(35);
- //System.out.println(worldServerToken + " does not equal " + Settings.CLIENT_SETTINGS);
- //return;
- }
- int affId = stream.readInt();
- int clientLoginId = stream.readInt();
- if (clientLoginId != Settings.CLIENT_LOGIN_ID) {
- session.getLoginPackets().sendClosingPacket(35);
- System.out.println(clientLoginId + " does not equal " + Settings.CLIENT_LOGIN_ID);
- return;
- }
- String grabServerToken = stream.readString();
- if (!grabServerToken.equals(Settings.GRAB_SERVER_TOKEN)) {
- session.getLoginPackets().sendClosingPacket(35);
- System.out.println(grabServerToken + " does not equal " + Settings.GRAB_SERVER_TOKEN);
- return;
- }
- boolean unknown7 = stream.readUnsignedByte() == 1;
- 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();
- if (Utils.invalidAccountName(username) || username.startsWith("mod") || username.startsWith("m0d")
- || username.startsWith("flavius") || username.equalsIgnoreCase("flavius")) {
- session.getLoginPackets().sendClosingPacket(31);
- return;
- }
- if (AntiFlood.getSessionsIP(session.getIP()) >= 3) {
- session.getLoginPackets().sendClosingPacket(9);
- return;
- }
- PlayerHandlerThread.addSession(session, isaacKeys, true, username, password, MACAddress, 0, 0, 0, null);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement