Çoğu serverda sxe olduğu için engellemeleri o yapsada + güvenlik ve sxe olmayan serverlar için aşağıdaki eklentileri kullanabilirsiniz.
Açıkcası çoğu eski kodlardır kimisi benim kendi yazımım olup kimisi düzenlemelerle yapılmıştır. Kimi de alliedmodsda bulduğum ve kendi sunucularımızın bazılarında kullandığımız eklentilerdir.
1)
WWCL Emulator Config Düzenlemesi.
Bazı serverlarda denk gelmişsinizdir. Özelliklede 1.5 serverlarında.
Oyuna girdikden bir süre sonra konsolda bazı komutları düzelterek oyun içinde
[xxxsunucu.com] Konfig taraması başarılı şeklinde mesaj veren eklentidir.Kısacası config dosyası içinde varolan komutları kullanıcının cliente yollayarak default değerine çevirir. Bu işlemi oyuna girişte 1 kere yapmaktadır.
enforcecfg fonksiyonu tarafımca düzenlenmiştir(ufak bir düzenleme).
Aliaslar kaldırılmıştır
#include <amxmodx>
#define MAXCVARS 64
new g_checkCvar[MAXCVARS][24]
new g_checkValue[MAXCVARS][8]
new g_checkNum
#define MAXMSG 24
new g_consoleMsg[MAXMSG][64]
new g_consoleNum
new g_ackCode[33]
new g_clientPos[33]
/* Initialization point */
public plugin_init()
{
register_plugin("WWCL Emulator","0.1","default")
register_cvar( "wwclconfig_version","unknown" ,FCVAR_SERVER|FCVAR_UNLOGGED|FCVAR_SPONLY)
register_cvar("wwclconfig","1")
register_cvar("wwclconfig_delay","10")
register_cvar("wwclconfig_break","7200")
register_cvar("wwclconfig_frequency","0.25")
register_cvar("wwclconfig_loadcfg","1")
register_cvar("wwclconfig_logfile","wwclconfig.log")
register_cvar("wwclconfig_action","disconnect")
register_cvar("wwclconfig_success","say ^"[CsTurkey] : Konfig Taramasi Basarili^"")
register_srvcmd("wwclconfig_check","cmdCheck")
register_srvcmd("wwclconfig_msg","cmdMsg")
register_clcmd("wwclack","cmdAck")
if ( get_cvar_num( "wwclconfig_loadcfg" ) )
server_cmd("exec wwclconfig.cfg") //düzeltme dosyamiz
}
public cmdCheck( )
{
if ( g_checkNum >= MAXCVARS ){
console_print( 0 , "WWCL: Cvars enforce limit reached!" )
return PLUGIN_HANDLED
}
if ( read_argv( 1 , g_checkCvar[g_checkNum], 23 )
&& read_argv( 2, g_checkValue[g_checkNum] , 7 ) )
++g_checkNum
else
console_print( 0 , "Usage: wwclconfig_check <cvar> <value>" )
return PLUGIN_HANDLED
}
public cmdMsg( )
{
if ( g_consoleNum >= MAXMSG ){
console_print( 0 , "WWCL: Console message limit reached!" )
return PLUGIN_HANDLED
}
if ( read_argv( 1 , g_consoleMsg[g_consoleNum], 127 ) )
++g_consoleNum
else
console_print( 0 , "Usage: wwclconfig_msg <message>" )
return PLUGIN_HANDLED
}
public client_connect( id )
{
if ( get_cvar_num( "wwclconfig" ) )
for(new i = 0 ; i < g_consoleNum; ++i )
client_cmd( id , "echo ^"%s^"", g_consoleMsg[ i ] )
}
public client_putinserver( id )
{
if ( get_cvar_num( "wwclconfig" ) ) {
new param[1]
param[0] = id
g_clientPos[ id ] = 0
g_ackCode[ id ] = 0
set_task( get_cvar_float( "wwclconfig_delay" ) , "enforceCfg" , 100+id , param , 1 )
}
}
public client_disconnect( id )
{
remove_task( 100 + id )
remove_task( 200 + id )
}
public blockAction( param[] )
{
new id = param[0]
new action[256]
get_cvar_string( "wwclconfig_action", action , 255 )
client_cmd( id , action , "wwclack", "wwclack" )
}
public cmdAck( id )
{
new arg[8]
if ( read_argv( 1 , arg , 7 ) && g_ackCode[ id ] && str_to_num( arg ) == g_ackCode[ id ] )
{
g_ackCode[ id ] = 0
remove_task( 200 + id )
if ( ++g_clientPos[ id ] < g_checkNum ) {
new param[1]
param[0] = id
set_task( get_cvar_float( "wwclconfig_frequency" ) , "enforceCfg" , 100+id , param , 1 )
}
else {
new action[256]
get_cvar_string( "wwclconfig_success", action , 255 )
client_cmd( id , action )
}
}
else {
new param[1]
param[0] = id
blockAction( param )
}
return PLUGIN_HANDLED
}
public enforceCfg( param[] )
{
new id = param[0]
g_ackCode[ id ] = random_num( 1 , 99999 )
client_cmd( id , "%s %s ; wwclack %d; echo [ CsTurkey ] %s ( %s ) olarak duzeltildi." ,
g_checkCvar[ g_clientPos[ id ] ], g_checkValue[ g_clientPos[ id ] ], g_ackCode[ id ],
g_checkCvar[ g_clientPos[ id ] ], g_checkValue[ g_clientPos[ id ] ] )
//consoldaki düzeltme yazimiz
set_task( 0.75 , "blockAction", 200 + id, param , 1 )
}Aşağıdaki komutları wwclconfig.cfg olarak kaydedin cstrike dizinine atın.
wwclconfig_check "c_maxdistance" "200"
wwclconfig_check "c_maxpitch" "90"
wwclconfig_check "c_maxyaw" "135"
wwclconfig_check "c_minpitch" "0"
wwclconfig_check "c_minyaw" "-135"
wwclconfig_check "cl_gaitestimation" "1"
wwclconfig_check "cl_lc" "1"
wwclconfig_check "cl_lw" "1"
wwclconfig_check "cl_bob" "0.01"
wwclconfig_check "cl_bobcycle" "0.8"
wwclconfig_check "cl_bobup" "0.5"
wwclconfig_check "cl_movespeedkey" "0.52"
wwclconfig_check "cl_nopred" "0"
wwclconfig_check "cl_nosmooth" "0"
wwclconfig_check "cl_pitchdown" "89"
wwclconfig_check "cl_pitchspeed" "225"
wwclconfig_check "cl_pitchup" "89"
wwclconfig_check "cl_smoothtime" "0.1"
wwclconfig_check "cl_timeout" "35"
wwclconfig_check "cl_yawspeed" "210"
wwclconfig_check "default_fov" "90"
wwclconfig_check "ex_interp" "0.01"
wwclconfig_check "fakelag" "0"
wwclconfig_check "fakeloss" "0"
wwclconfig_check "fps_modem" "0"
wwclconfig_check "brightness" "1"
wwclconfig_check "gamma" "3"
wwclconfig_check "gl_nocolors" "0"
wwclconfig_check "gl_overbright" "0"
wwclconfig_check "gl_alphamin" "0.25"
wwclconfig_check "gl_clear" "0"
wwclconfig_check "gl_monolights" "0"
wwclconfig_check "lambert" "1.5"
wwclconfig_check "lightgamma" "2.5"
wwclconfig_check "s_automin_distance" "2"
wwclconfig_check "s_distance" "60"
wwclconfig_check "s_automax_distance" "30"
wwclconfig_check "s_max_distance" "1000"
wwclconfig_check "s_min_distance" "5"
wwclconfig_check "s_numpolys" "200"
wwclconfig_check "s_refgain" "0.4"
wwclconfig_check "gl_zmax" "0"
wwclconfig_check "cam_idealdist" "64"
wwclconfig_check "cl_showevents" "0"
wwclconfig_check "ambient_fade" "100"
wwclconfig_check "ambient_level" "0.300"
wwclconfig_check "s_occfactor" "0.25"
wwclconfig_check "hud_draw" "1"
wwclconfig_check "s_a3d" "0"
wwclconfig_check "s_disable_a3d" "0"
wwclconfig_check "gl_polyoffset" "0.1"
wwclconfig_check "max_smokepuffs" "120"
wwclconfig_check "cl_forwardspeed" "400"
wwclconfig_check "cl_sidespeed" "400"
wwclconfig_check "texgamma" "2"
wwclconfig_check "r_wadtextures" "0"
wwclconfig_check "sv_aim" "0"
wwclconfig_check "gl_spriteblend" "9"
2)
Komut Engelleme
Belirlediğiniz süre zarfında kullanıcının konsoluna yine belirlediğiniz komutları girdirmenize yarıyor. Kısacası sürekli gönderim yaparak değerleri sabit tutmaya yarıyor.
#include <amxmodx>
#define PLUGIN "R10-Cvar Block"
#define VERSION "1.0"
#define AUTHOR "Genki"
new koruma[33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("genki_komutlar","gl_spriteblend 9;ex_interp 0.1") //komutları burada belirleyebilirsiniz
}
public client_connect(id)
{
koruma[id] = 1; //client bağlanınca koruma aktif olsun
set_task(0.75, "komut_duzelt", id, _, _, "b") //0.75 saniyede sürekli gönderme olacak,düsürüp arttirabilirsiniz.
}
public client_disconnect(id)
{
koruma[id] = 0; //client bağlantısı kopunca korumayı kapat
remove_task(id) //taskleri temizle
}
public komut_duzelt(id)
{
if(!koruma[id] && !is_user_alive(id)) // olu veya aktif degil ise islemi durdur
{
return PLUGIN_HANDLED
}
static komutlar[128]
get_cvar_string("genki_komutlar",komutlar,127) //komutlari cvardan al
client_cmd(id,"%s",komutlar) //komutlari cliente yolla
return PLUGIN_CONTINUE
}3) CFG Engelleyicisi
Aslında sözde cfg engelleyicisidir. Piyasada kullanılan bazı cfglerde yanlış setinfo bildirimleri olduğu için onları yakalayarak kullanıcının servera girişini engellemektedir.
#include <amxmodx>
#define PLUGIN "Cfg Engelleyici"
#define VERSION "1.0"
#define AUTHOR "Genki"
new s4[33],fris[33],thirdperson[33],left_hand[33],vgui_menus[33],lefthand[33],dm[33],ah[33],ghosts[33],friends[33],nick[33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
}
engel_mesaj(id)
{
client_cmd(id,"echo [CFG Koruyucusu] Lutfen cfg kullanmayiniz.;disconnect")
client_cmd(id,"echo [CFG Koruyucusu] Config.cfg dosyasini silip oyuna bastan girin")
client_print(0,print_chat,"%s cfg kullanmaya calistigindan dolayi oyundan atildi.",nick)
}
public client_putinserver(id)
{
set_task(1.0, "cfg_kontrol", id)
}
public client_infochanged(id)
{
set_task(1.0, "cfg_kontrol", id)
}
public client_disconnect(id)
{
remove_task(id)
}
public cfg_kontrol(id)
{
get_user_name(id,nick, 31)
//[+]s4 kontrol
get_user_info(id,"s4",s4,31)
if (equal(s4, "pige0n"))
{
engel_mesaj(id)
}
//[-]s4 kontrol
//[+]fris kontrol
get_user_info(id,"fris",fris,31)
if (equal(fris, "0"))
{
engel_mesaj(id)
}
//[-]fris kontrol
//[+]thirdperson kontrol
get_user_info(id,"thirdperson",thirdperson,31)
if (equal(thirdperson, "1"))
{
engel_mesaj(id)
}
//[-]thirdperson kontrol
//[+]left_hand kontrol
get_user_info(id,"left_hand",left_hand,31)
if (equal(left_hand, "1"))
{
engel_mesaj(id)
}
//[-]left_hand kontrol
//[+]vgui_menus kontrol
get_user_info(id,"vgui_menus",vgui_menus,31)
if (equal(vgui_menus, "0"))
{
engel_mesaj(id)
}
//[-]vgui_menus kontrol
//[+]lefthand kontrol
get_user_info(id,"lefthand",lefthand,31)
if (equal(lefthand, "0"))
{
engel_mesaj(id)
}
//[-]lefthand kontrol
//[+]dm kontrol
get_user_info(id,"dm",dm,31)
if (equal(dm, "1"))
{
engel_mesaj(id)
}
//[-]dm kontrol
//[+]ah kontrol
get_user_info(id,"ah",ah,31)
if (equal(ah, "1"))
{
engel_mesaj(id)
}
//[-]ah kontrol
//[+]ghosts kontrol
get_user_info(id,"ghosts",ghosts,31)
if (equal(ghosts, "0"))
{
engel_mesaj(id)
}
//[-]ghosts kontrol
//[+]friends kontrol
get_user_info(id,"friends",friends,31)
if (equal(friends, "0"))
{
engel_mesaj(id)
}
//[-]friends kontrol
}4) Say atan hileleri engelleme.
Bazı hileler otomatik olarak oyundan için say atmaktadır. Oyunda admin olduğunda direk müdahale olabiliyor ancak admin yok ise bu eklentiyi derleyip kullanabilirsiniz. amxmodx logs klasörü içindede wallhack.log dosyasına bakıp kimlerin hile açtığını görebilirsiniz.
-=[HOOK Bilmem ne falan fistik]=-
yazan yeri hilenin attığı mesaj ile değiştiriniz. #include <amxmodx>
#define PLUGIN "Hile Kontrol"
#define VERSION "1.0"
#define AUTHOR "Genki"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say","saykontrol")
register_clcmd("say_team","saykontrol")
}
public saykontrol(id)
{
new cumle[192]
read_args(cumle,191)
if( ( containi(cumle, "-=[HOOK Bilmem ne falan fistik]=-") != -1 || containi(cumle, "-=[test hook]=-") != -1 ) )
set_task(0.1,"serverdan_at",id)
return PLUGIN_CONTINUE
}
public serverdan_at(id)
{
new player[25],playerip[25],msj[128]
get_user_name(id, player, 24)
get_user_ip(id, playerip, 24)
server_cmd("amx_kick %s ^"[Guard] Hile kullanmayiniz !^"",player)
console_print(id,"[ Guard ] Nick : %s",player)
console_print(id,"[ Guard ] Ip Adresi : %s",playerip)
console_print(id,"[ Guard ] Hile kullandiginiz icin sunucudan atildiniz.")
console_print(id,"[ Guard ] Lutfen hileyi kapatiniz yada say atarken kullandiginiz kelimelere dikkat ediniz.")
client_print(0,print_chat,"[ Guard ] %s isimli player hile actigi icin serverdan atilmistir.",player)
format(msj,127,"[ Guard ] : %s adli player hile acmaya calismis.Ip : %s",player,playerip)
static const logdosyasi[] = "wallhack.log"
log_to_file(logdosyasi, msj)
}5) Server durumunu gösteren php kod parçası.
Server ismini , oyuncu sayısını, server slotunu ve haritayı ekrana basar.Geliştirip resim üzerine çıktı alabilirsiniz
<?php
$ip = '88.255.155.50'; //server ip
$port = 27015; // server port
@$fp = fsockopen("udp://$ip",$port,$errno,$errstr,30);
if(!$fp)
{
echo 'server offline,veya ip yanlış';
exit;
}
fwrite($fp,"\xFF\xFF\xFF\xFF\x54Source Engine Query\x00");
$buffer = fread($fp,1024);
if (!trim($buffer)) { return FALSE; }
$tmp = explode("\x00", $buffer);
$place = strlen($tmp[0].$tmp[1].$tmp[2].$tmp[3].$tmp[4]) + 5;
$bas['hostname'] = $tmp[1];
$bas['mapname'] = $tmp[2];
$bas['players'] = ord($buffer[$place]);
$bas['maxplayers'] = ord($buffer[$place + 1]);
fclose($fp);
echo $bas['hostname'].'<br />'; // Server ismi
echo $bas['mapname'].'<br />'; // Harita ismi
echo $bas['players'].'<br />'; // oyuncu sayısı
echo $bas['maxplayers'].'<br />'; //server slotu
?>6)Block Wallhack
Hakkını veren bir eklentidir.
Piyasada bazı cs firmaları biz geliştirdik,biz yaptık diye çoluk çombalağı kaldırıp helal abi dedirtsede aslı aşağıdaki linktedir.
http://forums.alliedmods.net/showthread.php?t=100886
7 ) Fake Player Floods engelleme
UDP Paketleri aracılığı ile sunucuya fake player göndererek ping oluşmasını engeller. Çalışması için orpheu modülü gereklidir. Modül içinde de iki tane fonksyion gerekmektedir. Fonksiyonlar aşağıda verilmiştir.
Orpheu için :
http://forums.alliedmods.net/attachm...4&d=1273057797
Çalısması için gerekli fonskiyonlar aşağıdadır.
#include <amxmodx>
#include <orpheu>
#define PLUGIN "Anti flood"
#define VERSION "1.0"
#define AUTHOR "kanagava"
new time_last_conn
new ip_old[256]
new ip_warn[256]
new Msg[256]
new OrpheuHook:handlePrintf
new warn
new old_time
new registered
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
set_task(5.0, "regfunctions")
}
public regfunctions()
{
server_cmd("mp_logecho 1")
server_cmd("log on")
OrpheuRegisterHook(OrpheuGetFunction("SV_ConnectClient"),"OnSV_ConnectClientPre", OrpheuHookPre)
OrpheuRegisterHook(OrpheuGetFunction("SV_ConnectClient"),"OnSV_ConnectClientPost", OrpheuHookPost)
}
public OrpheuHookReturn:OnSV_ConnectClientPre()
{
registered=0
if(get_systime()-old_time <= 2)
{
handlePrintf = OrpheuRegisterHook( OrpheuGetFunction( "Con_Printf" ), "Con_Printf" , OrpheuHookPre);
registered=1
}
old_time=get_systime()
return OrpheuIgnored;
}
public OrpheuHookReturn:OnSV_ConnectClientPost()
{
if(registered)
{
OrpheuUnregisterHook(handlePrintf)
}
return OrpheuIgnored;
}
public OrpheuHookReturn:Con_Printf(const a[], const message[] )
{
registered=1
if (containi(message,"^" connected, address ^"")!=-1)
{
new len=255
new temp_right[256],temp_left[256],conn_ip[256]
formatex( Msg,charsmax( Msg ),"%s", message );
split(Msg, temp_left, len, temp_right, len, "^" connected, address ^"")
strtok(temp_right, conn_ip, len, temp_right, len, ':')
if (equal(conn_ip,ip_old) && !equal(conn_ip,"") && ((get_systime()-time_last_conn)<2))
{
warn=warn+1
if(warn>1 && equal(conn_ip,ip_warn))
{
log_amx("[NOFLOOD] Connection flood detected from ip %s",ip_old)
server_cmd("addip 120.0 %s",ip_old)
}
ip_warn=conn_ip
}
else
{
warn=0
}
ip_old=conn_ip
time_last_conn=get_systime()
}
return OrpheuIgnored;
}Eğer eklentiyi kurup,calıstırdıysanız ancak engelleme yapmıyor ise aşağıdaki adımları uygulayın
cstrike/addons/amxmodx/configs/orpheu/functions/
dizinine gidip
Con_Printf adında dosya oluşturun, içine
{
"name" : "Con_Printf",
"library" : "engine",
"arguments" :
[
{
"type" : "char *"
},
{
"type" : "char *"
}
],
"identifiers" :
[
{
"os" : "windows",
"mod" : "cstrike",
"value" : [0x55,0x8B,"*",0xB8,"*","*","*","*",0xE8,"*","*","*","*",0x8B,0x4D,"*",0x8D,0x45,"*",0x50,0x51,0x8D,0x95,"*","*","*","*",0x68,"*","*","*","*",0x52,0xE8,"*","*","*","*",0x8D,0x85,"*","*","*","*",0x50]
},
{
"os" : "linux",
"mod" : "cstrike",
"value" : "Con_Printf"
}
]
}yazıp kaydedin.
Aynı şekilde
SV_ConnectClient isimli dosya oluşturun ve içine aşağıdakileri yazın
{
"name" : "SV_ConnectClient",
"library" : "engine",
"identifiers" :
[
{
"os" : "windows",
"value" : [0x55,0x8B,0xEC,0x81,"*","*","*","*","*",0x53,0x56,0x57,0xB9,0x05,0x00,0x00,0x00,0xBE,"*","*","*","*",0x8D,"*","*",0x33,0xDB,0x68,"*","*","*","*"]
},
{
"os" : "linux",
"value" : "SV_ConnectClient"
}
]
}etiket :
hlds fake player flood block, i t n i fake players block
Şuan için 4883 version kullanan sunucularda çok büyük bir güvenlik açığı vardır, hlbeta yaparak sunucuları güncellemelerini öneririm yoksa her an başınıza ruslar dadanabilir.
8 ) Anti cmd dlfile
Valve işi biraz saçmalattı, nerden baksanız 8 yıllık açık gelen bir güncellemede tekrar meydana çıktı.
version 4883 kullanıyorsanız :
http://forums.alliedmods.net/attachm...2&d=1310080462
version 5758 ( hlbeta) kullanıyorsanız :
http://forums.alliedmods.net/attachm...2&d=1310080462
buradan gerekli dosyaları indirip metamoda kurulumu yapın
9 ) İptables ile fake player engelleme
Yedinci sıradaki eklentiyi kullanmak istemezseniz ( ki bu engellemeyi öneririm)
iptables ile engelleme yapabilirsiniz
Alıntı
iptables -A INPUT -p udp -m udp -m string --hex-string "|17c74a30a2fb752396b63532b1bf79b0|" --algo kmp -j DROP
iptables -A INPUT -p udp -m udp -m string --hex-string "|17951a20e2ab6d63d6ac7d62f1f721e057cd4270e2f13573 96f66522f1ed61f0|" --algo kmp -j DROP
iptables -A INPUT -p udp -m udp -m string --hex-string "|178f5230e2e17d73d6bc6562f1ed29e0|" --algo kmp -j DROP
iptables -A INPUT -p udp -m udp -m string --hex-string "|d50000806e000000|" --algo kmp -j DROP
iptables -A INPUT -p udp -m udp -m string --hex-string "|ffffffff6765746368616c6c656e6765000000000000 |" --algo kmp -j DROP
Paneliniz veya sitenizde problem yaşarsanız
Alıntı
iptables -A INPUT -p udp -s panel.ip.adresi -j ACCEPT
yukardaki komut ile cözüme ulaşabilirsiniz.
10 ) dproto traffic temporarily blocked from mesajını engellemek
Şuan benim sunucularıma dısardan gelen saçma sapan bir paketten dolayı sürekli konsolda bu hata ile karşılaşmaktaydım.
Birkaç arkadaş dahada bu sorunla karşılaştığını belirti. TCPDUMP ile paketleri takip edip aşağıdaki iptables komutunu hazırladım, dilerseniz sizde kullanabilirsiniz.
Alıntı
iptables -A INPUT -p udp -m udp -m string --hex-string "|ffffff56|" --algo kmp -j DROP
11 ) Fake player sokup ping çıkartan kullanıcıları sistemden uzaklaştırmak
Paylaşmayı unutmusum. Piyasadaki sanırım çoğu yerdeki sunucuyu bu saldırı çeşidi ile kullanım dısı yapabiliyorlar. Oyuna bir oyuncu giriyor gibi gözüküyor,ancak oyuncu ne banlanabiliyor ne kicklenebiliyor,konsolda da bağlantı yaptığı gözükmüyor.
TCPDUMP ile kontrol ettigimde 1506 gibi bir paket boyutu ile sunucuya bağlanıyor,buda serverda pinge yol açıyor.
Piyasadaki 1-2 bebe ile ben hackerım/coderım kendim yaptım ettim diyen kişiler mutlaka bu ara sizede dadanmıştır. Hatta bu konuya mesaj yazan bazı çoluk çombalak takımı rakip sunuculara bu şekilde saldırıp kendilerine oyuncu çekmeye çalışıyor

Aşağıdaki komut ile rahatlıkla sorunu cözebilirsiniz. Paket boyutunu arttırırlar ise 2000ini 5k-10k vs yapabilirsiniz
Alıntı
iptables -A INPUT -p udp --dport 27015 -m length --length 1200:2000 -j DROP
Yukarıdaki iptables komutu ile paket boyutu 1200 ile 2000 arasında olan bağlantıları droplayabiliyorsunuz. İşinize yarayacaktır.
ufak tefek hatalar çıkabilir.
Devamı gelecektir.