Szerző Téma: Anti-Dialog Hack 0.0.5  (Megtekintve 1271 alkalommal)

balintx

  • Vendég
Anti-Dialog Hack 0.0.5
« Dátum: 2011. október 02. - 18:47:32 »
+3 Show voters
Frissítve! Mindenki töltse le az új változatot!
A SA:MP-ban nem rég felfedezett sebezhetõség szerint a rosszindulatú játékosok módosíthatják a dialog-ok ID-it, és hamis adatokat küldhetnek a szervernek.
Ez azt jelenti, ha pl. van egy 400-as IDjû dialogunk, ami egyéni fegyermenünk, és csak pl. egy boltban jelenítjük meg ShowPlayerDialoggal, a kliens akárhonnan küldhet egy információt, ami meghívja a scriptünk OnDialogResponse callbackjét.
Természetesen elõállhatunk más példával is: egy ban dialog, ami egy /ban parancs hatására az adminoknak kihoz egy dialogot, hogy kit tiltsunk ki. Nem túl kellemes dolog, ha egy mezei \"játékos\" kibannolja az adminokat.
Ezt a kritikus problémát hivatott orvosolni az az include, amit a mai napon készítettem.
Mûködése: nyomon követi az összes ShowPlayerDialog-ban megadott dialogid-t játékosokra lebontva.
Ha az OnDialogResponse callback meghívódik, automatikusan eldönti, hogy hamisított adatról van-e szó.
Amennyiben az adh-val védett scriptünkben van OnDialogResponse callback, biztosak lehetünk benne, hogy csak valódi adatot kapunk, és azt is csak akkor, amikor a játékos valóban rákattint az általunk megjelenített dialog egyik gombjára.
Bónuszként egy funkció is bekerült:
[pawn]stock GetPlayerDialogID(playerid);[/pawn]
Eredménye a játékosnak aktuálisan megjelenített dialog ID-je. A ShowPlayerDialog függvényen alapul, így biztos, hogy a kliens nem tudja meghamisítani.
Használata:
A letöltött adh.inc fájlt a pawno/includes könyvtárába másoljuk.
Minden scriptünkben, ahol dialogot használunk (FS, GM) beillesztjük a következõ sort az include sorokhoz:[pawn]#include <adh>[/pawn]
Letöltés:
Google Code
Remélem sokan használni fogjátok, a ti érdeketek hogy ne törjék meg szervereteket ilyen sebezhetõségekkel.
« Utoljára szerkesztve: 2011. november 13. - 09:20:13 írta Jethro »

Nem elérhető JackBronson

  • 1499
  • ??
    • Profil megtekintése
Anti-Dialog Hack 0.0.5
« Válasz #1 Dátum: 2011. október 02. - 18:53:00 »
0 Show voters
Én eszt felhasználom csak kicsit átalakitom :)
Köszi.

Nem elérhető JackBronson

  • 1499
  • ??
    • Profil megtekintése
Anti-Dialog Hack 0.0.5
« Válasz #2 Dátum: 2011. október 02. - 18:56:53 »
0 Show voters
Csak azt,hogy ne kérdezze le az összes játékost állandóan hanem elég annak aki használ egy dialogot.

Kovacs_Bela

  • Vendég
Anti-Dialog Hack 0.0.5
« Válasz #3 Dátum: 2011. október 02. - 19:19:37 »
0 Show voters
WoW
Very Nice!
Használni én fogni...

Anti-Dialog Hack 0.0.5
« Válasz #4 Dátum: 2011. október 02. - 20:53:09 »
0 Show voters
Nem rossz, amúgy lehetne olyan kiadás is ami nem használ hook systemet mivel mostanában kiderült hogy eléggé túlzásba van véve a dolog és a CallLocalFunction bekerült a legsûrûbben meghívott eljárások sorába. Lásd Zeex profiler plugin eredményeit.
Ezért lehetne egy olyan kiadott változata amit csak be kell másolni az egyes visszahívások alá. Természetesen ezt mindegyik filterscriptben és módban alkalmazni kellene.

Anti-Dialog Hack 0.0.5
« Válasz #5 Dátum: 2011. október 02. - 21:14:55 »
0 Show voters
Hát ez a baj látod hogy csak azokra gondol a készítõ hogy talán ennyit megtesznek de aki meg ért hozzá az nem fog plusz inc fájlt használni, ezért kellene azokra is gondolni.
Amúgy nekem meg teljesen mindegy, és egy kicsit túl is van bonyolítva.
Az alap elv abból indul ki mikor ShowPlayerDialog kerül meghívásra akkor tároljuk PVarban a dialogid-t és ezt az értéket is ellenõrizni kell OnDialogResponse alatt, hogy a ténylegesen megjelenített dialog funkciói kerüljenek alkalmazásra a továbbiakban.
EDIT:
Minél többet nézem annál biztosabb vagyok benne hogy ez nagyon túl van bonyolítva és nem kicsit és nem értem mi kerül meghamisításra, meg hogyan lehet kicselezni, mivel sok helyen akár regisztráció akár login vannak külön funkciók amik bizonyos dolgoknál tovább lépnek, például ha valaki már be van jelentkezve
akkor csak egy üzenetet fog vissza kapni hogy õ már bejelentkezett felhasználó, és ha mondjuk van egy fegyver lekérõ dialog ami csak adminoknak van akkor
oda meg elég lenne pluszba beírni hogy újból ellenõrzésre kerüljön admin joggal rendelkezik-e az illetõ, ezért OnDialogResponse alatt nem csak a dialogid-k vannak ellenõrizve hanem sok egyéb más dolog is, ami igencsak megnehezíti a hamis dialogid dolgot.
Így az én javaslatom ha olyan eljárás van OnDialogResponse alatt ami adminoknak szól, akkor pluszba írjunk oda egy admin szint ellenõrzést is, mintsem egy plussz .inc-t alkalmazzunk.
Igaz többet tudnék mondani én is ha elõ tudnám idézni az ilyen dolgokat, de még nem találkoztam ilyesmivel.
Még egy edit:
Van ez a rész mit is ellenõriz pontosan?
[pawn]  new SA_ADH_ODR_dialogid = GetPVarInt(playerid, \"dId1\");
  if (SA_ADH_ODR_dialogid < 1 || SA_ADH_ODR_dialogid > 32767) return 1; /* illegal dialog ids */
  if (SA_ADH_DR)
  {
    if (SA_ADH_cODR(playerid, SA_ADH_ODR_dialogid, response, listitem, inputtext) == 1) /* the current script handled the dialog */
    {
  {[/pawn]
Hogy a ShowPlayerDialog meghívásakor eltárolt dialogid kisebb-e mint 0 vagy nagyobb-e mint 32767 és létezik-e az OnDialogResponse alias (SA_ADH_DR)
majd tovább lépve újabb OnDialogResponse létezik-e alias (SA_ADH_cODR to CalllocalFunction OnDialogResponse)?
Ezt nem tudom hogy véd a hamis dialogid ellen de mindegy.
Ennyi erõvel:
[pawn]
#define antidialog_id \"gtjkkktgdsatui\"
stock
ShowPlayerDialogEx(playerid, dialogid, style, caption[], info[], button1[], button2[])
{
SetPVarInt(playerid, antidialog_id, dialogid); // Dialogid mentés játékosonként
ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
}
#define ShowPlayerDialog ShowPlayerDialogEx   //A szkript lefordításakor (compile) az összes ShowPlayerDialog kicserélésre kerül erre ShowPlayerDialogEx
[/pawn]
Majd az OnDialogResponse alatt:
[pawn]
public
OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//   switch(dialogid)  // ez helyet használjuk az eltárolt dialogid-t
switch(GetPVarInt(playerid, antidialog_id))   
{
   case 1: {} // Ebben az esetben egy megjegyzés: ne használjunk 0 val jelölt dialogid-t mivel ha nincs adat megadva PVar-nak akkor alap értéke nulla.
   case 2: {}
   case 3: {}
   case 4: {}
   case 5: {}
}
return 1;
}
[/pawn]
Még egy edit:
Közben találtam egyet ajánlom áttanulmányozásra:
http://pastebin.com/kUgfNiLs
http://forum.sa-mp.com/showthread.php?t=283790&highlight=Anti-Dialog+Hack
« Utoljára szerkesztve: 2011. október 02. - 22:45:26 írta Zsolesszka »

Anti-Dialog Hack 0.0.5
« Válasz #6 Dátum: 2011. október 03. - 17:43:17 »
0 Show voters
Ezzel csak annyi a baj, hogy ha a PVar értéke egy ShowPlayerDialog után megváltozik, utána a spammelt dialogok mind azt a dialogid-t kapják meg. Így gyakorlatilag ott vagyunk ahol a part szakad: az utoljára megjelenített dialog még mindig meghívásra kerülhet akárhányszor.[/quote]
Egy ShowPlayerDialog után természetes hogy megváltozik a PVar értéke hiszen a kicserélt ShowPlayerDialogEx alias(SA_ADH_SPD) kerül meghívásra ahol újból tárolásra kerül PVar-ban a dialogid.
Abban amit írtam nincs semmi hook dolog ami plusz CallLocalFunction-t igényelne ezt az _ALS megoldást csak public funkcióknál szokás alkalmazni native funkcióknál nem.
Egyszerûen arról van szó hogy a definició
[pawn]#define ShowPlayerDialog ShowPlayerDialogEx   //A szkript lefordításakor (compile) az összes ShowPlayerDialog kicserélésre kerül erre ShowPlayerDialogEx[/pawn]
kicseréli az összes ShowPlayerDialog szöveget ShowPlayerDialogEx-re.
Ha egy dialog meg lett jelenítve majd OnDialogResponse alatt végrehajtásra is került ott szerepel egy return 1; ami lehetne a PVar értékének törlése/nullázása is, a visszatérési érték 1 lesz.
[pawn]return SetPVarInt(playerid, antidialog_id, 0);[/pawn]
Természetesen a dialogid-kre figyelni kell szkriptek terén pl:
0-2000-ig gamemod,
2001-3000 filterscript 1,
3001-4000 filterscript 2,
és így tovább.
 
Mivel sok értelmetlen dolgot hordtál itt össze-vissza, ezért úgy gondolom, válaszolok mindegyikre külön.[/quote]
Nem kerültem ellentmondásba magammal itt te vagy megkeveredve pöttyet és nincs semmi értelmetlen abban amit írtam mivel ezt a késõbbi válaszaidban is megerõsíted.
Ez vicc:
 
Az if (SA_ADH_DR) ellenõrzi, hogy a jelenlegi scriptben van e OnDialogResponse callback.[/quote]
Ha eleve betette az .inc fájlt akkor már van OnDialogResponse akkor minek ellenõrzi pluszba minden meghívásnál van-e, (jó a global változóban tárolt adatot ellenõrzi new bool:SA_ADH_DR; ), de minek?
 
+ Egy építõ jellegû javaslat: hosszabb PVar nevû értékek használata több számítási idõt igényel.[/quote]
Nem használok túl sok Pvart talán van 10 összesen, így teljesen mindegy milyen hosszú nevet adok neki, és fõleg nem használom loop funkciókban sem, így felesleges ez a tanács.
 
Erre inkább nem válaszolnék. Ajánlom az if (SA_ADH_ODR_dialogid... sort áttanulmányozni.[/quote]
Áttanulmányoztam le is írtam még az este, olvasd el újra ha gondolod.
Hirtelen ennyi fért bele, de lehet írok még.

Anti-Dialog Hack 0.0.5
« Válasz #7 Dátum: 2011. október 03. - 18:22:19 »
0 Show voters
Hát írok is végre megpróbáltam betenni ezt az egészet egy szkriptbe a következõ hiba üzenetet kaptam:
 
    (52): warning 225: unreachable code
[/quote]
Mielõtt kérdeznél test_cmds.pwn-be próbáltam tenni.
Épp akartam egy szkripttel bizonyítani valamit, amit észre vettem az egészben, de ha még alkalmazni se lehet hiba nélkül nehéz lesz.
Majd nézem a fórumot és ha lesz újabb verzió, megpróbálkozok vele újra.
Mivel én csak alap ötletet írtam össze hirtelen és nem egy teljes dolgot, így találni benne kifogást hogy most nincs a PVar nullázva a második hozzá szólásban közöltem mikor kell törölni.
Native funkciót nem szokás _ALS hook dologgal megírni lásd Ryder`GetVehicleColor.inc
Ne is lovagolj rajt mivel hiba nélkül használni se lehet.  :D :D
 
Nem érdekes a visszatérési érték.[/quote]
Miért is? Épp írtad a szkriptben ha return 0; akkor kerül meghívásra a többi szkriptben a többi OnDialogResponse ha return 1; akkor nem kerül meghívásra a többi.
Akkor most ez hogy is van, most meg nem érdekes?

Anti-Dialog Hack 0.0.5
« Válasz #8 Dátum: 2011. október 03. - 19:05:32 »
0 Show voters
Jó akkor íme a kísérleti filterscript:
[pawn]#include <a_samp>
#include <anti_dialog_by_koczka>
public
OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(\"/show\", cmdtext, true) == 0)
{
   SendClientMessage(playerid, -1, \"Use Command /show\");
   ShowPlayerDialog(playerid, 8765, print(\"Called ShowPlayerDialog dialogid 8765\") - 1, \"Anti teszt\", \"info\", \"ok\", \"mégse\");
   return 1;
}
return 0;
}
public
OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new
   str[128];
format(str, sizeof(str), \"Called OnDialogResponse dialogid: /d\", dialogid);
SendClientMessage(playerid, -1, str);
print(str);
switch(dialogid)
{
   case 8765:
   {
      SendClientMessage(playerid, -1, \"Called OnDialogResponse dialogid 8765\");
      if(response)
      {
         SendClientMessage(playerid, -1, \"select ok\");
         print(\"select ok\");
      } else {
         SendClientMessage(playerid, -1, \"select mégse\");
         print(\"select mégse\");
      }
      return 1; // Sikeres végrehajtás
   }
}
return 0;
}[/pawn]
A dialog megjelenik nem kérdéses de az utána lévõ dolgokból nem kerül semmi végrehajtásra!
Ezt az üzenetet kellene látnom \"Called OnDialogResponse dialogid: /d\" miután valamelyik gombra kattintottam vagy enter vagy esc de semmi.
Következõ verzió?

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
Anti-Dialog Hack 0.0.5
« Válasz #9 Dátum: 2011. október 03. - 19:31:49 »
0 Show voters
FLAMEWAR ENDED!!
 
Sûrûn szoktam olvasgatni a hivatalos fórumot, de errõl a hibáról még nem hallottam.
Kifejtenéd, hogy mégis hogy is van ez?
Hivatalos forrást linkelnél, annak is örülnék.

Koncz_Norbert

  • Vendég
Anti-Dialog Hack 0.0.5
« Válasz #10 Dátum: 2011. október 03. - 20:00:46 »
0 Show voters
Te vagy KoczkaHUN?
Am nem rossz szkript, de nem igazán jó. Zsolesszka oldalán állok és részben mond valamit.

Koncz_Norbert

  • Vendég
Anti-Dialog Hack 0.0.5
« Válasz #11 Dátum: 2011. október 03. - 20:59:15 »
0 Show voters
Már majdnem azt írtam, hogy koppintás. http://forum.sa-mp.com/showthread.php?p=1412167
 
Idézetet írta: balintx date=1317664999\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"12165\" data-ipsquote-contentclass=\"forums_Topic
Mutass egy kódrészletet, ami szerinted nem hatékony benne.
Vagy mondd el, mi a gond vele.
 
A függvénykönyvtárral nincsen probléma. Ezt kilehet játszani fõleg 4 bytes integerrel amit sobeitben is alkalmaztak.
És Gamer_Z-nek nem tudom honnan jött neki a 001F76B0 és az 001F76BC címke, de nekem valamiért a score táblára
irányít. Magyarországon nincsen sok C++ IQ-Fighter hogy gui hackre gyanakodjunk.
A forráskódot nézve elég rendetlen és van esélye arra hogy kliens oldali figyelmeztetések jelentkezzenek.

Nem elérhető Zharko

  • 1955
  • Future House <3
    • Profil megtekintése
Anti-Dialog Hack 0.0.5
« Válasz #12 Dátum: 2011. október 03. - 22:40:22 »
0 Show voters
Szerintem kurvára de felesleges :D Meg egy képzett, mondhatni profibb programozó nem azon fogja törni a fejét, hogy a dialogidt megváltoztassa, és kibannolja az adminokat.. xD Egy 10-12 éves emg szerintem nem tudja megcsinálni.. De kitudja. csak egy vélemény.
Egyébként jóféle :D

Nem elérhető instant

  • 2778
  • ZzzzzZ
    • Profil megtekintése
Anti-Dialog Hack 0.0.5
« Válasz #13 Dátum: 2011. október 20. - 16:39:57 »
0 Show voters
jó lett

Nem elérhető The

  • 4384
    • Profil megtekintése
Anti-Dialog Hack 0.0.5
« Válasz #14 Dátum: 2011. október 23. - 15:26:30 »
0 Show voters
Idézetet írta: Zharko date=1317674422\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"12165\" data-ipsquote-contentclass=\"forums_Topic
Szerintem kurvára de felesleges :D Meg egy képzett, mondhatni profibb programozó nem azon fogja törni a fejét, hogy a dialogidt megváltoztassa, és kibannolja az adminokat.. xD Egy 10-12 éves emg szerintem nem tudja megcsinálni.. De kitudja. csak egy vélemény.
Egyébként jóféle :D
 
Ugyan ez a véleményem  :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal