Advertisement
Guest User

Untitled

a guest
Feb 28th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.98 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. if (World.exiting_start != 0) {
  114. session.getLoginPackets().sendClientPacket(14);
  115. return;
  116. }
  117. int packetSize = stream.readUnsignedShort();
  118. if (packetSize != stream.getRemaining()) {
  119. session.getChannel().close();
  120. return;
  121. }
  122. if (stream.readInt() != Settings.CLIENT_BUILD || stream.readInt() != Settings.CUSTOM_CLIENT_BUILD) {
  123. session.getLoginPackets().sendClientPacket(6);
  124. return;
  125. }
  126.  
  127. String macaddress = stream.readString();
  128. @SuppressWarnings("unused")
  129. boolean unknownEquals14 = stream.readUnsignedByte() == 1;
  130. int unByte = stream.readUnsignedByte();
  131. if (unByte != 10) { // rsa block check
  132. System.out.println("RSA block. Byte: "+unByte);
  133. session.getLoginPackets().sendClientPacket(6);
  134. return;
  135. }
  136. int[] isaacKeys = new int[4];
  137. for (int i = 0; i < isaacKeys.length; i++)
  138. isaacKeys[i] = stream.readInt();
  139. long long1 = stream.readLong();
  140. if (long1 != 0L) { // rsa block check, pass part
  141. session.getLoginPackets().sendClientPacket(6);
  142.  
  143. return;
  144. }
  145. String password = stream.readString();
  146. int n = stream.readInt();
  147. if(n != 10)//custom client detection
  148. {
  149. session.getLoginPackets().sendClientPacket(6);
  150. return;
  151. }
  152. @SuppressWarnings("unused")
  153. String unknown = Utils.longToString(stream.readLong());
  154. stream.readLong(); // random value
  155. stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
  156. String username = Utils
  157. .formatPlayerNameForProtocol(stream.readString());
  158. stream.readUnsignedByte(); // unknown
  159. int displayMode = stream.readUnsignedByte();
  160. int screenWidth = stream.readUnsignedShort();
  161. int screenHeight = stream.readUnsignedShort();
  162. @SuppressWarnings("unused")
  163. int unknown2 = stream.readUnsignedByte();
  164. stream.skip(24); // 24bytes directly from a file, no idea whats there
  165. @SuppressWarnings("unused")
  166. String settings = stream.readString();
  167.  
  168. @SuppressWarnings("unused")
  169. int affid = stream.readInt();
  170. stream.skip(stream.readUnsignedByte()); // useless settings
  171. int unByte1 = stream.readUnsignedByte();
  172.  
  173. stream.readUnsignedByte();
  174. stream.readUnsignedByte();
  175. stream.readUnsignedByte();
  176. stream.readUnsignedByte();
  177. stream.readUnsignedByte();
  178. stream.readUnsignedByte();
  179. stream.readUnsignedByte();
  180. stream.readUnsignedByte();
  181. stream.readUnsignedShort();
  182. stream.readUnsignedByte();
  183. stream.read24BitInt();
  184. stream.readUnsignedShort();
  185. stream.readUnsignedByte();
  186. stream.readUnsignedByte();
  187. stream.readUnsignedByte();
  188. stream.readJagString();
  189. stream.readJagString();
  190. stream.readJagString();
  191. stream.readJagString();
  192. stream.readUnsignedByte();
  193. stream.readUnsignedShort();
  194. @SuppressWarnings("unused")
  195. int unknown3 = stream.readInt();
  196.  
  197. if (unknown3 != 5) {
  198. System.out.println("ii " + unknown3);
  199. session.getLoginPackets().sendClientPacket(10);
  200. return;
  201. }
  202. @SuppressWarnings("unused")
  203. long userFlow = stream.readLong();
  204. boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
  205. if (hasAditionalInformation)
  206. stream.readString(); // aditionalInformation
  207. @SuppressWarnings("unused")
  208. boolean hasJagtheora = stream.readUnsignedByte() == 1;
  209. @SuppressWarnings("unused")
  210. boolean js = stream.readUnsignedByte() == 1;
  211. @SuppressWarnings("unused")
  212. boolean hc = stream.readUnsignedByte() == 1;
  213. for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
  214. int crc = Cache.STORE.getIndexes()[index] == null ? 0 : Cache.STORE
  215. .getIndexes()[index].getCRC();
  216. int receivedCRC = stream.readInt();
  217. if (crc != receivedCRC && index < 32) {
  218. Logger.log(this,
  219. "Invalid CRC at index: "+index+", "+receivedCRC+", "+crc);
  220. session.getLoginPackets().sendClientPacket(6);
  221. return;
  222. }
  223. }
  224. // invalid chars
  225. if ((username.length() <= 0 || username.length() >= 13 || username.contains("?") || username.contains(":")
  226. || username.contains("#") || username.contains("%") || username.contains("&") || username.contains("%")
  227. || username.contains(".") || username.contains(",") || username.startsWith(" ")
  228. || username.endsWith(" ") || username.contains(" ") || username.endsWith("_")
  229. || username.endsWith(" ") || username.endsWith("<") || username.contains("/")
  230. || username.contains("\\") || username.contains("*") || username.contains("\""))) {
  231. session.getLoginPackets().sendClientPacket(3);// 3
  232.  
  233. return;
  234. }
  235. if (username.contains("___")) {
  236. session.getLoginPackets().sendClientPacket(3);
  237. System.out.println("Here 2");
  238. return;
  239. }
  240. if (username.startsWith("_") || username.startsWith("__")) {
  241. session.getLoginPackets().sendClientPacket(3);
  242. System.out.println("Here 3");
  243. return;
  244. }
  245. if (!username.matches("^[a-z0-9_ ]{1,13}$")) {
  246. session.getLoginPackets().sendClientPacket(3);
  247. System.out.println("Here 4");
  248. return;
  249. }
  250.  
  251. //Broken
  252. if (!session.getIP().equals("127.0.0.1")) {
  253. if (AntiFlood.getSessionsIP(session.getIP()) > 5) {
  254. session.getLoginPackets().sendClientPacket(9);
  255. System.out.println("Here 5");
  256. return;
  257. }
  258. }
  259.  
  260. if (World.containsPlayer(username)) {
  261. session.getLoginPackets().sendClientPacket(5);
  262. System.out.println("Here 6");
  263. return;
  264. }
  265. /*
  266. * File file = new
  267. * File("C:/data/loggedIn/"+username+""+Settings.getWorld()); File main
  268. * = new File("C:/data/loggedIn/"+username+"MAIN"); File pvp = new
  269. * File("C:/data/loggedIn/"+username+"PVP"); File admin = new
  270. * File("C:/data/loggedIn/"+username+"ADMIN"); if((main.exists() /*||
  271. * pvp.exists()
  272. */ /*
  273. * || admin.exists()) && !Settings.isArcadeWorld()) {
  274. * System.out.println("this one@@@@@@@");
  275. * session.getLoginPackets().sendClientPacket(5); return; }
  276. */
  277. if (MacBanL.isBanned(macaddress)) {
  278. session.getLoginPackets().sendClientPacket(4);
  279. WriteFile.writeGlobalLog(username + " tried to login with banned MAC address.", "bannedloginattempts",
  280. "bannedloginattempts");
  281. return;
  282. }
  283. /**if (macaddress.length() < 23) {
  284. WriteFile.writeGlobalLog(username + " tried to login with a forged MAC address", "forgedMACS",
  285. "forgedMACS");
  286. return;
  287. }**/
  288. Player player = null;
  289. if (!SerializableFilesManager.containsPlayer(username)) {
  290. if (IPS.contains(session.getIP())) {
  291. session.getLoginPackets().sendClientPacket(9);
  292. System.out.println("Here 9");
  293. return;
  294. }
  295. if (Settings.isAdminWorld()) {
  296. session.getLoginPackets().sendClientPacket(20);
  297. System.out.println("Here 10");
  298. return;
  299. }
  300. if (username.length() < 3) {
  301. session.getLoginPackets().sendClientPacket(3);
  302. System.out.println("Here 11");
  303. return;
  304. }
  305. player = new Player(password);
  306. // IPS.add(session.getIP());
  307. // IPS.add(session.getIP());
  308. } else {
  309. player = SerializableFilesManager.loadPlayer(username);
  310. if (player == null) {
  311. session.getLoginPackets().sendClientPacket(20);
  312. System.out.println("Here 12");
  313. return;
  314. }
  315. if (Settings.isAdminWorld()) {
  316. if ((player.getRights() < 2 || player.getRights() > 2) && !player.isDeveloper && !player.isBetaTester) {
  317. session.getLoginPackets().sendClientPacket(20);
  318. System.out.println("Here 13");
  319.  
  320. return;
  321. }
  322. }
  323. /*
  324. * if(!player.processMasks()) {
  325. * session.getLoginPackets().sendClientPacket(20); return; }
  326. */
  327. if (!SerializableFilesManager.createBackup(username)) {
  328. session.getLoginPackets().sendClientPacket(20);
  329. System.out.println("Here 14");
  330.  
  331. return;
  332. }
  333. if (!player.getPassword().equals(password)) {
  334. session.getLoginPackets().sendClientPacket(3);
  335. System.out.println("Here 15");
  336. return;
  337. }
  338. }
  339. if (player != null) {
  340. if (player.isPermBanned() || player.getBanned() > Utils.currentTimeMillis()) {
  341. if (player.getUsername().equals("luke")) {
  342. player.setBanned(0);
  343. player.banReason = "Unbanned.";
  344. player.setPermBanned(false);
  345. System.out.println("Here 16");
  346. } else {
  347. // session.getWorldPackets().sendClientWarning("This account
  348. // has been banned. Reason: "+player.banReason);
  349. WriteFile.writeGlobalLog(username + " tried to login with banned account.", "bannedloginattempts",
  350. "bannedloginattempts");
  351. System.out.println("Here 17");
  352.  
  353. session.getLoginPackets().sendClientPacket(4);
  354. return;
  355. }
  356. }
  357. player.banReset = true;
  358. }
  359. InetAddress i = null;
  360. try {
  361. i = InetAddress.getLocalHost();
  362. } catch (UnknownHostException e) {
  363. }
  364.  
  365. player.init(session, username, displayMode, screenWidth, screenHeight);
  366. session.getLoginPackets().sendLoginDetails(player);
  367. session.setDecoder(3, player);
  368. session.setEncoder(2, player);
  369. player.start();
  370. player.macaddress = macaddress;
  371. // player.bottingInt = customInt;
  372. // WriteFile.writePlayerLog(username + " Signed in with client ID: " + customInt, "clientints", player);
  373. WriteFile.writePlayerLog(username + " Signed in with Mac Address: " + macaddress, "macaddress", player);
  374. }
  375.  
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement