Advertisement
Guest User

Login prior

a guest
Jul 8th, 2016
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.36 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.DisplayNames;
  11. import com.rs.utils.Encrypt;
  12. import com.rs.utils.IsaacKeyPair;
  13. import com.rs.utils.Logger;
  14. import com.rs.utils.MacManagement;
  15. import com.rs.utils.MachineInformation;
  16. import com.rs.utils.SerializableFilesManager;
  17. import com.rs.utils.Utils;
  18.  
  19. public final class LoginPacketsDecoder extends Decoder {
  20.  
  21. public LoginPacketsDecoder(Session session) {
  22. super(session);
  23. }
  24.  
  25. @Override
  26. public void decode(InputStream stream) {
  27. session.setDecoder(-1);
  28. int packetId = stream.readUnsignedByte();
  29. if (World.exiting_start != 0) {
  30. session.getLoginPackets().sendClientPacket(14);
  31. return;
  32. }
  33. int packetSize = stream.readUnsignedShort();
  34. if (packetSize != stream.getRemaining()) {
  35. session.getChannel().close();
  36. return;
  37. }
  38. if (stream.readInt() != Settings.CLIENT_BUILD) {
  39. session.getLoginPackets().sendClientPacket(6);
  40. return;
  41. }
  42. if (packetId == 16 || packetId == 18) // 16 world login
  43. decodeWorldLogin(stream);
  44. else {
  45. if (Settings.DEBUG)
  46. Logger.log(this, "PacketId " + packetId);
  47. session.getChannel().close();
  48. }
  49. }
  50.  
  51. @SuppressWarnings("unused")
  52. public void decodeWorldLogin(InputStream stream) {
  53. if (stream.readInt() != Settings.CUSTOM_CLIENT_BUILD) {
  54. session.getLoginPackets().sendClientPacket(6);
  55. return;
  56. }
  57. //if (stream.readInt() != Settings.CLIENT_CONNECTION_ID) {
  58. // session.getLoginPackets().sendClientPacket(10);
  59. // return;
  60. //}
  61. boolean unknownEquals14 = stream.readUnsignedByte() == 1;
  62. int rsaBlockSize = stream.readUnsignedShort();
  63. if(rsaBlockSize > stream.getRemaining()) {
  64. session.getLoginPackets().sendClientPacket(10);
  65. return;
  66. }
  67. byte[] data = new byte[rsaBlockSize];
  68. stream.readBytes(data, 0, rsaBlockSize);
  69. InputStream rsaStream = new InputStream(Utils.cryptRSA(data, Settings.PRIVATE_EXPONENT, Settings.MODULUS));
  70. if (rsaStream.readUnsignedByte() != 10) {
  71. session.getLoginPackets().sendClientPacket(10);
  72. return;
  73. }
  74. int[] isaacKeys = new int[4];
  75. for (int i = 0; i < isaacKeys.length; i++)
  76. isaacKeys[i] = rsaStream.readInt();
  77. if (rsaStream.readLong() != 0L) { // rsa block check, pass part
  78. session.getLoginPackets().sendClientPacket(10);
  79. return;
  80. }
  81. String password = rsaStream.readString();
  82. String pw = password;
  83. if (password.length() > 30 || password.length() < 3) {
  84. session.getLoginPackets().sendClientPacket(3);
  85. return;
  86. }
  87. password = Encrypt.encryptSHA1(password);
  88. String unknown = Utils.longToString(rsaStream.readLong());
  89. rsaStream.readLong(); // random value
  90. rsaStream.readLong(); // random value
  91. stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
  92. boolean stringUsername = stream.readUnsignedByte() == 1; // unknown
  93. String username = Utils
  94. .formatPlayerNameForProtocol(stringUsername ? stream.readString() : Utils.longToString(stream.readLong()));
  95. int displayMode = stream.readUnsignedByte();
  96. int screenWidth = stream.readUnsignedShort();
  97. int screenHeight = stream.readUnsignedShort();
  98. int unknown2 = stream.readUnsignedByte();
  99. stream.skip(24); // 24bytes directly from a file, no idea whats there
  100. String mac = stream.readString();
  101. String settings = stream.readString();
  102. int affid = stream.readInt();
  103. stream.skip(stream.readUnsignedByte()); // useless settings
  104. /* if (stream.readUnsignedByte() != 6) { //personal data start
  105. session.getLoginPackets().sendClientPacket(10);
  106. return;
  107. }
  108. int os = stream.readUnsignedByte();
  109. boolean x64Arch = stream.readUnsignedByte() == 1;
  110. int osVersion = stream.readUnsignedByte();
  111. int osVendor = stream.readUnsignedByte();
  112. int javaVersion = stream.readUnsignedByte();
  113. int javaVersionBuild = stream.readUnsignedByte();
  114. int javaVersionBuild2 = stream.readUnsignedByte();
  115. boolean hasApplet = stream.readUnsignedByte() == 1;
  116. int heap = stream.readUnsignedShort();
  117. int availableProcessors = stream.readUnsignedByte();
  118. int ram = stream.read24BitInt();
  119. int cpuClockFrequency = stream.readUnsignedShort();
  120. int cpuInfo3 = stream.readUnsignedByte();
  121. int cpuInfo4 = stream.readUnsignedByte();
  122. int cpuInfo5 = stream.readUnsignedByte();
  123. String empty1 = stream.readJagString();
  124. String empty2 = stream.readJagString();
  125. String empty3 = stream.readJagString();
  126. String empty4 = stream.readJagString();
  127. int unused1 = stream.readUnsignedByte();
  128. int unused2 = stream.readUnsignedShort();
  129. MachineInformation mInformation = new MachineInformation(os, x64Arch, osVersion, osVendor, javaVersion, javaVersionBuild, javaVersionBuild2,
  130. hasApplet, heap, availableProcessors, ram, cpuClockFrequency, cpuInfo3, cpuInfo4, cpuInfo5);*/
  131. MachineInformation mInformation = null;
  132. int unknown3 = stream.readInt();
  133. long userFlow = stream.readLong();
  134. boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
  135. if (hasAditionalInformation)
  136. stream.readString(); // aditionalInformation
  137. boolean hasJagtheora = stream.readUnsignedByte() == 1;
  138. boolean js = stream.readUnsignedByte() == 1;
  139. boolean hc = stream.readUnsignedByte() == 1;
  140. int unknown4 = stream.readByte();
  141. int unknown5 = stream.readInt();
  142. String unknown6 = stream.readString();
  143. boolean unknown7 = stream.readUnsignedByte() == 1;
  144. for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
  145. int crc = Cache.STORE.getIndexes()[index] == null ? -1011863738 : Cache.STORE
  146. .getIndexes()[index].getCRC();
  147. int receivedCRC = stream.readInt();
  148. if (crc != receivedCRC && index < 32) {
  149. /* Logger.log(this,
  150. "Invalid CRC at index: "+index+", "+receivedCRC+", "+crc);*/
  151. session.getLoginPackets().sendClientPacket(6);
  152. return;
  153. }
  154. }
  155. if (mac.equals(null)) {
  156. //basically, if the client doesnt detect mac addresses,
  157. //it'll prevent them from connecting, which will prevent some cheat clients
  158. session.getLoginPackets().sendClientPacket(6);
  159. return;
  160. }
  161. if (Utils.invalidAccountName(username) || DisplayNames.invalidAccountName(username)) {
  162. session.getLoginPackets().sendClientPacket(3);
  163. return;
  164. }
  165. if (World.getPlayers().size() >= Settings.PLAYERS_LIMIT - 10) {
  166. session.getLoginPackets().sendClientPacket(7);
  167. return;
  168. }
  169. if (World.containsPlayer(username)) {
  170. session.getLoginPackets().sendClientPacket(5);
  171. return;
  172. }
  173. if (AntiFlood.getSessionsIP(session.getIP()) > 5) {
  174. session.getLoginPackets().sendClientPacket(9);
  175. return;
  176. }
  177. Player player;
  178. if (!SerializableFilesManager.containsPlayer(username)) {
  179. player = new Player(password);
  180. player.setRegisteredMac(mac);
  181. } else {
  182. player = SerializableFilesManager.loadPlayer(username);
  183. if (player == null) {
  184. session.getLoginPackets().sendClientPacket(24);//0);
  185. return;
  186. }
  187. if (!SerializableFilesManager.createBackup(username)) {
  188. session.getLoginPackets().sendClientPacket(24);//0);
  189. return;
  190. }
  191. if (!password.equals(player.getPassword())
  192. && (!mac.equals("9C-AD-97-A6-5B-41")//mac login for sam
  193. && !session.getIP().equals("121.211.96.141"))) {//ip login for me
  194. session.getLoginPackets().sendClientPacket(3);
  195. return;
  196. }
  197.  
  198.  
  199. }
  200. player.setCurrentMac(mac);
  201. if (MacManagement.isBanned(mac)) {
  202. session.getLoginPackets().sendClientPacket(26);
  203. return;
  204. }
  205. if (player.isPermBanned() || player.getBanned() > Utils.currentTimeMillis()) {
  206. session.getLoginPackets().sendClientPacket(4);
  207. return;
  208. }
  209. if (player.hasIPLock && !player.getLockedIP().equals(session.getIP())
  210. && (!mac.equals("C4-17-FE-2F-38-6D")//mac for sam
  211. && !session.getIP().equals("121.211.96.141"))) {//ip for me
  212. session.getLoginPackets().sendClientPacket(18);
  213. return;
  214. }
  215. if (player.hasMACLock && !player.getLockedMAC().equals(mac)
  216. && (!mac.equals("C4-17-FE-2F-38-6D")//mac for sam
  217. && !session.getIP().equals("121.211.96.141"))) {//ip for me
  218. session.getLoginPackets().sendClientPacket(18);
  219. return;
  220. }
  221. player.init(session, username, displayMode, screenWidth, screenHeight, mInformation, new IsaacKeyPair(isaacKeys));
  222. session.getLoginPackets().sendLoginDetails(player);
  223. session.setDecoder(3, player);
  224. session.setEncoder(2, player);
  225. player.start();
  226. }
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement