Blacklist - Antiproxy Sistema
Posted: 2013 Jan 12 02:49
Sis pluginas padeda isvengti nepageidaujamu zaideju, arba tiesiog apsisaugoti nuo proxy, kai nebelieka nieko, pvz: jus uzbaninate zaideja, sis grysta su kitokiu ip, jus vel ji uzbaninate ir t.t tesiasi, esme tame, kad pluginas sugeneruoja kiekvienam zaidejui unikalu id, nesvarbu jis butu steam'as ar naudotusi non-steam, ta id galime panaudoti blacklistinant zaideja, si sistema veikia panasiai kaip amxx bans, bet naudojames fvault - https://forums.alliedmods.net/showthread.php?t=76453. Slowhackingas? mes graziai tai apeiname nors ir juo naudodamiesi sukuriame cfg i kuri issaugome id su writecfg komanda esamo config'o nustatymu kopija i kintamojo nurodyta direktorija(g_CFG) ir ji uzkrauname noredami patikrinti ar id nera duomenu bazeje, jei nera automatiskai sukuriame, jei yra patikriname - uzkrauname cfg su esanciu id is g_CFG direktorijos, veliau uzkrauname config.cfg kuris nebuvo liestas bei istriname konsole su komanda clear taip pat panaikiname setinfo id, nes jau zaidejas yra patikrintas ir zaidejas nepajaucia, kad kazkas katik ivyko, kai zaidejas su sugeneruotu id prisijungia i serveri ir jei pasitvirtina, kad zaidejas jau yra sarase t.y patikriname blacklist.txt faila esanti serverio moddir/addons/amxmodx/data/file_vault/ pereiname prie veiksmo funkcijos nubaustiZaideja, sugeneruotas id yra irasomas i duomenubaze.txt kuris yra serverio moddir/addons/amxmodx/data/file_vault/.Tokio plugino dar nera, mdb bans veikia panasiu principu ir yra closed source, id tiesiog irasomas ir gali betkada dingti, taip pat nera failsafe ka as asmeniskai igyvendinau, pluginas ateityje bus pleciamas, klaidos taisomos, multilang, sql palaikymas, kolkas vienintelis metodas issaugoti informacija yra setinfo, taip pat bus gilinamasi i orpheu, hlsdk noredami surasti dar saugesni metoda.Credits:Tetusis ideja, kodas, logika, testavimas.Ernis - Shake'it kodas, pataisymai ir pagalba testavime.Idomi kiekvieno nuomone, plugino aprasymas laikui begant bus keiciamas, jugi dabar 02:49
Code: Select all
#include <amxmodx>#include <amxmisc>#include <fvault> #define BUFFER_LENGTH 8 #define DATE_LENGTH 18#define NAME_LENGTH 32#define IP_LENGTH 16#define REASON_LENGTH 16#define DATA_LENGTH (REASON_LENGTH + NAME_LENGTH + DATE_LENGTH + IP_LENGTH ) //reiketu didint data buffer, jeigu reikia ilgesniu reason.#define maxItems 6 #define ADMINAS ADMIN_CVAR new g_Chars[maxItems] = { '1', '2', '3', '4', '5', '6' }new g_Ids[33][BUFFER_LENGTH] new g_PlayerInfos[33][DATA_LENGTH] /// galetu buti naudojama id uzkrovimui, kad nereiktu daug kartu to var kurti///new g_ID[BUFFER_LENGTH] // Slowhackstatic const g_DB[] = "duomenubaze"static const g_DB_BLACKLIST[] = "blacklist"static const g_CFG[] = "resource/UI/gunmenu" static const MAX_TRIES = 4 /// gal reiktu daugiau/maziau kartu ?new g_tries[33] /// bandymu patikrinti ar uzsikrove id skaicius static const clearTaskID = 20100;static const Float:clearTaskTime = 0.5; static const loadCFGTaskID = 20300;static const Float:loadCFGTaskTime = 0.5; static const punishTaskID = 20400;static const Float:punishTaskTime = 1.0; public plugin_init() { register_plugin("Blacklist - Antiproxy Sistema", "0.2 alpha", " Ernis - Shake'it") register_concmd("bl", "blacklistID", ADMINAS, "Blacklistinam zaidejo id") register_concmd("infoid", "infoID" , ADMINAS, "Informacija apie zaideju id")} public client_connect(id) { g_Ids[id][0]=0; g_tries[id]=0; /// ivykdome vartotojo cfg, kuris turetu nustatyti musu paslepta id. ivykdyti_vartotojo_cfg(id) set_task(loadCFGTaskTime, "uzkrautiID", id+loadCFGTaskID);} public uzkrautiID(id){ id-=loadCFGTaskID; new str[BUFFER_LENGTH]; get_user_info(id,"id",str, BUFFER_LENGTH-1); str[BUFFER_LENGTH-1]=0; /// ar jau turi priskirta id? if(strlen(str)>1) { copy( g_Ids[id], BUFFER_LENGTH, str ); if(tikrinamID(id)) /// jeigu ne blacklisted, irasom prisijungima { fvault_save(id); } isvalyti_set_info(id+clearTaskID); /// naudojimas task nebutinas, todel kvieciame tiesiogiai. } else if(g_tries[id]<MAX_TRIES) { g_tries[id]++; set_task(loadCFGTaskTime, "uzkrautiID", id+loadCFGTaskID); } else { /// neturi id, sugeneruojam genID(g_Ids[id]) new nickas[32]; get_user_name(id, nickas, charsmax(nickas)); new con[25]; formatex(con, 24,"sugeneruotas id: ^" %s ^", zaidejui:^" %s^"",g_Ids[id],nickas); server_print(con); con[24] = 0 issaugoti_vartotojo_cfg(id); /// issaugome vartotojo cfg tik tada kai naujas id yra generuojamas set_task(clearTaskTime, "isvalyti_set_info", id+clearTaskID);///isvalome, kad nepatektu i config.cfg fvault_save(id); ///sugeneruotas naujas id, issaugom. }} public bool:tikrinamID(id) { new nickas[32]; get_user_name(id, nickas, charsmax(nickas)) if(g_Ids[id][0]=='1') { ///zmogus yra blackliste, kick/ban? server_print("Prisijunge zaidejas su blacklisted id: %s, nick: %s",g_Ids[id], nickas); set_task(punishTaskTime, "nubaustiZaideja", id+punishTaskID); if(fvault_get_data(g_DB_BLACKLIST, g_Ids[id], g_PlayerInfos[id], DATA_LENGTH-1)) { ///nuskaitome is blacklist failo ///sekmingai nuskaite, galima kazka daryti su duomenimis server_print("BLACKLIST: %s",g_PlayerInfos[id]); } else { ///nerasta faile? } return false; } else { server_print("Prisijunge zaidejas su id: %s, nick: %s",g_Ids[id], nickas); if(fvault_get_data(g_DB, g_Ids[id], g_PlayerInfos[id], DATA_LENGTH-1)) { ///sekmingai nuskaite, galima kazka daryti su duomenimis server_print("DATABASE: %s", g_PlayerInfos[id]); fvault_save(id); } else { ///nerasta faile? } return true; } return false;} public fvault_save(id) { static ip[IP_LENGTH], g_Date[DATE_LENGTH]; get_user_ip(id, ip, charsmax(ip), 1) get_time("%c",g_Date, DATE_LENGTH); formatex(g_PlayerInfos[id], DATA_LENGTH-1 , "^"%s^" ^"%s^"",ip, g_Date[id]) fvault_set_data(g_DB,g_Ids[id], g_PlayerInfos[id]) } public fvault_save_blacklist(id, reason[]) { static ip[IP_LENGTH], g_Date[DATE_LENGTH]; get_user_ip(id, ip, charsmax(ip), 1) get_time("%c",g_Date, DATE_LENGTH); formatex(g_PlayerInfos[id], DATA_LENGTH-1 , "^"%s^" ^"%s^" ^"%s^"", ip, g_Date[id], reason) fvault_set_data(g_DB_BLACKLIST,g_Ids[id], g_PlayerInfos[id])} public issaugoti_vartotojo_cfg(id) { client_cmd(id, "setinfo ^"id^" ^"%s^"", g_Ids[id]); ///irasom i set info, kad galetume issaugoti client_cmd(id, "writecfg %s", g_CFG); // sukuriame cfg su jame esanciu id kintamajame nurodytoje direktorijoje client_cmd(id, "clear"); // isvalom konsole saugumo sumetimais} public ivykdyti_vartotojo_cfg(id) { client_cmd(id, "exec %s.cfg", g_CFG); // uzkrauname cfg su jame esanciu id kintamajame nurodytoje direktorijoje client_cmd(id, "exec config.cfg"); // uzkrauname numatyta zaidejo.cfg client_cmd(id, "clear"); // isvalom konsole saugumo sumetimais} public isvalyti_set_info(id){ id-=clearTaskID; client_cmd(id, "setinfo ^"id^" ^"^"") /// paliekame tuscia string po issaugojimo, kad neisirasytu i config.cfg faila} public infoID(id, level, cid) { if (!cmd_access(id, level, cid, 1)) return 1 else { static zaidejai[32], kiekis get_players(zaidejai, kiekis) console_print(id, "%32s%20s%20s%20s", "Nick'as", "ID", "IP", "steamID") static nickas[32], ip[16], steamid[64] for (new visi = 0; visi < kiekis; visi++) { get_user_name(zaidejai[visi], nickas, charsmax(nickas)) get_user_ip(zaidejai[visi], ip, charsmax(ip), 1) get_user_authid(zaidejai[visi], steamid, charsmax(steamid)) console_print(id, "%32s%16s%16s%16s", nickas, g_Ids[visi], ip, steamid) } } return 1} public nubaustiZaideja(id) { id-=punishTaskID; // veiksmas client_cmd(id, "quit"); // testavimui} public blacklistID(id, level, cid) { if (!access(id, level)) return 1; else { new arg[32]; new arg2[REASON_LENGTH]; read_argv(1, arg, charsmax(arg)); read_argv(2, arg2, charsmax(arg2)); new uid = cmd_target(id, arg, CMDTARGET_ALLOW_SELF) if (!uid) { console_print(id,"Zaidejas su jusu nurodytu id nerastas") return 1 } new nickas[32]; get_user_name(uid, nickas, charsmax(nickas)) g_Ids[uid][0]='1'; ///irasom blacklist flag'a i vartotojo id issaugoti_vartotojo_cfg(uid); ///saugom :) set_task(clearTaskTime, "isvalyti_set_info", id+clearTaskID); set_task(clearTaskTime + punishTaskTime, "nubaustiZaideja", uid+punishTaskID); fvault_save_blacklist(uid,arg2); console_print(id,"Zaidejas idetas i blacklist id: %s nick: %s",g_Ids[uid], nickas) } return 1} public genID(id_string[]) { id_string[BUFFER_LENGTH-2] = '0' ///zmogus nera blackliste for(new i=0; i < BUFFER_LENGTH-2; i++) { id_string[i] = g_Chars[random_num(0, maxItems-1)] } id_string[BUFFER_LENGTH-1] = 0;}