Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Vasto_Lorde

[FIX] Crashowanie serwera poprzez spam voice chat'em (clc_VoiceData msg rejected 05.05.18)

Recommended Posts

Opis

Exploit polegał na spamowaniu voice chatem dzięki czemu serwer CS:GO się crashował. Podobno ten exploit został poprawiony już przez Valve. 

 

 

Treść erroru

Msg from *.*.*.*:*: clc_VoiceData msg rejected (* bytes)

 

 

Wymagania

VoiceannounceEX
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

 

 

Source Code / Download

Spoiler

#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <voiceannounce_ex>
#pragma newdecls required

#define PATH			"logs/voicedata_crashfix.log"
#define PLUGIN_VERSION		"1.0.2"	

ConVar maxVoicePackets;
ConVar punishment;

int g_voicePacketCount[MAXPLAYERS+1];
int iPunishMent;
int iMaxVoicePackets;

public Plugin myinfo = 
{
	name = "Voice Data Crash Fix",
	author = "Ember & V1sual",
	description = "Punishes players who are overflowing voice data to crash the server",
	version = PLUGIN_VERSION,
	url = ""
};

public void OnPluginStart()
{
	punishment = CreateConVar("sm_voicedatafix_punishment", "1", "Punishment. 1 = Kick, 2 = Perm ban", _, true, 1.0, true, 2.0);
	maxVoicePackets = CreateConVar("sm_voicedatafix_count", "92", "How many packets per second max?", FCVAR_PROTECTED);

	iPunishMent = punishment.IntValue;
	iMaxVoicePackets = maxVoicePackets.IntValue;

	punishment.AddChangeHook(OnConVarHook);
	maxVoicePackets.AddChangeHook(OnConVarHook);
}

public void OnConVarHook(ConVar cvar, const char[] oldVal, const char[] newVal) 
{
	if (cvar == punishment)
	{
		iPunishMent = cvar.IntValue;
	}
	else if (cvar == maxVoicePackets)
	{
		iMaxVoicePackets = cvar.IntValue;
	}
}

public void OnMapStart()
{
	CreateTimer(1.0, ResetCount, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action ResetCount(Handle timer)
{
	for (int i = 1; i <= MaxClients; i++)
	{
        	g_voicePacketCount[i] = 0;
	}
	
	return Plugin_Continue;
}

public void OnClientSpeakingEx(int client)
{
	if (++g_voicePacketCount[client] > iMaxVoicePackets) 
	{
		SetClientListeningFlags(client, VOICE_MUTED);

		char id[64], ip[32];

		GetClientAuthId(client, AuthId_Steam2, id, sizeof(id));  
		GetClientIP(client, ip, sizeof(ip));

		LogToPluginFile("%N (ID: %s | IP: %s) was %s for trying to crash the server with voice data overflow. Total packets: %i", 
		client, 
		id, 
		ip, 
		punishment.IntValue == 1 ? "kicked" : "banned", 
		g_voicePacketCount[client]);
		
		switch (iPunishMent)
		{
			case 1:
			{
				if (!IsClientInKickQueue(client))
				{
					KickClient(client, "Voice data overflow detected!");
				}
			}
			case 2:
			{
				ServerCommand("sm_ban #%d 0 \"Voice data overflow detected!\"", GetClientUserId(client));
			}
		}
	}
}

stock void LogToPluginFile(const char[] format, any:...)
{
	char f_sBuffer[1024], f_sPath[1024];
	VFormat(f_sBuffer, sizeof(f_sBuffer), format, 2);
	BuildPath(Path_SM, f_sPath, sizeof(f_sPath), PATH);
	LogToFile(f_sPath, "%s", f_sBuffer);
}

 

 

 

Źródło

https://forums.alliedmods.net/showthread.php?p=2596506#post2596506
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

 

 

Dzięki @ErwinH2K za podesłanie tematu

  • Lubię to! 1

Share this post


Link to post
Share on other sites

Zamiast po prostu kopiować kod, sprawdź jak to działa na serwerze :P Do poprawnego działania potrzeba jeszcze tego pluginu: https://forums.alliedmods.net/showthread.php?p=2177167

  • Lubię to! 1
By Vasto_Lorde,

#include XD Dzięki, jestem ślepy

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...