Advertisement
Guest User

Untitled

a guest
Mar 30th, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. public void decodeLobbyLogin(InputStream stream) {
  2. if (stream.readInt() != Settings.MINOR_VERSION) {
  3. session.getLoginPackets().sendClosingPacket(6);
  4. return;
  5. }
  6. int rsaBlockSize = stream.readUnsignedShort();
  7. if (rsaBlockSize > stream.getRemaining()) {
  8. session.getLoginPackets().sendClosingPacket(10);
  9. return;
  10. }
  11. byte[] data = new byte[rsaBlockSize];
  12. stream.readBytes(data, 0, rsaBlockSize);
  13. InputStream rsaStream = new InputStream(Utils.cryptRSA(data, Settings.PRIVATE_EXPONENT, Settings.MODULUS));
  14. if (rsaStream.readUnsignedByte() != 10) {
  15. session.getLoginPackets().sendClosingPacket(10);
  16. return;
  17. }
  18. int[] isaacKeys = new int[4];
  19. for (int i = 0; i < isaacKeys.length; i++)
  20. isaacKeys[i] = rsaStream.readInt();
  21.  
  22. int unknownType = rsaStream.readUnsignedByte(); // type of data
  23. int unknown = rsaStream.readInt();
  24. if (unknown != 0L) { // rsa block check, pass part
  25. session.getLoginPackets().sendClosingPacket(10);
  26. return;
  27. }
  28.  
  29. String password = rsaStream.readString();
  30. if (password.length() > 30 || password.length() < 3) {
  31. session.getLoginPackets().sendClosingPacket(3);
  32. return;
  33. }
  34. password = Encrypt.encryptSHA1(password);
  35. rsaStream.readLong(); // idk
  36. rsaStream.readLong(); // random value
  37.  
  38.  
  39. stream.xteaDecrypt(isaacKeys, stream.getOffset(), stream.getLength());
  40.  
  41. boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
  42. String username = Utils.formatPlayerNameForProtocol(stringUsername ? stream.readString() : Utils
  43. .longToString(stream.readLong()));
  44.  
  45. int game = stream.readUnsignedByte();
  46. int locale = stream.readUnsignedByte();
  47. int displayMode = stream.readUnsignedByte();
  48. int screenWidth = stream.readUnsignedShort();
  49. int screenHeight = stream.readUnsignedShort();
  50.  
  51. int unknown2 = stream.readUnsignedByte();
  52.  
  53. stream.skip(24);
  54. String settings = stream.readString();
  55. if (!settings.equals(Settings.CLIENT_SETTINGS)) {
  56. session.getLoginPackets().sendClosingPacket(10);
  57. System.out.println(settings + " does not equal " + Settings.CLIENT_SETTINGS);
  58. return;
  59. }
  60. stream.skip(stream.readUnsignedByte()); // useless settings
  61. MachineInformation mInformation = decodeMachineInformation(stream);
  62. int unknown3 = stream.readInt();
  63. String worldServerToken = stream.readString();
  64. if (!worldServerToken.equals(Settings.WORLD_SERVER_TOKEN)) {
  65. //session.getLoginPackets().sendClosingPacket(35);
  66. //System.out.println(worldServerToken + " does not equal " + Settings.CLIENT_SETTINGS);
  67. //return;
  68. }
  69. int affId = stream.readInt();
  70. int clientLoginId = stream.readInt();
  71. if (clientLoginId != Settings.CLIENT_LOGIN_ID) {
  72. session.getLoginPackets().sendClosingPacket(35);
  73. System.out.println(clientLoginId + " does not equal " + Settings.CLIENT_LOGIN_ID);
  74. return;
  75. }
  76. String grabServerToken = stream.readString();
  77. if (!grabServerToken.equals(Settings.GRAB_SERVER_TOKEN)) {
  78. session.getLoginPackets().sendClosingPacket(35);
  79. System.out.println(grabServerToken + " does not equal " + Settings.GRAB_SERVER_TOKEN);
  80. return;
  81. }
  82. boolean unknown7 = stream.readUnsignedByte() == 1;
  83. for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
  84. if (Cache.STORE.getIndexes()[index] == null)
  85. continue;
  86. int crc = Cache.STORE.getIndexes()[index].getCRC();
  87. int receivedCRC = stream.readInt();
  88. if (crc != receivedCRC && index < 30) { // outdated
  89. if (Settings.DEBUG)
  90. Logger.log(this, "Invalid CRC at index: " + index + ", " + receivedCRC + ", " + crc);
  91. session.getLoginPackets().sendClosingPacket(6);
  92. return;
  93. }
  94. }
  95.  
  96. String MACAddress = "";// stream.readString();
  97.  
  98.  
  99. if (Utils.invalidAccountName(username) || username.startsWith("mod") || username.startsWith("m0d")
  100. || username.startsWith("flavius") || username.equalsIgnoreCase("flavius")) {
  101. session.getLoginPackets().sendClosingPacket(31);
  102. return;
  103. }
  104.  
  105. if (AntiFlood.getSessionsIP(session.getIP()) >= 3) {
  106. session.getLoginPackets().sendClosingPacket(9);
  107. return;
  108. }
  109. PlayerHandlerThread.addSession(session, isaacKeys, true, username, password, MACAddress, 0, 0, 0, null);
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement