Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.rs2.networking.streams.packets.incoming.login;
- import com.alex.utils.Utils;
- import com.rs2.GameLauncher;
- import com.rs2.networking.Session;
- import com.rs2.networking.streams.InputStream;
- import com.rs2.networking.streams.packets.PacketManager;
- import com.rs2.utilities.Logger;
- import com.rs2.utilities.Utilities;
- import com.rs2.utilities.cryptology.MD5Encryption;
- import com.rs2.utilities.isaac.IsaacKeyPair;
- import com.rs2.world.entity.mobile.player.Player;
- import com.rs2.world.entity.mobile.player.PlayerInformation;
- import com.rs2.world.entity.mobile.player.machine.DisplayInformation;
- import com.rs2.world.entity.mobile.player.machine.MachineInformation;
- public class RequestPlayerLogin {
- private LoginType type;
- private InputStream stream;
- private Session session;
- public RequestPlayerLogin(LoginType type, Session session, InputStream stream) {
- this.type = type;
- this.stream = stream;
- this.session = session;
- }
- @SuppressWarnings("unused")
- public void decodeLogin() {
- switch (type) {
- case LOBBY:
- break;
- case WORLD:
- boolean unknownEquals14 = stream.readUnsignedByte() == 1;
- int rsaBlockSize = stream.readUnsignedShort();
- if (rsaBlockSize > stream.getRemaining()) {
- session.getRS2ClientEncoder().writePacket(10);
- System.out.println("Wrote Packet 10: 2a");
- return;
- }
- byte[] data = new byte[rsaBlockSize];
- stream.readBytes(data, 0, rsaBlockSize);
- InputStream rsaStream = new InputStream(Utils.cryptRSA(data, GameLauncher.getRevisionInformation().getPrivateExponent(), GameLauncher.getRevisionInformation().getModulus()));
- if (rsaStream.readUnsignedByte() != 10) {
- session.getRS2ClientEncoder().writePacket(10);
- System.out.println("Wrote Packet 10: 1a");
- return;
- }
- int[] isaacKeys = new int[4];
- for (int i = 0; i < isaacKeys.length; i++)
- isaacKeys[i] = rsaStream.readInt();
- if (rsaStream.readLong() != 0L) { // rsa block check, pass part
- session.getRS2ClientEncoder().writePacket(10);
- return;
- }
- String password = rsaStream.readString();
- if (password.length() > 30 || password.length() < 3) {
- session.getRS2ClientEncoder().writePacket(3);
- return;
- }
- password = MD5Encryption.encrypt(password);
- String unknown = Utilities.longToString(rsaStream.readLong());
- rsaStream.readLong(); // random value
- rsaStream.readLong(); // random value
- stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
- boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
- String username = Utilities.formatPlayerNameForProtocol(stringUsername ? stream.readString() : Utilities.longToString(stream.readLong()));
- Logger.logSimple(this, "World Login Request: " + username);
- 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();
- int affid = stream.readInt();
- stream.skip(stream.readUnsignedByte()); // useless settings
- MachineInformation machine_information = null;
- int unknown3 = stream.readInt();
- long userFlow = stream.readLong();
- boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
- if (hasAditionalInformation)
- stream.readString(); // aditionalInformation
- boolean hasJagtheora = stream.readUnsignedByte() == 1;
- boolean js = stream.readUnsignedByte() == 1;
- boolean hc = stream.readUnsignedByte() == 1;
- int unknown4 = stream.readByte();
- int unknown5 = stream.readInt();
- String unknown6 = stream.readString();
- boolean unknown7 = stream.readUnsignedByte() == 1;
- for (int index = 0; index < GameLauncher.getCache().getStore().getIndexes().length; index++) {
- int crc = GameLauncher.getCache().getStore().getIndexes()[index] == null ? -1011863738 : GameLauncher.getCache().getStore().getIndexes()[index].getCRC();
- int receivedCRC = stream.readInt();
- if (crc != receivedCRC && index < 32) {
- session.getRS2ClientEncoder().writePacket(6);
- return;
- }
- }
- Player player = new Player(new PlayerInformation("Brandon", "testing"));
- player.run(player.getPlayerInformation(), session, machine_information, new DisplayInformation(displayMode, screenHeight, screenWidth), new IsaacKeyPair(isaacKeys));
- session.getRS2ClientEncoder().writeLoginInformation(player);
- session.setDecoder(new PacketManager(player, session));
- session.setEncoder(new PacketManager(player, session));
- player.startup();
- break;
- default:
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement