Advertisement
Guest User

Untitled

a guest
Oct 14th, 2016
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.63 KB | None | 0 0
  1. package com.rs2.networking.streams.packets.incoming.login;
  2.  
  3. import com.alex.utils.Utils;
  4. import com.rs2.GameLauncher;
  5. import com.rs2.networking.Session;
  6. import com.rs2.networking.streams.InputStream;
  7. import com.rs2.networking.streams.packets.PacketManager;
  8. import com.rs2.utilities.Logger;
  9. import com.rs2.utilities.Utilities;
  10. import com.rs2.utilities.cryptology.MD5Encryption;
  11. import com.rs2.utilities.isaac.IsaacKeyPair;
  12. import com.rs2.world.entity.mobile.player.Player;
  13. import com.rs2.world.entity.mobile.player.PlayerInformation;
  14. import com.rs2.world.entity.mobile.player.machine.DisplayInformation;
  15. import com.rs2.world.entity.mobile.player.machine.MachineInformation;
  16.  
  17. public class RequestPlayerLogin {
  18.  
  19.     private LoginType type;
  20.     private InputStream stream;
  21.     private Session session;
  22.  
  23.     public RequestPlayerLogin(LoginType type, Session session, InputStream stream) {
  24.         this.type = type;
  25.         this.stream = stream;
  26.         this.session = session;
  27.     }
  28.  
  29.     @SuppressWarnings("unused")
  30.     public void decodeLogin() {
  31.         switch (type) {
  32.         case LOBBY:
  33.             break;
  34.         case WORLD:
  35.             boolean unknownEquals14 = stream.readUnsignedByte() == 1;
  36.             int rsaBlockSize = stream.readUnsignedShort();
  37.             if (rsaBlockSize > stream.getRemaining()) {
  38.                 session.getRS2ClientEncoder().writePacket(10);
  39.                 System.out.println("Wrote Packet 10: 2a");
  40.                 return;
  41.             }
  42.             byte[] data = new byte[rsaBlockSize];
  43.             stream.readBytes(data, 0, rsaBlockSize);
  44.             InputStream rsaStream = new InputStream(Utils.cryptRSA(data, GameLauncher.getRevisionInformation().getPrivateExponent(), GameLauncher.getRevisionInformation().getModulus()));
  45.             if (rsaStream.readUnsignedByte() != 10) {
  46.                 session.getRS2ClientEncoder().writePacket(10);
  47.                 System.out.println("Wrote Packet 10: 1a");
  48.                 return;
  49.             }
  50.             int[] isaacKeys = new int[4];
  51.             for (int i = 0; i < isaacKeys.length; i++)
  52.                 isaacKeys[i] = rsaStream.readInt();
  53.             if (rsaStream.readLong() != 0L) { // rsa block check, pass part
  54.                 session.getRS2ClientEncoder().writePacket(10);
  55.                 return;
  56.             }
  57.             String password = rsaStream.readString();
  58.             if (password.length() > 30 || password.length() < 3) {
  59.                 session.getRS2ClientEncoder().writePacket(3);
  60.                 return;
  61.             }
  62.             password = MD5Encryption.encrypt(password);
  63.             String unknown = Utilities.longToString(rsaStream.readLong());
  64.             rsaStream.readLong(); // random value
  65.             rsaStream.readLong(); // random value
  66.             stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
  67.             boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
  68.             String username = Utilities.formatPlayerNameForProtocol(stringUsername ? stream.readString() : Utilities.longToString(stream.readLong()));
  69.             Logger.logSimple(this, "World Login Request: " + username);
  70.             int displayMode = stream.readUnsignedByte();
  71.             int screenWidth = stream.readUnsignedShort();
  72.             int screenHeight = stream.readUnsignedShort();
  73.             int unknown2 = stream.readUnsignedByte();
  74.             stream.skip(24); // 24bytes directly from a file, no idea whats there
  75.             String settings = stream.readString();
  76.             int affid = stream.readInt();
  77.             stream.skip(stream.readUnsignedByte()); // useless settings
  78.             MachineInformation machine_information = null;
  79.             int unknown3 = stream.readInt();
  80.             long userFlow = stream.readLong();
  81.             boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
  82.             if (hasAditionalInformation)
  83.                 stream.readString(); // aditionalInformation
  84.             boolean hasJagtheora = stream.readUnsignedByte() == 1;
  85.             boolean js = stream.readUnsignedByte() == 1;
  86.             boolean hc = stream.readUnsignedByte() == 1;
  87.             int unknown4 = stream.readByte();
  88.             int unknown5 = stream.readInt();
  89.             String unknown6 = stream.readString();
  90.             boolean unknown7 = stream.readUnsignedByte() == 1;
  91.             for (int index = 0; index < GameLauncher.getCache().getStore().getIndexes().length; index++) {
  92.                 int crc = GameLauncher.getCache().getStore().getIndexes()[index] == null ? -1011863738 : GameLauncher.getCache().getStore().getIndexes()[index].getCRC();
  93.                 int receivedCRC = stream.readInt();
  94.                 if (crc != receivedCRC && index < 32) {
  95.                     session.getRS2ClientEncoder().writePacket(6);
  96.                     return;
  97.                 }
  98.             }
  99.             Player player = new Player(new PlayerInformation("Brandon", "testing"));
  100.             player.run(player.getPlayerInformation(), session, machine_information, new DisplayInformation(displayMode, screenHeight, screenWidth), new IsaacKeyPair(isaacKeys));
  101.             session.getRS2ClientEncoder().writeLoginInformation(player);
  102.             session.setDecoder(new PacketManager(player, session));
  103.             session.setEncoder(new PacketManager(player, session));
  104.             player.startup();
  105.             break;
  106.         default:
  107.             break;
  108.         }
  109.     }
  110.  
  111.  
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement