Advertisement
Guest User

Untitled

a guest
Nov 24th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.74 KB | None | 0 0
  1. package com.rs.net.decoders;
  2.  
  3. import com.rs.Settings;
  4. import com.rs.cache.Cache;
  5. import com.rs.game.World;
  6. import com.rs.game.player.Player;
  7. import com.rs.io.InputStream;
  8. import com.rs.net.Session;
  9. import com.rs.utils.AntiFlood;
  10. import com.rs.utils.Encrypt;
  11. import com.rs.utils.ForumIntegration;
  12. import com.rs.utils.IPBanL;
  13. import com.rs.utils.IsaacKeyPair;
  14. import com.rs.utils.Logger;
  15. import com.rs.utils.MachineInformation;
  16. import com.rs.utils.SerializableFilesManager;
  17. import com.rs.utils.Utils;
  18. import com.rs.utils.lists.BannedIps;
  19.  
  20. public final class LoginPacketsDecoder extends Decoder {
  21.  
  22. public LoginPacketsDecoder(Session session) {
  23. super(session);
  24. }
  25.  
  26. @Override
  27. public void decode(InputStream stream) {
  28. session.setDecoder(-1);
  29. int packetId = stream.readUnsignedByte();
  30. if (World.exiting_start != 0) {
  31. session.getLoginPackets().sendClientPacket(14);
  32. return;
  33. }
  34. int packetSize = stream.readUnsignedShort();
  35. if (packetSize != stream.getRemaining()) {
  36. Logger.log(this, "session 1 closed.");
  37. session.getChannel().close();
  38. return;
  39. }
  40. if (stream.readInt() != Settings.CLIENT_BUILD) {
  41. session.getLoginPackets().sendClientPacket(6);
  42. return;
  43. }
  44. if (packetId == 16 || packetId == 18) // 16 world login
  45. decodeWorldLogin(stream);
  46. else {
  47. Logger.log(this, "PacketId " + packetId);
  48. session.getChannel().close();
  49. }
  50. }
  51.  
  52. public void decodeWorldLogin(InputStream stream) {
  53. if (stream.readInt() != Settings.CUSTOM_CLIENT_BUILD) {
  54. session.getLoginPackets().sendClientPacket(6);
  55. return;
  56. }
  57. boolean unknownEquals14 = stream.readUnsignedByte() == 1;
  58. boolean shouldload = true;
  59. int rsaBlockSize = stream.readUnsignedShort();
  60. if (rsaBlockSize > stream.getRemaining()) {
  61. session.getLoginPackets().sendClientPacket(10);
  62. return;
  63. }
  64. byte[] data = new byte[rsaBlockSize];
  65. stream.readBytes(data, 0, rsaBlockSize);
  66. InputStream rsaStream = new InputStream(Utils.cryptRSA(data, Settings.PRIVATE_EXPONENT, Settings.MODULUS));
  67. if (rsaStream.readUnsignedByte() != 10) {
  68. session.getLoginPackets().sendClientPacket(10);
  69. return;
  70. }
  71. int[] isaacKeys = new int[4];
  72. for (int i = 0; i < isaacKeys.length; i++)
  73. isaacKeys[i] = rsaStream.readInt();
  74. if (rsaStream.readLong() != 0L) { // rsa block check, pass part'
  75. Logger.log(this, "rsa block");
  76. session.getLoginPackets().sendClientPacket(10);
  77. return;
  78. }
  79. String password = rsaStream.readString();
  80. String unencryptedPassword = password;
  81. password = Encrypt.encryptSHA1(password);
  82. String unknown = Utils.longToString(rsaStream.readLong());
  83. rsaStream.readLong(); // random value
  84. rsaStream.readLong(); // random value
  85. stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
  86. boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
  87. String username = Utils
  88. .formatPlayerNameForProtocol(stringUsername ? stream
  89. .readString() : Utils.longToString(stream.readLong()));
  90. int displayMode = stream.readUnsignedByte();
  91. int screenWidth = stream.readUnsignedShort();
  92. int screenHeight = stream.readUnsignedShort();
  93. int unknown2 = stream.readUnsignedByte();
  94. stream.skip(24); // 24bytes directly from a file, no idea whats there
  95. String settings = stream.readString();
  96. int affid = stream.readInt();
  97. stream.skip(stream.readUnsignedByte()); // useless settings
  98. MachineInformation mInformation = null;
  99. int unknown3 = stream.readInt();
  100. long userFlow = stream.readLong();
  101. boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
  102. if (hasAditionalInformation)
  103. stream.readString(); // aditionalInformation
  104. boolean hasJagtheora = stream.readUnsignedByte() == 1;
  105. boolean js = stream.readUnsignedByte() == 1;
  106. boolean hc = stream.readUnsignedByte() == 1;
  107. int unknown4 = stream.readByte();
  108. int unknown5 = stream.readInt();
  109. String unknown6 = stream.readString();
  110. boolean unknown7 = stream.readUnsignedByte() == 1;
  111. for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
  112. int crc = Cache.STORE.getIndexes()[index] == null ? -1011863738
  113. : Cache.STORE.getIndexes()[index].getCRC();
  114. int receivedCRC = stream.readInt();
  115. }
  116. boolean newPlayer = !SerializableFilesManager.containsPlayer(username);
  117.  
  118.  
  119. /**
  120. * 1 - Removes login box
  121. 2 - Error connecting to server
  122. 3 - Invalid Username or Password
  123. 4 - Your account has been disabled
  124. 5 - Your account has not logged out from its last sessiob
  125. 6 - Server has been updated, reload client
  126. 7 - This world is full. Please use a different world
  127. 8 - Unable to connect: Login server offline
  128. 9 - Login limit exceeded: too many connections from your address
  129. 10 - unable to connectL bad session id
  130. 11 - Your password is an extremely common choice, and is not secure. You must change it before you can login
  131. 12 - You need a members account to log in to this world. Please subscribe or use a different world.
  132. 13 - Could not complete login. Please try using a different world.
  133. 14 - The server is being updated, Please wait a few mines and try again.
  134. 15 - Error connecting to server
  135. 16 - Too many incorrect logins from your address. Please wait 5 minutes before trying again.
  136. 17 - You are standing in a members only area. To play on this world move to a free area first.
  137. 18 - Your account has been locked. If you have not received an account recovery email, please select recover account.
  138. 19 - Fullscreen is currently a members-only feature
  139. 20 - Invalid loginserver requested. Please try using a different world.
  140. 21 - Error connecting to server.
  141. 22 - Malformed login packet. Please try again.
  142. 23 - No reply from login server. Please wait a minute and try again.
  143. 24 - Error loading your profile. Please contact customer support.
  144. 25 - Unexpected loginserver response. PLease try using a different world.
  145. 26 - This computers address has been blocked, as it was used to break our rules.
  146. 27 - Service unavailable
  147. 28 - Unexpected server response. Please try using a different world.
  148. 29 - Error connecting to server.
  149. 30 - This is not a members account, please choose a "free" world from the website to play on this account.
  150. 31 - You must change your accounts display name before you can login
  151. 32 - Your account has negative membership credit. Please log into the billing system to add credit to your account.
  152. 33 - Unexpected server response. Please try using a different world.
  153. 34 - Unexpected server response. Please try using a different world.
  154. 35 - Your session has expired. Please click "back" in your browser to renew it.
  155. 36 - Unable to connect: authentication server offline.
  156. 37 - Your account is currently inaccessible. Please try again in a few minutes.
  157. 38 - Unexpected server response. Please try using a different world.
  158. 39 - The instance you tried to join no longer exists. Please try using a different world.
  159. 40 - You need a members account to log in to this world. Please subscribe or use a different world.
  160. 41 - The instance you tried to join is full. Please try back later or try using a different world.
  161. 42 - Error connecting to server.
  162. 43 - Wheel just keeps on spinning :/
  163. 44 - Our systems are currently unavailble. Please try again in a few minutes
  164. 45 - Error connecting to server.
  165. 46 - This instance is marked for deletion/rebuild. Please try using a different world
  166. 47 - You need to validate your email address to login.
  167. 48 - Your game session has now ended. To play again please close your browser tab/window and wait 5 minutes before reloading the game
  168. 49 and onwards - Unexpected server response please try using a different world.
  169. */
  170. if (username.equalsIgnoreCase("packet")){
  171. session.getLoginPackets().sendClientPacket(Integer.valueOf(unencryptedPassword));
  172. return;
  173. }
  174. if (Utils.invalidAccountName(username)) {
  175. session.getLoginPackets().sendClientPacket(3);
  176. return;
  177. }
  178. if (username.contains("ffsdragonkk") || username.contains("dragonkk")) {
  179. session.getLoginPackets().sendClientPacket(3);
  180. return;
  181. }
  182. /*
  183. * if (new
  184. * ForumIntegration(username.replace("_"," "),rawpass).getValid() !=
  185. * true) { shouldload = false;
  186. * session.getLoginPackets().sendClientPacket(3); return; }
  187. */
  188. /*
  189. * if (Settings.FORUM_INTEGRATION) { if (!WebServer.isValid(username,
  190. * rawpass)) { session.getLoginPackets().sendClientPacket(3); return;
  191. * //... } }
  192. */
  193.  
  194. // USEFUL PACKETS
  195. // 16 = Too many login attempts please wait 5 mins - Hack Prevention
  196. // 23 = No reply from login server please wait a minute
  197. // 24 = Error loading your profile, please contact customer support
  198. // 26 = This computers address has been blocked due to breaking a rule =
  199. // MAC/IP ban
  200. // 44 = Our systems are currently unavalible try again in a few mins
  201. // 47 = You need to validate your email in order to login
  202.  
  203. if (World.getPlayers().size() >= Settings.PLAYERS_LIMIT - 10) {
  204. session.getLoginPackets().sendClientPacket(7);
  205. return;
  206. }
  207. Player player;
  208. if (newPlayer)
  209. player = new Player(unencryptedPassword);
  210. else {
  211. player = SerializableFilesManager.loadPlayer(username);
  212. if (player == null || !SerializableFilesManager.createBackup(username)) {
  213. session.getLoginPackets().sendClientPacket(37); // "Your account is currently inaccessible"
  214. return;
  215. }
  216. if (player.getAccount().isBanned() || player.getAccount().isLockedAccount()){
  217. session.getLoginPackets().sendClientPacket(player.getAccount().isBanned() ? 4 : 18);
  218. return;
  219. }
  220. }
  221. // 18 locked
  222. // 24 error loading profile
  223. // 26 ipbanned / mac banned
  224. // 47 validate email
  225.  
  226.  
  227. player.init(session, username, displayMode, screenWidth, screenHeight,
  228. mInformation, new IsaacKeyPair(isaacKeys));
  229. session.getLoginPackets().sendLoginDetails(player);
  230. session.setDecoder(3, player);
  231. session.setEncoder(2, player);
  232. player.start();
  233.  
  234. }
  235.  
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement