Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.rs.net.decoders;
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- import java.util.ArrayList;
- import java.util.List;
- import com.rs.Settings;
- import com.rs.cache.Cache;
- import com.rs.game.World;
- import com.rs.game.player.Player;
- import com.rs.io.AntiFlood;
- import com.rs.io.InputStream;
- import com.rs.net.Session;
- import com.rs.utils.Logger;
- import com.rs.utils.MacBanL;
- import com.rs.utils.SerializableFilesManager;
- import com.rs.utils.Utils;
- import com.rs.utils.WriteFile;
- public final class LoginPacketsDecoder extends Decoder {
- public LoginPacketsDecoder(Session session) {
- super(session);
- }
- @Override
- public void decode(InputStream stream) {
- session.setDecoder(-1);
- int packetId = stream.readUnsignedByte();
- if (packetId == 19)
- decodeLobbyLogin(stream);
- else if (packetId == 16) // 16 world login
- decodeWorldLogin(stream);
- else {
- if (Settings.DEBUG)
- Logger.log(this, "PacketId " + packetId);
- session.getChannel().close();
- }
- }
- public static List<String> IPS = new ArrayList<String>();
- private void decodeLobbyLogin(InputStream buffer) {
- int clientRev = buffer.readInt();
- int rsaBlockSize = buffer.readShort(); // RSA block sizeF
- int rsaHeaderKey = buffer.readByte(); // RSA header key
- int[] loginKeys = new int[4];
- for (int data = 0; data < 4; data++) {
- loginKeys[data] = buffer.readInt();
- }
- buffer.readLong();
- String pass = buffer.readString();
- @SuppressWarnings("unused")
- long serverSeed = buffer.readLong();
- @SuppressWarnings("unused")
- long clientSeed = buffer.readLong();
- buffer.decodeXTEA(loginKeys, buffer.getOffset(), buffer.getLength());
- String name = buffer.readString();
- boolean isHD = buffer.readByte() == 1;
- boolean isResizable = buffer.readByte() == 1;
- for (int i = 0; i < 24; i++)
- buffer.readByte();
- String settings = buffer.readString();
- @SuppressWarnings("unused")
- int unknown = buffer.readInt();
- int[] crcValues = new int[35];
- for (int i = 0; i < crcValues.length; i++)
- crcValues[i] = buffer.readInt();
- Player player;
- if (!SerializableFilesManager.containsPlayer(name)) {
- player = new Player(name);
- player.setPassword(pass);
- // session.getLoginPackets().sendClientPacket(2);
- // return;
- } else {
- player = SerializableFilesManager.loadPlayer(name);
- if (player == null) {
- session.getLoginPackets().sendClientPacket(20);
- return;
- }
- if (!player.getPassword().equals(pass)) {
- session.getLoginPackets().sendClientPacket(3);
- return;
- }
- }
- if (player.isPermBanned() || (player.getBanned() > System.currentTimeMillis()))
- session.getLoginPackets().sendClientPacket(4);
- else {
- player.init(session, name);
- session.getLoginPackets().sendLobbyDetails(player);// sendLoginDetails(player);
- session.setDecoder(3, player);
- session.setEncoder(2, player);
- SerializableFilesManager.savePlayer(player);
- // player.start();
- }
- }
- public void decodeWorldLogin(InputStream stream) {
- if (IPS == null)
- IPS = new ArrayList<String>();
- if (World.exiting_start != 0) {
- session.getLoginPackets().sendClientPacket(14);
- return;
- }
- int packetSize = stream.readUnsignedShort();
- if (packetSize != stream.getRemaining()) {
- session.getChannel().close();
- return;
- }
- if (stream.readInt() != Settings.CLIENT_BUILD || stream.readInt() != Settings.CUSTOM_CLIENT_BUILD) {
- session.getLoginPackets().sendClientPacket(6);
- return;
- }
- String macaddress = stream.readString();
- @SuppressWarnings("unused")
- boolean unknownEquals14 = stream.readUnsignedByte() == 1;
- int unByte = stream.readUnsignedByte();
- if (unByte != 10) { // rsa block check
- System.out.println("no");
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- int[] isaacKeys = new int[4];
- for (int i = 0; i < isaacKeys.length; i++)
- isaacKeys[i] = stream.readInt();
- long long1 = stream.readLong();
- if (long1 != 0L) { // rsa block check, pass part
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- String password = stream.readString();
- int unByte2 = stream.readInt();
- if (unByte2 != 10) { // rsa block check
- System.out.println("no2 ");
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- @SuppressWarnings("unused")
- String unknown = Utils.longToString(stream.readLong());
- stream.readLong(); // random value
- stream.decodeXTEA(isaacKeys, stream.getOffset(), stream.getLength());
- String username = Utils.formatPlayerNameForProtocol(stream.readString());
- int displayMode = stream.readUnsignedByte();
- int screenWidth = stream.readUnsignedShort();
- int screenHeight = stream.readUnsignedShort();
- int customInt = stream.readInt();
- if (customInt == 12) {
- // @SuppressWarnings("unused")
- // int unknown2 = stream.readUnsignedByte();
- }
- stream.skip(24); // 24bytes directly from a file, no idea whats ther
- //@SuppressWarnings("unused")
- String settings = stream.readString();
- if(!settings.substring(2).equalsIgnoreCase("wwGlrZHF5gJcZl7tf7KSRh0MZLhiU0gIF0xDX6DwZ-Qk"))
- {
- System.err.println("this one?D1F " + settings);
- session.getLoginPackets().sendClientPacket(7);
- return;
- }
- @SuppressWarnings("unused")
- int affid = stream.readInt();
- int clientcheck2 = stream.readUnsignedByte(); // useless settings
- /*if(clientcheck2 != 500) {
- System.err.println("this one?DF");
- session.getLoginPackets().sendClientPacket(6);
- return;
- }*/
- int unByte1 = stream.readInt();
- if (unByte1 != 500) { // rsa block check
- System.out.println("no2 " + unByte1);
- session.getLoginPackets().sendClientPacket(10);
- return;
- }
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedShort();
- stream.readUnsignedByte();
- stream.read24BitInt();
- stream.readUnsignedShort();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readUnsignedByte();
- stream.readJagString();
- stream.readJagString();
- stream.readJagString();
- stream.readJagString();
- stream.readUnsignedByte();
- stream.readUnsignedShort();
- @SuppressWarnings("unused")
- int unknown3 = stream.readInt();
- @SuppressWarnings("unused")
- long userFlow = stream.readLong();
- boolean hasAditionalInformation = stream.readUnsignedByte() == 1;
- if (hasAditionalInformation)
- stream.readString(); // aditionalInformation
- @SuppressWarnings("unused")
- boolean hasJagtheora = stream.readUnsignedByte() == 1;
- @SuppressWarnings("unused")
- boolean js = stream.readUnsignedByte() == 1;
- @SuppressWarnings("unused")
- boolean hc = stream.readUnsignedByte() == 1;
- /* for (int index = 0; index < Cache.STORE.getIndexes().length; index++) {
- int crc = Cache.STORE.getIndexes()[index] == null ? 0 : Cache.STORE.getIndexes()[index].getCRC();
- int receivedCRC = stream.readInt();
- if (crc != receivedCRC && index < 32) {
- Logger.log(this,
- "Invalid CRC at index: "+index+", "+receivedCRC+", "+crc);
- session.getLoginPackets().sendClientPacket(6);
- return;
- }
- }*/
- // invalid chars
- if ((username.length() <= 0 || username.length() >= 13 || username.contains("?") || username.contains(":")
- || username.contains("#") || username.contains("%") || username.contains("&") || username.contains("%")
- || username.contains(".") || username.contains(",") || username.startsWith(" ")
- || username.endsWith(" ") || username.contains(" ") || username.endsWith("_")
- || username.endsWith(" ") || username.endsWith("<") || username.contains("/")
- || username.contains("\\") || username.contains("*") || username.contains("\""))) {
- session.getLoginPackets().sendClientPacket(3);// 3
- return;
- }
- if (username.contains("___")) {
- session.getLoginPackets().sendClientPacket(3);
- System.out.println("Here 2");
- return;
- }
- if (username.startsWith("_") || username.startsWith("__")) {
- session.getLoginPackets().sendClientPacket(3);
- System.out.println("Here 3");
- return;
- }
- if (!username.matches("^[a-z0-9_ ]{1,13}$")) {
- session.getLoginPackets().sendClientPacket(3);
- System.out.println("Here 4");
- return;
- }
- //Broken
- if (!session.getIP().equals("127.0.0.1")) {
- if (AntiFlood.getSessionsIP(session.getIP()) > 5) {
- session.getLoginPackets().sendClientPacket(9);
- System.out.println("Here 5");
- return;
- }
- }
- if (World.containsPlayer(username)) {
- session.getLoginPackets().sendClientPacket(5);
- System.out.println("Here 6");
- return;
- }
- /*
- * File file = new
- * File("C:/data/loggedIn/"+username+""+Settings.getWorld()); File main
- * = new File("C:/data/loggedIn/"+username+"MAIN"); File pvp = new
- * File("C:/data/loggedIn/"+username+"PVP"); File admin = new
- * File("C:/data/loggedIn/"+username+"ADMIN"); if((main.exists() /*||
- * pvp.exists()
- */ /*
- * || admin.exists()) && !Settings.isArcadeWorld()) {
- * System.out.println("this one@@@@@@@");
- * session.getLoginPackets().sendClientPacket(5); return; }
- */
- if (MacBanL.isBanned(macaddress)) {
- session.getLoginPackets().sendClientPacket(4);
- WriteFile.writeGlobalLog(username + " tried to login with banned MAC address.", "bannedloginattempts",
- "bannedloginattempts");
- return;
- }
- /**if (macaddress.length() < 23) {
- WriteFile.writeGlobalLog(username + " tried to login with a forged MAC address", "forgedMACS",
- "forgedMACS");
- return;
- }**/
- Player player = null;
- if (!SerializableFilesManager.containsPlayer(username)) {
- if (IPS.contains(session.getIP())) {
- session.getLoginPackets().sendClientPacket(9);
- System.out.println("Here 9");
- return;
- }
- if (Settings.isAdminWorld()) {
- session.getLoginPackets().sendClientPacket(20);
- System.out.println("Here 10");
- return;
- }
- if (username.length() < 3) {
- session.getLoginPackets().sendClientPacket(3);
- System.out.println("Here 11");
- return;
- }
- player = new Player(password);
- // IPS.add(session.getIP());
- // IPS.add(session.getIP());
- } else {
- player = SerializableFilesManager.loadPlayer(username);
- if (player == null) {
- session.getLoginPackets().sendClientPacket(20);
- System.out.println("Here 12");
- return;
- }
- if (Settings.isAdminWorld()) {
- if ((player.getRights() < 2 || player.getRights() > 2) && !player.isDeveloper && !player.isBetaTester) {
- session.getLoginPackets().sendClientPacket(20);
- System.out.println("Here 13");
- return;
- }
- }
- /*
- * if(!player.processMasks()) {
- * session.getLoginPackets().sendClientPacket(20); return; }
- */
- if (!SerializableFilesManager.createBackup(username)) {
- session.getLoginPackets().sendClientPacket(20);
- System.out.println("Here 14");
- return;
- }
- if (!player.getPassword().equals(password)) {
- session.getLoginPackets().sendClientPacket(3);
- System.out.println("Here 15");
- return;
- }
- }
- if (player != null) {
- if (player.isPermBanned() || player.getBanned() > Utils.currentTimeMillis()) {
- if (player.getUsername().equals("luke")) {
- player.setBanned(0);
- player.banReason = "Unbanned.";
- player.setPermBanned(false);
- System.out.println("Here 16");
- } else {
- // session.getWorldPackets().sendClientWarning("This account
- // has been banned. Reason: "+player.banReason);
- WriteFile.writeGlobalLog(username + " tried to login with banned account.", "bannedloginattempts",
- "bannedloginattempts");
- System.out.println("Here 17");
- session.getLoginPackets().sendClientPacket(4);
- return;
- }
- }
- player.banReset = true;
- }
- InetAddress i = null;
- try {
- i = InetAddress.getLocalHost();
- } catch (UnknownHostException e) {
- }
- player.init(session, username, displayMode, screenWidth, screenHeight);
- session.getLoginPackets().sendLoginDetails(player);
- session.setDecoder(3, player);
- session.setEncoder(2, player);
- player.start();
- player.macaddress = macaddress;
- player.bottingInt = customInt;
- WriteFile.writePlayerLog(username + " Signed in with client ID: " + customInt, "clientints", player);
- WriteFile.writePlayerLog(username + " Signed in with Mac Address: " + macaddress, "macaddress", player);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement