• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Tutorial Zapobiec spammerom wysyłającym keyloggery, reklamy do wszystkich online

trans

New Member
Joined
Jul 4, 2007
Messages
115
Reaction score
0
Jak niektórzy zauważyli jest wysyp botów wysyłających keyloggery albo reklamy do wszystkich graczy online na podstawie who is online. Myślałem jak to zatrzymać od strony lua ale nie da rady bo sam kanał private nie posiada własnego ID więc tutaj brak pomysłów. Zrobiłem łopatologicznie (absolutnie wzorując się na poradnikach bo nie jestem dobry w c++) ograniczenie w źródłach aby można było max 3 priv rozmowy prowadzić i dlatego jak ktoś ma czas żeby to przejrzeć czy nie będzie przypadkiem powodować lagów albo crashy bym był wzdięczny lub jeśli ktoś chce korzystać ;p

Skrypt powoduje limit na rozmowy prywatne do maksymalnie 3 osób, jeśli gracz ma poniżej 100 levelu. (możesz ustawić limit jaki chcesz, ważne aby spammerowi nie chciało się levelować każdego chara po to aby zaspamować serwer).
Z 3 osobami, z którymi się rozmawia na priv nie ma żadnych opuźnień itp. ale żeby rozpocząć rozmowe z 4 trzeba odczekać 30 minut.

Ogranicza to boty rozsyłające reklamy do otsów, które w ciągu kilku minut wysyłaja wiadomości do wszystkich graczy na priv które są online. W ostatnim czasie rozmnożyło się takich spamerów.

Aby obejść ten limit spammer musiałby stworzyć pierdyliant postaci aby każdemu wysłać reklame lub wysyłać do 3 graczy co 30minut co wysładnie do 100 graczy zajeło by mu ok. 20 godzin.

W player.h tworzymy std::multimap, który będzie przechowywać guid graczy rozmawiających oraz czas wysłania ost. wiadomości:
nad:
Code:
	protected:
dodajemy:
Code:
		typedef std::multimap<uint32_t, std::pair<uint32_t, uint32_t> > PrivMsgMap;
		static PrivMsgMap privMsgMap;

w game.cpp nad:
Code:
if(type == SPEAK_PRIVATE_RED && !player->hasFlag(PlayerFlag_CanTalkRedPrivate))
dodajemy:
Code:
	if(player->getLevel() <= [B]100[/B]) // ponizej jakiego lvlu bedzie ograniczenie
	{
		uint32_t seconds = time (NULL);
		uint32_t to_PID = toPlayer->getGUID();
		uint32_t from_PID = player->getGUID();
		bool exist_priv = false;
		uint32_t count_privs = 0;
		for(std::multimap<uint32_t, std::pair<uint32_t, uint32_t> >::iterator it = privMsgMap.begin(); it != privMsgMap.end(); ++it)
		{
			if(it->first == from_PID)
			{
				if(to_PID == it->second.first)
				{
					// Znaleziono taka aktywna rozmowe, wprowadzono date wywolania i przerwana iteracje
					it->second.second = seconds;
					exist_priv = true;
					count_privs += 1;
					continue;
				}

				if(it->second.second + (60*30) < seconds)
				{
					// Znaleziono nieaktywna rozmowe (od ponad 30 min.) - usunieto ja z listy
					privMsgMap.erase(it);
					continue;
				}
				count_privs += 1;
			}
		}

		if(!exist_priv)
		{
			if(count_privs >= [B]3[/B]) // ile maksymalnie może być rozmów priv
			{
				// Rozmowa nie istnieje i przekroczono limit rozmow (max 3)
				player->sendTextMessage(MSG_STATUS_SMALL, "Ponizej 100 lvlu mozesz prowadzic max 3 rozmowy prywatne. Stare rozmowy sa kasowane po 30min.");
				return false;
			} 
			else
			{
				// Rozmowa nie istnieje i gracz nie prowadzi zbyt wielu rozmow (max 3)
				privMsgMap.insert(std::make_pair(from_PID, std::make_pair(to_PID, seconds)));
			}
		}
	}

Niby działa dobrze ;pp ale może ktoś zaawansowany przejrzy i jakoś zoptymalizuje ;p
 
Last edited:
Bez sensu ograniczać PRIV rozmowy bo to będzie przeszkadzało normalnym graczom..
Tego się nie pozbędziesz :p
 
Sory a kto normalny prowadzi jak zaczyne gre wiecej niż 3 rozmowy priv? Chyba tylko jakiś spammer. Normalny gracz nawet nie zobaczy różnicy a spammer będzie musiał czekać za każdym razem 30min.
 
Sory a kto normalny prowadzi jak zaczyne gre wiecej niż 3 rozmowy priv? Chyba tylko jakiś spammer. Normalny gracz nawet nie zobaczy różnicy a spammer będzie musiał czekać za każdym razem 30min.

To trzeba było dopisać, że działać to będzie do określonego lvl'a :D
Bo jak nie papatrzymy w "skrypta" to nie wiemy o tym :)
 
ten skrypt nie ma sensu, można się tego pozbyć w dużo lepszy sposób

proponuję zamknąć temat
 
Wysyp botów? ^^ Parę osób napisało sobie program.. Nie rób z tego wielkiej afery, bo to walka z wiatrakami.
 
Najprosciej zgapic system z rl tibii... tam nikt Ci nie bedzie spamowal chyba ze jestes wyjatkowo wytrwaly ( i chwala im za to szkoda tylko ze tak to marnuja ^^ )
 
A jaki jest na rl? No właśnie chyba taki, że jak wysyłasz privy do zbyt wielu osób to dostajesz bloka i mozesz rozmawiac tylko z tymi z ktorymi prowadzisz aktywna rozmowe, dlatego tak samo tutaj zrobiłem. A co do botów to znalezienie aktualnie takiego do spamu ze źródłami to poświęcenie kilkunastu minut z tego co szukałem więc nie zdziwie się jak zaraz będzie ich jeszcze więcej. Zresztą jak ktoś lubi jak ktoś im spamuje graczy reklamami albo keyloggerami to może olać sprawe gl ;p
 
zwieksz liczbe osob do ktorych mozesz pisac i zmniejsz ten czas bo te liczby sa smieszne.
W rl tibii czas rosnie wykladniczo a liczba przypadkowych osob do ktorych mozesz wyslac wiadomosc to 15 albo 20

btw 90% osob na polish boardzie nie rozumie twojego zaawansowanego scryptu daj to do dzialu scrypty jak ktos bedzie tego szukal to sie przyda.

Teraz to programy maja do tego a ja to sam sie musialem meczyc z TibiaAuto + scrypt w pythonie do mojego pro elo orsh otsika ;s
 
mam trochę inne obejście, a nie ma limitów, ale póki co zachowam je dla siebie


co do Twojego skryptu, to napewno paru osobą się przyda, większość jednak to oleje, ale fajnie, że to tu wrzuciłeś ;p
 
Może po prostu ograniczyć wrzucanie linków, lub linko-podobnych wiadomości na czat globalny, jak i w prywatnych wiadomościach do jakiegoś poziomu.
 
lub linki mogłyby być pokazywane tylko wtedy kiedy masz te osobę na liście VIP
 
Wedlug mnie to zle podejscie bo obejscie takich limitow zajmie kilka minut np. w linku mozna dac spacje, przy kolejnych wiadomosciach mozna dodawac losowe znaki wiec system tego nie wykryje, mozna randomowo zmieniac litery, ogolnie to w skrypcie mozna zmienic czas mute oraz ilosc max osob do rozmow priv wiec jak ktos nie ma w dupie wlasnego otsa to moze wykorzystac to spokojnie.
 
Uwierz mi, że to nie jedyna metoda pobierania graczy online..
Serwer wysyła przez status port listę graczy wraz chyba z poziomem, albo profesją - dla ciekawych mogę zobaczyć potem.
 
Back
Top Bottom