SySt3MGaM3RFr3aKs Posted January 21, 2010 Share Posted January 21, 2010 Unknown Packets Protection Spam. ( This diff is for Interlude L2J but with some modifications can be inserted in Gracia Final or Gracia pt2 etc ) Your server will have protections from PHX Spammers, sending unknown packets. Diff file: Index: C:/Workspace/L2_GameServer_It/java/config/server.properties =================================================================== --- C:/Workspace/L2_GameServer_It/java/config/server.properties (revision 1025) +++ C:/Workspace/L2_GameServer_It/java/config/server.properties (working copy) @@ -69,6 +69,16 @@ # Define how many players are allowed to play simultaneously on your server. MaximumOnlineUsers=100 +# Activate Protection for unknownPacket flooding +PacketProtection = False +# How much unknown packets before punishment. +# If the player send more than 5 unknownPackets per second, the player get punished. +UnknownPacketsBeforeBan = 5 +# Punishments +# 1 - broadcast warning to gms only +# 2 - kick player (default) +# 3 - kick & ban player (Accesslevel -99) +UnknownPacketsPunishment = 2 # Minimum and maximum protocol revision that server allow to connect. # You must keep MinProtocolRevision <= MaxProtocolRevision. Index: C:/Workspace/L2_GameServer_It/java/net/sf/l2j/Config.java =================================================================== --- C:/Workspace/L2_GameServer_It/java/net/sf/l2j/Config.java (revision 1025) +++ C:/Workspace/L2_GameServer_It/java/net/sf/l2j/Config.java (working copy) @@ -78,6 +78,10 @@ /** Maximum number of players allowed to play simultaneously on server */ public static int MAXIMUM_ONLINE_USERS; + public static boolean ENABLE_PACKET_PROTECTION; + public static int MAX_UNKNOWN_PACKETS; + public static int UNKNOWN_PACKETS_PUNiSHMENT; + // Setting for serverList /** Displays [] in front of server name ? */ public static boolean SERVER_LIST_BRACKET; @@ -1120,6 +1124,10 @@ MAX_CHARACTERS_NUMBER_PER_ACCOUNT = Integer.parseInt(serverSettings.getProperty("CharMaxNumber", "0")); MAXIMUM_ONLINE_USERS = Integer.parseInt(serverSettings.getProperty("MaximumOnlineUsers", "100")); + + ENABLE_PACKET_PROTECTION = Boolean.parseBoolean(serverSettings.getProperty("PacketProtection", "false")); + MAX_UNKNOWN_PACKETS = Integer.parseInt(serverSettings.getProperty("UnknownPacketsBeforeBan", "5")); + UNKNOWN_PACKETS_PUNiSHMENT = Integer.parseInt(serverSettings.getProperty("UnknownPacketsPunishment", "2")); MIN_PROTOCOL_REVISION = Integer.parseInt(serverSettings.getProperty("MinProtocolRevision", "660")); MAX_PROTOCOL_REVISION = Integer.parseInt(serverSettings.getProperty("MaxProtocolRevision", "665")); @@ -2082,6 +2090,10 @@ else if (pName.equalsIgnoreCase("AutoDeleteInvalidQuestData")) AUTODELETE_INVALID_QUEST_DATA = Boolean.valueOf(pValue); else if (pName.equalsIgnoreCase("MaximumOnlineUsers")) MAXIMUM_ONLINE_USERS = Integer.parseInt(pValue); + + else if (pName.equalsIgnoreCase("PacketProtection")) ENABLE_PACKET_PROTECTION = Boolean.parseBoolean(pValue); + else if (pName.equalsIgnoreCase("UnknownPacketsBeforeBan")) MAX_UNKNOWN_PACKETS = Integer.parseInt(pValue); + else if (pName.equalsIgnoreCase("UnknownPacketsPunishment")) UNKNOWN_PACKETS_PUNiSHMENT = Integer.parseInt(pValue); else if (pName.equalsIgnoreCase("ZoneTown")) ZONE_TOWN = Integer.parseInt(pValue); Index: C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/network/L2GameClient.java =================================================================== --- C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/network/L2GameClient.java (revision 1025) +++ C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/network/L2GameClient.java (working copy) @@ -41,6 +41,7 @@ import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.entity.L2Event; import net.sf.l2j.gameserver.serverpackets.L2GameServerPacket; +import net.sf.l2j.gameserver.util.FloodProtector; import net.sf.l2j.util.EventData; import com.l2jserver.mmocore.network.MMOClient; @@ -84,6 +85,9 @@ // Flood protection public byte packetsSentInSec = 0; public int packetsSentStartTick = 0; + + // UnknownPacket protection + private int unknownPacketCount = 0; public L2GameClient(MMOConnection<L2GameClient> con) { @@ -489,6 +493,26 @@ } } + public boolean checkUnknownPackets() + { + if(this.getActiveChar() != null && + !FloodProtector.getInstance().tryPerformAction(this.getActiveChar().getObjectId(), FloodProtector.PROTECTED_UNKNOWNPACKET)) + { + unknownPacketCount++; + if (unknownPacketCount >= Config.MAX_UNKNOWN_PACKETS) + { + return true; + } + else + return false; + } + else + { + unknownPacketCount = 0; + return false; + } + } + /** * Produces the best possible string representation of this client. */ Index: C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java =================================================================== --- C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java (revision 1025) +++ C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/network/L2GamePacketHandler.java (working copy) @@ -18,10 +18,13 @@ package net.sf.l2j.gameserver.network; import java.nio.ByteBuffer; +import java.sql.Time; import java.util.concurrent.RejectedExecutionException; import java.util.logging.Logger; import net.sf.l2j.Config; +import net.sf.l2j.gameserver.GmListTable; +import net.sf.l2j.gameserver.LoginServerThread; import net.sf.l2j.gameserver.ThreadPoolManager; import net.sf.l2j.gameserver.clientpackets.*; import net.sf.l2j.gameserver.network.L2GameClient.GameClientState; @@ -811,6 +814,8 @@ byte[] array = new byte[size]; buf.get(array); _log.warning(Util.printData(array, size)); + if (Config.ENABLE_PACKET_PROTECTION) + unknownPacketProtection(client); } private void printDebugDoubleOpcode(int opcode, int id2, ByteBuffer buf, GameClientState state, L2GameClient client) @@ -820,7 +825,50 @@ byte[] array = new byte[size]; buf.get(array); _log.warning(Util.printData(array, size)); + if (Config.ENABLE_PACKET_PROTECTION) + unknownPacketProtection(client); } + + private void unknownPacketProtection(L2GameClient client) + { + if(client.getActiveChar() != null && client.checkUnknownPackets()) + { + punish(client); + return; + } + } + + private void punish(L2GameClient client) + { + switch(Config.UNKNOWN_PACKETS_PUNiSHMENT) + { + case(1): + if (client.getActiveChar() != null) + { + GmListTable.broadcastMessageToGMs("Player " + client.getActiveChar().toString() + " flooding unknown packets."); + } + break; + case(2): + _log.warning("PacketProtection: " + client.toString() + " got kicked due flooding of unknown packets"); + if (client.getActiveChar() != null) + { + GmListTable.broadcastMessageToGMs("Player " + client.getActiveChar().toString() + " flooding unknown packets and got kicked."); + client.getActiveChar().sendMessage("You are will be kicked for unknown packet flooding, GM informed."); + client.getActiveChar().closeNetConnection(); + } + break; + case(3): + _log.warning("PacketProtection: " + client.toString() + " got banned due flooding of unknown packets"); + LoginServerThread.getInstance().sendAccessLevel(client.getAccountName(), -99); + if(client.getActiveChar() != null) + { + GmListTable.broadcastMessageToGMs("Player " + client.getActiveChar().toString() + " flooding unknown packets and got banned."); + client.getActiveChar().sendMessage("You are banned for unknown packet flooding, GM informed."); + client.getActiveChar().closeNetConnection(); + } + break; + } + } // impl public L2GameClient create(MMOConnection<L2GameClient> con) Index: C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/util/FloodProtector.java =================================================================== --- C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/util/FloodProtector.java (revision 1025) +++ C:/Workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/util/FloodProtector.java (working copy) @@ -50,15 +50,16 @@ // ========================================================= // Enum - private static final int PROTECTEDACTIONSIZE = 3; + private static final int PROTECTEDACTIONSIZE = 4; // reuse delays for protected actions (in game ticks 1 tick = 100ms) - private static final int[] REUSEDELAY = new int[]{ 4, 42, 42 }; + private static final int[] REUSEDELAY = new int[]{ 4, 42, 42, 15 }; // protected actions public static final int PROTECTED_USEITEM = 0; public static final int PROTECTED_ROLLDICE = 1; public static final int PROTECTED_FIREWORK = 2; + public static final int PROTECTED_UNKNOWNPACKET = 3; // ========================================================= // Constructor Note: this is not 100% Mine, i just make some modifications to make it work on Interlude. Thank you. So, Credits: L2JForum, Link to comment Share on other sites More sharing options...
Intrepid Posted January 21, 2010 Share Posted January 21, 2010 you cant do such thing on your own why you are in the credits? Link to comment Share on other sites More sharing options...
kikboxer Posted January 21, 2010 Share Posted January 21, 2010 what is it? I dont understand..... Link to comment Share on other sites More sharing options...
bauwbas Posted January 22, 2010 Share Posted January 22, 2010 Your server will have protections from PHX Spammers, sending unknown packets. kikboxer read, becore posting. Link to comment Share on other sites More sharing options...
SySt3MGaM3RFr3aKs Posted January 22, 2010 Author Share Posted January 22, 2010 you cant do such thing on your own why you are in the credits? I rewrited it, nothing special, i will delete the credits relax. Link to comment Share on other sites More sharing options...
Alexi Posted January 22, 2010 Share Posted January 22, 2010 Thnx for that but i think this can be used only on C4 ,C5 cuz on all other chronicles it exist... Link to comment Share on other sites More sharing options...
SySt3MGaM3RFr3aKs Posted January 22, 2010 Author Share Posted January 22, 2010 Thnx for that but i think this can be used only on C4 ,C5 cuz on all other chronicles it exist... It doesn't exists in any Chronicle of L2J, not in c4, c5, c6, Kamael nowhere. Link to comment Share on other sites More sharing options...
Intrepid Posted January 22, 2010 Share Posted January 22, 2010 It doesn't exists in any Chronicle of L2J, not in c4, c5, c6, Kamael nowhere. ok than flood with unknown packet a gracia server dumbass its dont exists in it for a reason... Link to comment Share on other sites More sharing options...
SySt3MGaM3RFr3aKs Posted January 22, 2010 Author Share Posted January 22, 2010 ok than flood with unknown packet a gracia server dumbass its dont exists in it for a reason... Ofcourse jerk. Is not existing there for a reason. Link to comment Share on other sites More sharing options...
Intrepid Posted January 22, 2010 Share Posted January 22, 2010 Ofcourse jerk. Is not existing there for a reason. reason = dont work Link to comment Share on other sites More sharing options...
ĐarkSlayer Posted January 22, 2010 Share Posted January 22, 2010 reason = dont work oh come on stop it u make him cry bro :D Link to comment Share on other sites More sharing options...
SySt3MGaM3RFr3aKs Posted January 22, 2010 Author Share Posted January 22, 2010 reason = dont work Maybe in Gracia Final oh come on stop it u make him cry bro :D Watch your language. Link to comment Share on other sites More sharing options...
ĐarkSlayer Posted January 22, 2010 Share Posted January 22, 2010 Maybe in Gracia Final Watch your language. my language? please first read what u write and then post it plx ! my language is fine :) i just sayd to intrepid to stop cause ur gonna cry like a baby ;) Link to comment Share on other sites More sharing options...
Alexi Posted January 22, 2010 Share Posted January 22, 2010 Ohh plz dont start flame,so with this you will have full protect from Phx, i dont know why but i cant trust it... Link to comment Share on other sites More sharing options...
Intrepid Posted January 22, 2010 Share Posted January 22, 2010 Ohh plz dont start flame,so with this you will have full protect from Phx, i dont know why but i cant trust it... no thats not true ONLY if you use INTERLUDE you have with that protection againt 1 exploit with the unknown packet flood thats all Link to comment Share on other sites More sharing options...
Recommended Posts