Advertisement
Guest User

Untitled

a guest
Feb 27th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.05 KB | None | 0 0
  1. package com.rs.net.decoders;
  2.  
  3. import java.net.InetAddress;
  4. import java.net.UnknownHostException;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7.  
  8. import com.rs.Settings;
  9. import com.rs.cache.Cache;
  10. import com.rs.game.World;
  11. import com.rs.game.player.Player;
  12. import com.rs.io.AntiFlood;
  13. import com.rs.io.InputStream;
  14. import com.rs.net.Session;
  15. import com.rs.utils.Logger;
  16. import com.rs.utils.MacBanL;
  17. import com.rs.utils.SerializableFilesManager;
  18. import com.rs.utils.Utils;
  19. import com.rs.utils.WriteFile;
  20.  
  21. public final class LoginPacketsDecoder extends Decoder {
  22.  
  23. public LoginPacketsDecoder(Session session) {
  24. super(session);
  25. }
  26.  
  27. @Override
  28. public void decode(InputStream stream) {
  29. session.setDecoder(-1);
  30. int packetId = stream.readUnsignedByte();
  31. if (packetId == 19)
  32. decodeLobbyLogin(stream);
  33. else if (packetId == 16) // 16 world login
  34. decodeWorldLogin(stream);
  35. else {
  36. if (Settings.DEBUG)
  37. Logger.log(this, "PacketId " + packetId);
  38. session.getChannel().close();
  39. }
  40. }
  41.  
  42. public static List<String> IPS = new ArrayList<String>();
  43.  
  44. private void decodeLobbyLogin(InputStream buffer) {
  45.  
  46. int clientRev = buffer.readInt();
  47. int rsaBlockSize = buffer.readShort(); // RSA block sizeF
  48. int rsaHeaderKey = buffer.readByte(); // RSA header key
  49.  
  50. int[] loginKeys = new int[4];
  51. for (int data = 0; data < 4; data++) {
  52. loginKeys[data] = buffer.readInt();
  53. }
  54. buffer.readLong();
  55. String pass = buffer.readString();
  56. @SuppressWarnings("unused")
  57. long serverSeed = buffer.readLong();
  58. @SuppressWarnings("unused")
  59. long clientSeed = buffer.readLong();
  60.  
  61. buffer.decodeXTEA(loginKeys, buffer.getOffset(), buffer.getLength());
  62. String name = buffer.readString();
  63. boolean isHD = buffer.readByte() == 1;
  64. boolean isResizable = buffer.readByte() == 1;
  65. for (int i = 0; i < 24; i++)
  66. buffer.readByte();
  67. String settings = buffer.readString();
  68.  
  69. @SuppressWarnings("unused")
  70. int unknown = buffer.readInt();
  71. int[] crcValues = new int[35];
  72. for (int i = 0; i < crcValues.length; i++)
  73. crcValues[i] = buffer.readInt();
  74. Player player;
  75.  
  76. if (!SerializableFilesManager.containsPlayer(name)) {
  77. player = new Player(name);
  78. player.setPassword(pass);
  79.  
  80. // session.getLoginPackets().sendClientPacket(2);
  81. // return;
  82. } else {
  83. player = SerializableFilesManager.loadPlayer(name);
  84. if (player == null) {
  85. session.getLoginPackets().sendClientPacket(20);
  86. return;
  87. }
  88. if (!player.getPassword().equals(pass)) {
  89. session.getLoginPackets().sendClientPacket(3);
  90. return;
  91. }
  92. }
  93. if (player.isPermBanned() || (player.getBanned() > System.currentTimeMillis()))
  94. session.getLoginPackets().sendClientPacket(4);
  95. else {
  96. player.init(session, name);
  97. session.getLoginPackets().sendLobbyDetails(player);// sendLoginDetails(player);
  98. session.setDecoder(3, player);
  99. session.setEncoder(2, player);
  100. SerializableFilesManager.savePlayer(player);
  101.  
  102. // player.start();
  103. }
  104. }
  105.  
  106. public void decodeWorldLogin(InputStream stream) {
  107. if (IPS == null)
  108. IPS = new ArrayList<String>();
  109. if (World.exiting_start != 0) {
  110. session.getLoginPackets().sendClientPacket(14);
  111. return;
  112. }
  113. int packetSize = stream.readUnsignedShort();
  114. if (packetSize != stream.getRemaining()) {
  115. session.getChannel().close();
  116. return;
  117. }
  118. if (stream.readInt() != Settings.CLIENT_BUILD || stream.readInt() != Settings.CUSTOM_CLIENT_BUILD) {
  119. session.getLoginPackets().sendClientPacket(6);
  120. return;
  121. }
  122. String macaddress = stream.readString();
  123. @SuppressWarnings("unused")
  124. boolean unknownEquals14 = stream.readUnsignedByte() == 1;
  125. int unByte = stream.readUnsignedByte();
  126. if (unByte != 10) { // rsa block check
  127. System.out.println("no");
  128. session.getLoginPackets().sendClientPacket(10);
  129. return;
  130. }
  131. int[] isaacKeys = new int[4];
  132. for (int i = 0; i < isaacKeys.length; i++)
  133. isaacKeys[i] = stream.readInt();
  134. long long1 = stream.readLong();
  135. if (long1 != 0L) { // rsa block check, pass part
  136.  
  137. session.getLoginPackets().sendClientPacket(10);
  138. return;
  139. }
  140. String password = stream.readString();
  141. int unByte2 = stream.readInt();
  142. if (unByte2 != 10) { // rsa block check
  143. System.out.println("no2 ");
  144. session.getLoginPackets().sendClientPacket(10);
  145. return;
  146. }
  147. @SuppressWarnings("unused")
  148. String unknown = Utils.longToString(stream.readLong());
  149. stream.readLong(); // random value
  150. stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
  151. String username = Utils.formatPlayerNameForProtocol(stream.readString());
  152. int displayMode = stream.readUnsignedByte();
  153. int screenWidth = stream.readUnsignedShort();
  154. int screenHeight = stream.readUnsignedShort();
  155. int customInt = stream.readInt();
  156. if (customInt == 12) {
  157. // @SuppressWarnings("unused")
  158. // int unknown2 = stream.readUnsignedByte();
  159. }
  160. stream.skip(24); // 24bytes directly from a file, no idea whats ther
  161. //@SuppressWarnings("unused")
  162. String settings = stream.readString();
  163. if(!settings.substring(2).equalsIgnoreCase("wwGlrZHF5gJcZl7tf7KSRh0MZLhiU0gIF0xDX6DwZ-Qk"))
  164. {
  165. System.err.println("this one?D1F " + settings);
  166. session.getLoginPackets().sendClientPacket(7);
  167. return;
  168. }
  169. @SuppressWarnings("unused")
  170. int affid = stream.readInt();
  171. int clientcheck2 = stream.readUnsignedByte(); // useless settings
  172. /*if(clientcheck2 != 500) {
  173. System.err.println("this one?DF");
  174. session.getLoginPackets().sendClientPacket(6);
  175. return;
  176. }*/
  177. int unByte1 = stream.readInt();
  178. if (unByte1 != 500) { // rsa block check
  179. System.out.println("no2 " + unByte1);
  180. session.getLoginPackets().sendClientPacket(10);
  181. return;
  182. }
  183.  
  184.  
  185. stream.readUnsignedByte();
  186. stream.readUnsignedByte();
  187. stream.readUnsignedByte();
  188. stream.readUnsignedByte();
  189. stream.readUnsignedByte();
  190. stream.readUnsignedByte();
  191. stream.readUnsignedByte();
  192. stream.readUnsignedByte();
  193. stream.readUnsignedShort();
  194. stream.readUnsignedByte();
  195. stream.read24BitInt();
  196. stream.readUnsignedShort();
  197. stream.readUnsignedByte();
  198. stream.readUnsignedByte();
  199. stream.readUnsignedByte();
  200. stream.readJagString();
  201. stream.readJagString();
  202. stream.readJagString();
  203. stream.readJagString();
  204. stream.readUnsignedByte();
  205. stream.readUnsignedShort();
  206. @SuppressWarnings("unused")
  207. int unknown3 = stream.readInt();
  208. @SuppressWarnings("unused")
  209. long userFlow = stream.readLong();
  210. boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
  211. if (hasAditionalInformation)
  212. stream.readString(); // aditionalInformation
  213. @SuppressWarnings("unused")
  214. boolean hasJagtheora = stream.readUnsignedByte() == 1;
  215. @SuppressWarnings("unused")
  216. boolean js = stream.readUnsignedByte() == 1;
  217. @SuppressWarnings("unused")
  218. boolean hc = stream.readUnsignedByte() == 1;
  219. /* for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
  220. int crc = Cache.STORE.getIndexes()[index] == null ? 0 : Cache.STORE.getIndexes()[index].getCRC();
  221. int receivedCRC = stream.readInt();
  222. if (crc != receivedCRC && index < 32) {
  223. Logger.log(this,
  224. "Invalid CRC at index: "+index+", "+receivedCRC+", "+crc);
  225. session.getLoginPackets().sendClientPacket(6);
  226. return;
  227. }
  228. }*/
  229. // invalid chars
  230. if ((username.length() <= 0 || username.length() >= 13 || username.contains("?") || username.contains(":")
  231. || username.contains("#") || username.contains("%") || username.contains("&") || username.contains("%")
  232. || username.contains(".") || username.contains(",") || username.startsWith(" ")
  233. || username.endsWith(" ") || username.contains(" ") || username.endsWith("_")
  234. || username.endsWith(" ") || username.endsWith("<") || username.contains("/")
  235. || username.contains("\\") || username.contains("*") || username.contains("\""))) {
  236. session.getLoginPackets().sendClientPacket(3);// 3
  237.  
  238. return;
  239. }
  240. if (username.contains("___")) {
  241. session.getLoginPackets().sendClientPacket(3);
  242. System.out.println("Here 2");
  243. return;
  244. }
  245. if (username.startsWith("_") || username.startsWith("__")) {
  246. session.getLoginPackets().sendClientPacket(3);
  247. System.out.println("Here 3");
  248. return;
  249. }
  250. if (!username.matches("^[a-z0-9_ ]{1,13}$")) {
  251. session.getLoginPackets().sendClientPacket(3);
  252. System.out.println("Here 4");
  253. return;
  254. }
  255.  
  256. //Broken
  257. if (!session.getIP().equals("127.0.0.1")) {
  258. if (AntiFlood.getSessionsIP(session.getIP()) > 5) {
  259. session.getLoginPackets().sendClientPacket(9);
  260. System.out.println("Here 5");
  261. return;
  262. }
  263. }
  264.  
  265. if (World.containsPlayer(username)) {
  266. session.getLoginPackets().sendClientPacket(5);
  267. System.out.println("Here 6");
  268. return;
  269. }
  270. /*
  271. * File file = new
  272. * File("C:/data/loggedIn/"+username+""+Settings.getWorld()); File main
  273. * = new File("C:/data/loggedIn/"+username+"MAIN"); File pvp = new
  274. * File("C:/data/loggedIn/"+username+"PVP"); File admin = new
  275. * File("C:/data/loggedIn/"+username+"ADMIN"); if((main.exists() /*||
  276. * pvp.exists()
  277. */ /*
  278. * || admin.exists()) && !Settings.isArcadeWorld()) {
  279. * System.out.println("this one@@@@@@@");
  280. * session.getLoginPackets().sendClientPacket(5); return; }
  281. */
  282. if (MacBanL.isBanned(macaddress)) {
  283. session.getLoginPackets().sendClientPacket(4);
  284. WriteFile.writeGlobalLog(username + " tried to login with banned MAC address.", "bannedloginattempts",
  285. "bannedloginattempts");
  286. return;
  287. }
  288. /**if (macaddress.length() < 23) {
  289. WriteFile.writeGlobalLog(username + " tried to login with a forged MAC address", "forgedMACS",
  290. "forgedMACS");
  291. return;
  292. }**/
  293. Player player = null;
  294. if (!SerializableFilesManager.containsPlayer(username)) {
  295. if (IPS.contains(session.getIP())) {
  296. session.getLoginPackets().sendClientPacket(9);
  297. System.out.println("Here 9");
  298. return;
  299. }
  300. if (Settings.isAdminWorld()) {
  301. session.getLoginPackets().sendClientPacket(20);
  302. System.out.println("Here 10");
  303. return;
  304. }
  305. if (username.length() < 3) {
  306. session.getLoginPackets().sendClientPacket(3);
  307. System.out.println("Here 11");
  308. return;
  309. }
  310. player = new Player(password);
  311. // IPS.add(session.getIP());
  312. // IPS.add(session.getIP());
  313. } else {
  314. player = SerializableFilesManager.loadPlayer(username);
  315. if (player == null) {
  316. session.getLoginPackets().sendClientPacket(20);
  317. System.out.println("Here 12");
  318. return;
  319. }
  320. if (Settings.isAdminWorld()) {
  321. if ((player.getRights() < 2 || player.getRights() > 2) && !player.isDeveloper && !player.isBetaTester) {
  322. session.getLoginPackets().sendClientPacket(20);
  323. System.out.println("Here 13");
  324.  
  325. return;
  326. }
  327. }
  328. /*
  329. * if(!player.processMasks()) {
  330. * session.getLoginPackets().sendClientPacket(20); return; }
  331. */
  332. if (!SerializableFilesManager.createBackup(username)) {
  333. session.getLoginPackets().sendClientPacket(20);
  334. System.out.println("Here 14");
  335.  
  336. return;
  337. }
  338. if (!player.getPassword().equals(password)) {
  339. session.getLoginPackets().sendClientPacket(3);
  340. System.out.println("Here 15");
  341. return;
  342. }
  343. }
  344. if (player != null) {
  345. if (player.isPermBanned() || player.getBanned() > Utils.currentTimeMillis()) {
  346. if (player.getUsername().equals("luke")) {
  347. player.setBanned(0);
  348. player.banReason = "Unbanned.";
  349. player.setPermBanned(false);
  350. System.out.println("Here 16");
  351. } else {
  352. // session.getWorldPackets().sendClientWarning("This account
  353. // has been banned. Reason: "+player.banReason);
  354. WriteFile.writeGlobalLog(username + " tried to login with banned account.", "bannedloginattempts",
  355. "bannedloginattempts");
  356. System.out.println("Here 17");
  357.  
  358. session.getLoginPackets().sendClientPacket(4);
  359. return;
  360. }
  361. }
  362. player.banReset = true;
  363. }
  364. InetAddress i = null;
  365. try {
  366. i = InetAddress.getLocalHost();
  367. } catch (UnknownHostException e) {
  368. }
  369.  
  370. player.init(session, username, displayMode, screenWidth, screenHeight);
  371. session.getLoginPackets().sendLoginDetails(player);
  372. session.setDecoder(3, player);
  373. session.setEncoder(2, player);
  374. player.start();
  375. player.macaddress = macaddress;
  376. player.bottingInt = customInt;
  377. WriteFile.writePlayerLog(username + " Signed in with client ID: " + customInt, "clientints", player);
  378. WriteFile.writePlayerLog(username + " Signed in with Mac Address: " + macaddress, "macaddress", player);
  379. }
  380.  
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement