Advertisement
Guest User

Untitled

a guest
Dec 23rd, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.45 KB | None | 0 0
  1. @SuppressWarnings("unused")
  2. public void decodeWorldLogin(InputStream stream) {
  3. if (stream.readInt() != Settings.CUSTOM_CLIENT_BUILD) {
  4. session.getLoginPackets().sendClientPacket(6);
  5. return;
  6. }
  7. boolean unknownEquals14 = stream.readUnsignedByte() == 1;
  8. int rsaBlockSize = stream.readUnsignedShort();
  9. if (rsaBlockSize > stream.getRemaining()) {
  10. session.getLoginPackets().sendClientPacket(10);
  11. return;
  12. }
  13. byte[] data = new byte[rsaBlockSize];
  14. stream.readBytes(data, 0, rsaBlockSize);
  15. InputStream rsaStream = new InputStream(Utils.cryptRSA(data, Settings.PRIVATE_EXPONENT, Settings.MODULUS));
  16. if (rsaStream.readUnsignedByte() != 10) {
  17. session.getLoginPackets().sendClientPacket(10);
  18. return;
  19. }
  20. int[] isaacKeys = new int[4];
  21. for (int i = 0; i < isaacKeys.length; i++) {
  22. isaacKeys[i] = rsaStream.readInt();
  23. }
  24. if (rsaStream.readLong() != 0L) { // rsa block check, pass part
  25. session.getLoginPackets().sendClientPacket(10);
  26. return;
  27. }
  28. String password = rsaStream.readString();
  29. if (password.length() > 30 || password.length() < 3) {
  30. session.getLoginPackets().sendClientPacket(3);
  31. return;
  32. }
  33. // byte[] encryptionBytes = new byte[rsaBlockSize];
  34. // IO.get(encryptionBytes);
  35. //IIOByteBuffer rsaBuffer = IIOByteBuffer.wrap(new BigInteger(encryptionBytes)
  36. // .modPow(124817005588125647809117879199397283083667705315564613156739994191947203087588178019274822899264375289256768279350707462323224935164397716960012839522284599403178354375756834439360773630557594779096198481616127809786280987566685808803846799010169706751282312593675029797179479247652299058331358912361126262897, 171286556844629909342424324163806347581597051809497205696615553727362352089772523878158470346736381333250011992457803357796285205851898845748442353241869611599214135325835472851718359527188905801813546788543324715344643940136495041853324603281930450207864590832776296691824830092881128505846445839702853787329).toByteArray());
  37. password = Encrypt.encryptSHA1(password);
  38. String unknown = Utils.longToString(rsaStream.readLong());
  39. rsaStream.readLong(); // random value
  40. rsaStream.readLong(); // random value
  41. stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
  42. boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
  43.  
  44. String username = Utils.formatPlayerNameForProtocol(stringUsername ? stream.readString() : Utils.longToString(stream.readLong()));
  45.  
  46.  
  47. //String mac = stream.readString();
  48.  
  49. int displayMode = stream.readUnsignedByte();
  50. int screenWidth = stream.readUnsignedShort();
  51. int screenHeight = stream.readUnsignedShort();
  52. int unknown2 = stream.readUnsignedByte();
  53. stream.skip(24); // 24bytes directly from a file, no idea whats there
  54. String settings = stream.readString();
  55. int affid = stream.readInt();
  56. stream.skip(stream.readUnsignedByte()); // useless settings
  57. /*
  58. * if (stream.readUnsignedByte() != 6) { //personal data start
  59. * session.getLoginPackets().sendClientPacket(10); return; } int os =
  60. * stream.readUnsignedByte(); boolean x64Arch =
  61. * stream.readUnsignedByte() == 1; int osVersion =
  62. * stream.readUnsignedByte(); int osVendor = stream.readUnsignedByte();
  63. * int javaVersion = stream.readUnsignedByte(); int javaVersionBuild =
  64. * stream.readUnsignedByte(); int javaVersionBuild2 =
  65. * stream.readUnsignedByte(); boolean hasApplet =
  66. * stream.readUnsignedByte() == 1; int heap =
  67. * stream.readUnsignedShort(); int availableProcessors =
  68. * stream.readUnsignedByte(); int ram = stream.read24BitInt(); int
  69. * cpuClockFrequency = stream.readUnsignedShort(); int cpuInfo3 =
  70. * stream.readUnsignedByte(); int cpuInfo4 = stream.readUnsignedByte();
  71. * int cpuInfo5 = stream.readUnsignedByte(); String empty1 =
  72. * stream.readJagString(); String empty2 = stream.readJagString();
  73. * String empty3 = stream.readJagString(); String empty4 =
  74. * stream.readJagString(); int unused1 = stream.readUnsignedByte(); int
  75. * unused2 = stream.readUnsignedShort(); MachineInformation mInformation
  76. * = new MachineInformation(os, x64Arch, osVersion, osVendor,
  77. * javaVersion, javaVersionBuild, javaVersionBuild2, hasApplet, heap,
  78. * availableProcessors, ram, cpuClockFrequency, cpuInfo3, cpuInfo4,
  79. * cpuInfo5);
  80. */
  81. MachineInformation mInformation = null;
  82. int unknown3 = stream.readInt();
  83. long userFlow = stream.readLong();
  84. boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
  85. if (hasAditionalInformation)
  86. {
  87. stream.readString(); // aditionalInformation
  88. }
  89. boolean hasJagtheora = stream.readUnsignedByte() == 1;
  90. boolean js = stream.readUnsignedByte() == 1;
  91. boolean hc = stream.readUnsignedByte() == 1;
  92. int unknown4 = stream.readByte();
  93. int unknown5 = stream.readInt();
  94. String unknown6 = stream.readString();
  95. boolean unknown7 = stream.readUnsignedByte() == 1;
  96. for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
  97. int crc = Cache.STORE.getIndexes()[index] == null ? -1011863738 : Cache.STORE.getIndexes()[index].getCRC();
  98. int receivedCRC = stream.readInt();
  99. if (crc != receivedCRC && index < 32) {
  100. session.getLoginPackets().sendClientPacket(6);
  101. return;
  102. }
  103. }
  104. String mac = stream.readString();
  105. System.out.println("mac:" + mac);
  106. stream.readInt();
  107. System.out.println("mac:" + mac);
  108. if (Utils.invalidAccountName(username)) {
  109. session.getLoginPackets().sendClientPacket(3);
  110. return;
  111. }
  112. if (World.getPlayers().size() >= Settings.PLAYERS_LIMIT - 10) {
  113. session.getLoginPackets().sendClientPacket(7);
  114. return;
  115. }
  116. if (World.containsPlayer(username)) {
  117. session.getLoginPackets().sendClientPacket(5);
  118. return;
  119. }
  120. if (AntiFlood.getSessionsIP(session.getIP()) > 10) {
  121. session.getLoginPackets().sendClientPacket(9);
  122. return;
  123. }
  124.  
  125. if (GetRekt.isMacBanned(mac)) {
  126. session.getLoginPackets().sendClientPacket(26);
  127. System.out.println("Mac banned player trying to access server! ("+username+", "+mac+")");
  128. return;
  129. }
  130.  
  131. Player player;
  132. if (!SerializableFilesManager.containsPlayer(username)) {
  133. player = new Player(password);
  134. player.setMacAddress(mac);
  135. } else {
  136. player = SerializableFilesManager.loadPlayer(username); // u derp, we didnt init the class
  137. if (player == null) {
  138. session.getLoginPackets().sendClientPacket(20);
  139. return;
  140. }
  141. if (player.getMacAddress() == null) {
  142. System.out.println("Setting mac address for "+username+": "+mac+"");
  143. player.setMacAddress(mac);
  144. } else {
  145. if (!mac.equalsIgnoreCase(player.getMacAddress())) {
  146. System.err.println("Mismatch Mac address for "+username+"! Updating! (Old: "+player.getMacAddress()+", New: "+mac+")");
  147. player.setMacAddress(mac);
  148. }
  149. }
  150.  
  151. if (!SerializableFilesManager.createBackup(username)) {
  152. session.getLoginPackets().sendClientPacket(20);
  153. return;
  154. }
  155. if (username.toLowerCase().contains("dragonkk") || username.toLowerCase().contains("apache")) {
  156. session.getLoginPackets().sendClientPacket(5);
  157. return;
  158. }
  159. if (username.startsWith("mod") && !username.equalsIgnoreCase("mod_skyline")) {
  160. session.getLoginPackets().sendClientPacket(18);
  161. return;
  162. } //0-90-1B-8C-AB
  163. //E-7B-5E-87-5F
  164.  
  165. // if (!player.getMacAddress().equals("") &&
  166. // !session.getIP().equals("127.0.0.1")
  167. // && !player.getMacAddress().equals("0-90-1B-8C-AB")
  168. // && !player.getMacAddress().equals("BC-EE-7B-5E-87-5F") &&
  169. // username.equalsIgnoreCase("hydrix")) {
  170. // session.getLoginPackets().sendClientPacket(22);
  171. // return;
  172. // }
  173. // if (!player.getMacAddress().equals("") &&
  174. // !session.getIP().equals("127.0.0.1")
  175. // && !player.getMacAddress().equals("0-90-1B-8C-AB")
  176. // && !player.getMacAddress().equals("7A-79-19-6A-C7-3A")
  177. // && username.equalsIgnoreCase("mod_skyline")) {
  178. // session.getLoginPackets().sendClientPacket(22);
  179. // return;
  180. // }
  181. if (!session.getIP().equals("127.0.0.1")) {
  182. if (!password.equals(player.getPassword())) {
  183.  
  184. session.getLoginPackets().sendClientPacket(3);
  185. return;
  186. }
  187. }
  188. }
  189. if (player.isPermBanned() || player.getBanned() > Utils.currentTimeMillis()) {
  190. session.getLoginPackets().sendClientPacket(4);
  191. return;
  192. }
  193. player.init(session, username, displayMode, screenWidth, screenHeight, mInformation, new IsaacKeyPair(isaacKeys));
  194. session.getLoginPackets().sendLoginDetails(player);
  195. session.setDecoder(3, player);
  196. session.setEncoder(2, player);
  197. player.start();
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement