Szerző Téma: Külsõ NPC csatlakoztatása | védekezés ellene  (Megtekintve 5164 alkalommal)

Nem elérhető DaVe

  • 149
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Dátum: 2012. Február 17. - 22:18:59 »
0

Üdv,
Az elmúlt két hét folyamán két dologra jöttem rá a samp_npc.exe nevû fájl kapcsán. Elõször is, hogy fel lehet küldeni az NPC-ket más szerverekre is (nem tudom hogy ez köztudott dolog-e, nekem újdonság volt :) ), a másik pedig, hogy a szerverekhez hasonlóan be tud tölteni pluginokat.
Egyenlõre viszont két problémám is akadt.Elõször is nem mûködik megfelelõen a teszthez írt plugint. Abban biztos vagyok hogy a program betölti viszont nem hívódik meg a belépési pont, sõt egyik funkció sem (ha csak rendes DLL-t írok akkor valószínüleg meghívódik az alapértelmezett belépési pont de azt még nem próbáltam). A másik problémám pedig, hogy egyenlõre fogalmam nincs hogy tudnám hasznosítani ezeket a dolgokat :)
Az oka hogy mindezt megosztom veletek nagyon egyszerû.Tudomásom szerint eddig még nem igazán próbálkozott ilyennel senki viszont ha mégis rájönne valaki azzal akár árthat is bizonyos szervereknek (nevet nem mondok mert félek kihasználnák de lecrasheltek az egyik tesztem során a játékosok többször is) így nem árt védekezni az ilyenek ellen (ha nem is crashelnek le a játékosok akkor is elég sok slotot le tudnak venni a botok)
Elõször is akkor a védekezéshez használható kód:
 

public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid));
{
new ip[16];
GetPlayerIP(playerid,ip,16);
if(strcmp(ip,\"127.0.0.1\") != 0) Kick(playerid);
}
}

 
Az indításhoz használt paraméterek:
 
-h *ip* -p *port* -n *név* -m *npc miniszkript* -z *szerver jelszava*

 
Az indításhoz használt kódom:
 

// samp-npc.cpp : Defines the entry point for the console application.
//
#include \"stdafx.h\"
#include <Windows.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char * ip = new char[16];
int port = 0;
char * pw = new char[16];
int bots = 0;
cout << \"IP: \";
cin >> ip;
cout << \"\\nPORT: \";
cin >> port;
cout << \"\\nPW(\'changeme\' ha nincs): \";
cin >> pw;
if(strcmp(pw,\"changeme\") == 0) pw = \"\";
cout << \"BOTS: \";
cin >> bots;
cout << \"\\nSTART = F12\";
while(!GetAsyncKeyState(VK_F12)) {}
for(int i = 0; i < bots; i++)
{
char params[51];
sprintf(params,\"\\nBOT: -h %s -p %d -n bot_%d -m npc_bare -z %s\",ip,port,i+60,pw);
printf(params);
ShellExecute(NULL,\"open\",\"samp-npc.exe\",params,0,false);
}
cout << \"\\nSTOP = F12 (ha csak kilepsz akkor fenn maradnak a folyamatok)\";
Sleep(500);
while(!GetAsyncKeyState(VK_F12)) {}
system(\"taskkill /IM samp-npc.exe /F\");
return 0;
}

 
A tesztekhez használt NPC szkriptem:
 

#include <a_npc>
#pragma library test //amxtest.dll
main()
{
}
public OnRecordingPlaybackEnd() {}
public OnNPCConnect(myplayerid)
{
SetTimer(\"RandomMsg\",10000,true);
}
forward RandomMsg();
public RandomMsg()
{
if(random(100) < 50) return 1;
new msg[][128] =
{
    \"Hello there!\",
    \"I\'m a talking zombie. Yay!\",
    \"Brainzzzz\",
\"Arrrrghh\",
\"Wait, am I a zombie?\",
\"Oh god, what a mess!\",
\"Nananananana, BATMAN!\"
};
SendChat(msg[random(sizeof(msg))]);
return 1;
}

 
Mûködésképtelen plugin:
 
#include \"..\\SDK\\amx\\amx.h\"
#include \"..\\SDK\\plugincommon.h\"
#include <fstream>
typedef void (*logprintf_t)(char* format, ...);
 
logprintf_t logprintf;
extern void *pAMXFunctions;
cell AMX_NATIVE_CALL amxtest(AMX* amx, cell* params)
{
FILE * fileptr;
fileptr = fopen(\"asd.txt\",\"a\");
fprintf(fileptr,\"amxtest()\");
fclose(fileptr);
    logprintf(\"This was printed from the Test plugin! Yay!\");
    return 1;
}
PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
{
    return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}
/*
Pawn Implemeter\'s Guide szerint így kéne de sajnos így sem mûködött
int amx_amxtestInit(AMX *amx)
{
FILE * fileptr;
fileptr = fopen(\"asd.txt\",\"a\");
fprintf(fileptr,\"amx_amxtestInit()\");
fclose(fileptr);
AMX_NATIVE_INFO amxtest_Natives[] =
{
{\"amxtest\", amxtest},
{0, 0}
};
return amx_Register(amx, amxtest_Natives, -1);
}
int amx_amxtestCleanup(AMX *amx)
{
FILE * fileptr;
fileptr = fopen(\"asd.txt\",\"a\");
fprintf(fileptr,\"amx_amxtestCleannup()\");
fclose(fileptr);
return AMX_ERR_NONE;
}
*/
PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
{
    pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
    logprintf = (logprintf_t) ppData[PLUGIN_DATA_LOGPRINTF];
    logprintf(\" * Test plugin was loaded.\");
FILE * fileptr;
fileptr = fopen(\"asd.txt\",\"a\");
fprintf(fileptr,\"Load()\");
fclose(fileptr);
    return true;
}
PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
    logprintf(\" * Test plugin was unloaded.\");
FILE * fileptr;
fileptr = fopen(\"asd.txt\",\"a\");
fprintf(fileptr,\"Unload()\");
fclose(fileptr);
}
AMX_NATIVE_INFO PluginNatives[] =
{
    {\"amxtest\", amxtest},
    {0, 0}
};
PLUGIN_EXPORT int PLUGIN_CALL AmxLoad( AMX *amx )
{
FILE * fileptr;
fileptr = fopen(\"asd.txt\",\"a\");
fprintf(fileptr,\"AmxLoad()\");
fclose(fileptr);
    return amx_Register(amx, PluginNatives, -1);
}
 
PLUGIN_EXPORT int PLUGIN_CALL AmxUnload( AMX *amx )
{
FILE * fileptr;
fileptr = fopen(\"asd.txt\",\"a\");
fprintf(fileptr,\"AmxUnload()\");
fclose(fileptr);
    return AMX_ERR_NONE;
}

 
Hogy megkönnyítsem a tesztelést kicsit belepiszkáltam a samp_npc.exe fájlba, így nem az npcmodes illetve npcmodes/recordings mappákból tölti be a fájlokat hanem közvetlenül a gyökérkönyvtárból. A módosított fájl itt megtalálható: http://solidfiles.com/d/ffff7ca505/
Tesztelve a következõ szervereken:
Fay RPG (egy sem csatlakozott)
See RPG reloaded (max 35 bot csatlakozott de nem spawnoltak (legalábbis nem találkoztam velük),hogy írtak-e a chatbe nem tudom de parancsot tudtak használni, admin/játékosok észre se vették, szerver nem dobálta le õket)
Rough Laugh (max 3 bot csatlakozott és le is spawnoltak, chatbe tudtak írni/parancsot tudtak használni,játékosok nem crasheltek viszont már idegesítette õket a chat floodolása :) )
Egy szerver aminek nem mondom el a nevét (kb 50 bot csatlakozott/le spawnolt,chatbe tudtak írni/parancsot tudtak használni, a szerver elkezdte õket szép sorban ledobálni és úgy az 5. kicknél lecrashelt mindenki)
 
[/quote]
U.I.: See RPG vezetõségét azóta már tudtommal értesítették a dologról és tettek ellene.

Nem elérhető KDDomi

  • 976
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #1 Dátum: 2012. Február 17. - 22:25:04 »
0
Hogy lehet npcket küldeni szerverekre? Csak én nemolvastam vagy az nincs benne?

Nem elérhető DaVe

  • 149
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #2 Dátum: 2012. Február 17. - 22:41:05 »
0
Vagy használod az általam adott forrás kódot.
(Ha nem áll rendelkezésre fejlesztõi környezet akkor tessék itt van lefordítva)
http://solidfiles.com/d/76b7f66747/
Vagy parancsosort indítasz:
cd *samp_npc.exe mappája*    (/D *meghajtó neve*  ha nem C.\\-n van)
start samp_npc.exe -h *ip* -p *port* -n *név* -m *npc miniszkript* -z *szerver jelszava*

Nem elérhető KDDomi

  • 976
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #3 Dátum: 2012. Február 17. - 23:04:18 »
0
Nem csatlakoznak az npck :SS
Pedig jó adatokat adok meg az asd.exe-be.

Nem elérhető DaVe

  • 149
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #4 Dátum: 2012. Február 17. - 23:09:38 »
0
server.cfg-ben maxnpc legyen nagyobb mint 0

Nem elérhető KDDomi

  • 976
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #5 Dátum: 2012. Február 17. - 23:17:28 »
0
5ön van a maxnpc. és igysem csatlakoznak

Nem elérhető DaVe

  • 149
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #6 Dátum: 2012. Február 17. - 23:57:02 »
0
Akkor a miniszkript nincs megfelelõ helyen. Ha az eredeti samp_npc.exe fájlt használod akkor tedd az npcmodes mappába, ha a módosítottat akkor a gyökérkönyvtárba
(feltételezem saját szervereden teszteled, de ha nem akkor elképzelhetõ hogy a szerver dobja le õket)

Nem elérhető KDDomi

  • 976
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #7 Dátum: 2012. Február 18. - 09:18:51 »
0
Házi szerveren teszteltem, de ottse jó. leszedtem azt az samp_npc.exe-t beraktam a fökönytárba az asd.exe mellé. megnyitom az asd.exe-t beirom az adatokat --> F12
És ha megynomtam valamit kiir és elkezd laggolni a gépem. de nézem a console-t de nem csatlakozott egy bot sem. pedig a szerveren nincs se jelszó se regisztráció.

Gang[St]e[R]

  • Vendég
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #8 Dátum: 2012. Február 18. - 09:24:58 »
0
Én npc-s szerverem is betámadták, hülyeség ilyet írni. Ha valamelyik szerveren alapból nincs npc, akk csinálják meg, hogy ha 1 npc is csatlakozik ban, az én szerveremen meg úgy oldottam meg, hogyha nem az a neve az npc-nek ami csatlakozik amit megadtam, akkor bannolja.

Nem elérhető DaVe

  • 149
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #9 Dátum: 2012. Február 18. - 09:47:40 »
0
GangSteR] neked külön szóltam még a témák nyitása elõtt, hogy hogyan lehet betámadni a szervered. Ha ez után sem tettél lépéseket ellene akkor az a támadás bizony már csak a te hibádból jöhetett létre.

Gang[St]e[R]

  • Vendég
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #10 Dátum: 2012. Február 18. - 14:53:56 »
0
Én a betámadáskor nem arra gondoltam mikor te kipróbáltad, hanem egy hacker küldött 2ször is npc-ket fel. Ez elleni védekezés könyü, mint mondtam ha valamelyik szerveren alapból nincs npc, akkor beírja ezt [pawn]if(IsPlayerNPC(playerid)){Ban(playerid);}[/pawn]
Az OnPlayerConnect alá.
Amelyik szerveren meg van npc, lekéri a nevét, és ha olyan npc jön fel, amelyneknem az a neve, akkor BAN.
És így fölösleges lenne ez a dolog, de megkell mongyam hasznos a te kódod is.

Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #11 Dátum: 2012. Február 18. - 15:11:26 »
0
Vagy mondjuk ip címét ellenõrzöd, és ha nem az az ipje ami 127.0.0.1 akkor bann:D

Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #12 Dátum: 2012. Február 18. - 16:01:09 »
0
\" post=\"226459\" timestamp=\"1329573236\"]
Én a betámadáskor nem arra gondoltam mikor te kipróbáltad, hanem egy hacker küldött 2ször is npc-ket fel. Ez elleni védekezés könyü, mint mondtam ha valamelyik szerveren alapból nincs npc, akkor beírja ezt [pawn]if(IsPlayerNPC(playerid)){Ban(playerid);}[/pawn]
Az OnPlayerConnect alá.
Amelyik szerveren meg van npc, lekéri a nevét, és ha olyan npc jön fel, amelyneknem az a neve, akkor BAN.
És így fölösleges lenne ez a dolog, de megkell mongyam hasznos a te kódod is.
 
[/quote]
De a nevet könnyebb hamisítani.
 

Vagy mondjuk ip címét ellenõrzöd, és ha nem az az ipje ami 127.0.0.1 akkor bann:D
 
[/quote]
Ez le van írva a leírásban, legelsõ példakód. (Csak kick-el)

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #13 Dátum: 2012. Február 18. - 17:26:54 »
0
SA-MP Team helyébe sírnék, hogy ilyen röhejes módon kijátszották a \"védelmi\" vonalakat.(Ha egyáltalán van...(kv. RakNet ami köztudottan szar :D )

Nem elérhető DaVe

  • 149
    • Profil megtekintése
Külsõ NPC csatlakoztatása | védekezés ellene
« Válasz #14 Dátum: 2012. Február 18. - 17:29:52 »
0
\" post=\"226459\" timestamp=\"1329573236\"]
Én a betámadáskor nem arra gondoltam mikor te kipróbáltad, hanem egy hacker küldött 2ször is npc-ket fel. Ez elleni védekezés könyü, mint mondtam ha valamelyik szerveren alapból nincs npc, akkor beírja ezt [pawn]if(IsPlayerNPC(playerid)){Ban(playerid);}[/pawn]
Az OnPlayerConnect alá.
Amelyik szerveren meg van npc, lekéri a nevét, és ha olyan npc jön fel, amelyneknem az a neve, akkor BAN.
És így fölösleges lenne ez a dolog, de megkell mongyam hasznos a te kódod is.
 
[/quote]
Tudom, hogy nem arra gondoltál viszont ha azután sem védekeztél ellene, hogy szóltam róla az nem az én hibám
Egyébként a név ellenõrzés macerás lehet egy olyan szerveren mondjuk ahol nem egy bizonyos sémát követnek a nevek ezért is egyszerûbb az IP cím ellenõrzése.
 

SA-MP Team helyébe sírnék, hogy ilyen röhejes módon kijátszották a \"védelmi\" vonalakat.(Ha egyáltalán van...(kv. RakNet ami köztudottan sz*r :D )
 
[/quote]
Kedves kalcornak írtam üzenetet még múlt héten de nem igazán izgatta...

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal