Szerző Téma: [Tutorial] Update memory hacking plugins  (Megtekintve 3280 alkalommal)

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Dátum: 2016. Január 28. - 21:14:28 »
+9
Áthoztam ide is a linket egy hivatalos fórumon írt leírásomra, hátha segít valakinek:
http://forum.sa-mp.com/showthread.php?t=599574

Nem elérhető Cappsy

  • Adminisztrátor
  • 2754
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #1 Dátum: 2016. Január 28. - 21:55:34 »
0
[admin]Tudom, hogy közhelyes vagyok. De tekintetve a fórumozókra: A fórum nyelve magyar! Nem tudnál esetleg egy magyarított leírást is csinálni?  :yucky: :)[/admin]

Nem elérhető TwisT3R

  • 576
  • Küklopsz
  • Discord: TwisT3R#7833
    • Profil megtekintése
    • Firing Squad Clan
[Tutorial] Update memory hacking plugins
« Válasz #2 Dátum: 2016. Január 28. - 23:44:29 »
0
Akinek szüksége van rá úgyis megérti.

Nem elérhető Cappsy

  • Adminisztrátor
  • 2754
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #3 Dátum: 2016. Január 28. - 23:48:06 »
0
Idézetet írta: TwisT3R date=1454021069\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"59321\" data-ipsquote-contentclass=\"forums_Topic
Akinek szüksége van rá úgyis megérti.
 
Gondold át még egyszer.. :). Nem \"egyenesen arányos\" a dolog. Épp emiatt kértem arra, amire..

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #4 Dátum: 2016. Január 29. - 18:43:39 »
+13
Maga a leírás arról szól, hogyan is találjunk meg struktúra címeket samp szerverben. Nem fogom mondani, hogy miért csináld, csak azt fogom elmondani, hogy hogyan csináld. Nincs valami nagy assembly tudásom, de nem is kell ha csak frissíteni akarod a struktúrákat, vagy a memória offsetteket. Kibaszott könnyű, csak kicsit időigényes. Használd a fejed és gondold át mindig.
SA-MPnak szüksége van több olyan emberre, akik tudják hogyan is frissítsék a memória hackelő pluginokat. A legtöbb abba marad, mert unalmas frissíteni őket minden egyes verziónál és a készítő leszarja azt és majdnemhogy senki se tudja frissíteni, mert nem tudják hogyan is kell.
Először is, szükségünk van az IDA Pro-ra (használd a Google-t). A 6.8-as verziót ajánlom, de linket nem fogok ide rakni, mivel a warez nem engedélyezett. Régebbi verzió is megteszi viszont.
Memória offsettek keresése:
Nyisd meg az IDA-t, és a következő ablakot kell, hogy lásd:
\"ida_1.png\"
Kattintsunk a \"Go - Work on your own\"-ra
\"width=500http://mfrserver.net/IDA/ida_2.png[/img]
Nagyszerű, ha ezt látod, akkor nem vagy balfasz. Most kattintsunk a File majd az Open-ra és nyissuk meg a \"samp-server.exe\"-t
\"width=500http://mfrserver.net/IDA/ida_3.png[/img]
\"width=500http://mfrserver.net/IDA/ida_4.png[/img]
Kattintsunk az OK-ra és várjunk egy kicsit. Ha befejezte az .exe feldolgozását, akkor a következő képet kell, hogy lásd:
\"width=500http://mfrserver.net/IDA/ida_5.png[/img]
Kattintsunk a Jobb egérgombbal és válasszuk a \"Text view\" lehetőséget.
Ha mindent jól csináltál, akkor a következőt kell, hogy lásd:
\"width=500http://mfrserver.net/IDA/ida_6.png[/img]
Nagyszerű! Most megfogjuk keresni azt a memória helyet, amit a SA-MP szerver használ a játékos életének tárolására.
Nyomjuk meg a SHIFT + 12-t ami felhoz egy új eszköztárt \"Strings\" néven. Navigáljunk ide és nyomjuk meg az ALT + T-t és keressünk rá a GetPlayerHealth-ra
\"width=500http://mfrserver.net/IDA/ida_7.png[/img]
Kattintsunk kétszer a GetPlayerHealth szövegre. Ha mindent jól csináltál, akkor valami hasonlót kell, hogy kapj:
\"width=500http://mfrserver.net/IDA/ida_8.png[/img]
\"width=500http://mfrserver.net/IDA/ida_9.png[/img]
Nyomjuk meg az F5-t. Az IDA most létrehozza a pszeudokódot assembly kódból, amit SOKKALTA könyebb olvasni.
\"width=500http://mfrserver.net/IDA/ida_10.png[/img]
Most már van információd, hogy megkapd a következő 5 dolgot:
pNetGame
CPlayerPool *pPlayerPool mutató helye CNetGame class-on belül
CPlayer *pPlayer mutató helye CPlayerPool class-on belül
fHealth CPlayer class-ban
amx_GetAddr (sub_403100)
Kattints a dword_4F6CC8-ra, nyomj egy N-t és írd be: pNetGame. Ez a pNetGame mutatója, amit most átneveztél olvashatóbb névre, és majd a későbbiek folyamán pNetGame-ként fog szerepelni. Cím a mutatóhoz: 0x4F6CC8. NEKED MÁS LESZ A CÍM, MIUTÁN A TESZT SZERVEREM 0.3.7 R1 ÉS NEM R2-1.
----------------------------------------------------
(_DWORD *)pNetGame + 2) pPlayerPool mutatónak a helye. (_DWORD *)pNetGame + 2) egyenlő (char*)pNetGame + 8 )-cal.
Menj a következő linkre, és találd ki a válaszokból, hogy miért: http://stackoverflow.com/questions/26976784/c-read-from-class-by-its-pointer-and-offset
 

(char*)pNetGame +8). // 8 az offset a pPlayerPool mutatónak CNetGame class-on belül

 
---------------
Most már meg van a pPlayerPool! Szép! Meg kell találnunk a pPlayer-t pPlayerPool-on belül ami egy mutató tömb, és minden egyes index adatot tárol egy játékosról.
Nézzük meg az első sort, ahol megkapjuk a pNetGame címet.
 

((_DWORD *)pNetGame + 2) + 4 * playerid + 154012)

 
154012 - ez a címe a pPlayer mutatónak a CPlayerPool class-on belül.
Fenomenális! Most már megvan a pPlayer mutatója. Most már csak meg kell találnunk a(z) fHealth helyét a CPlayer class-on belül.
 

*(_DWORD *)a2 = *(_DWORD *)(v3 + 10529);

 
v3 + 10529
KÉSZ!
 

struct CPlayer
{
    BYTE padding[10529];
    float fHealth;
};
struct CPlayerPool
{
    BYTE padding[154012];
    CPlayer *pPlayer[MAX_PLAYERS];
};
struct CNetGame
{
    BYTE padding[8]; // offsets starts from 0
    CPlayerPool *pPlayerPool; // stars from 8, ends at 12
};
CNetGame *pNetGame = (CNetGame*)0x4F6CC8;

 
Ha leszeretnéd tesztelni ezt a példát, akkor ne felejtsd el a következő dolgot Visual Studioban; Át kell állítanod a struct rendezést 1 bájtra, az alapértelmezett 4 helyett. Ha kihagyod ezt a lépést, akkor a kód nem fog működni.
In Visual Studio: Project File -> Properties -> C/C++ -> Code Generation -> Sturct member Alignment -> 1Byte (Zp1)
GCC-ben: -fpack-struct=1
 
Most már megvan minden. Ha leakarod kérni a játékos életét, akkor csinálhatod a következőt:
 

pNetGame->pPlayerPool->pPlayer[playerid]->fHealth;

 
Ha hozzáakarsz férni az összes classhoz a CNetGame-n belül, akkor lesd meg a YSF-t: https://github.com/kurta999/YSF/blob/YSF_/src/Structs.h#L734
RPC-k keresése
Funkciókhoz
SetGravity RPC megkereséséhez:
1.) Keress rá a \"SetGravity\"-ra a szövegek ablakban, aztán csináld ugyanazt, amit mondtam a hogyan navigáljunk a funkcióhoz előtt.
2.) Vizsgáld át az assembly/pszeudo kódot, csak egy funkció meghívás van és nem több. ( call    sub_48E260 )
3.) Navigáljunk erre a funkcióra, nyomjuk meg az F5-t - vizsgáld át a pszeudokódot hogyan néz ki - most már látod hogy több kód is van, tehát jó helyen járok - menj vissza assembly nézetbe.
4.) RPC lehet egy BYTE ( 0 - 255 ), ahol csak egy karakter, egy bájt.
.text:0048E2FA                 push    offset aT       ; \"ĺ\"
5.) Kattints kétszer az aT-n és a következőt kell, hogy lásd:
.rdata:004B592C aT              db \'ĺ\',0
6.) Válaszd ki a(z) ĺ-t, válts át hex nézetben az eszköztár menüben, és ami kivan választva, az az RPC ID-d.
0x92 SetGravity-nak.
callbackekhez
1.) Keress rá a(z) \"OnPlayerSpawn\"-ra a szövegek menüben, aztán csináld ugyanazt, amit mondtam a hogyan navigáljunk a funkcióhoz előtt.
2.) Vissza kell menned, AHOL ez a funkció meg lesz hívva:
Ez az alap funkció, ami meghívja a pawn callbacket, amikor egy játékos spawnol. Nevezd át PAWN_OnPlayerSpawn-ra.
.text:0046ADF0 sub_46ADF0      proc near               ; CODE XREF: sub_48EA70+118p
Kattints kétszer a memória címre CODE XREF után. Most átugortál egy funkcióhoz, ami a funkció RPC-je. Nevezd át INTERNAL_OnPlayerSpawn-ra. Ez a funkció mindig mindig meg fog hívódni, amikor a szerver megkapja az RPC-t az OnPlayerSpawn RPC ID-jével, majd meghívja a PAWN_OnPlayerSpawn-t, ami meghívja az OnPlayerSpawn-t a pawn scriptekben.
Tehát menjünk vissza, van egy funkciók ami meghívódik RPC által. Kattintsunk a DATA XREF címre, majd nyomjunk F5-t.
Valami hasonlót kell, hogy láss:
  (*(void (__thiscall **)(int, void *, char **(__cdecl *)(int)))(*(_DWORD *)v1 + 116))(
    v1,
    &unk_4B5E18,
    INTERNAL_OnPlayerSpawn);
Visszamentél a RakServer::RegisterAsRemoteProcedureCall-okhoz. Ennek a funkciónak két paramétere van:
 

virtual void RegisterAsRemoteProcedureCall( int* uniqueID, void ( *functionPointer ) ( RPCParameters *rpcParms ) );

 
Ebből tudod az utolsót - ez az OnPlayerSpawn. Kattints a legelső paraméterre (unk_4B5E18), válaszd ki, válts át hex nézetbe és másold ki az RPC ID-t. Ez 0x34.
https://github.com/kurta999/YSF/blob/YSF_/src/RPCs.cpp
Gyakorlás
Ajánlom, hogy próbálj meg olyan offsetek keresni, mint a játékos pozíció, játékos fegyver, jármű szín, stb, stb.. Használhatod a Structs.h-t YSFből, hogy ellenőrízd, hogy az offset helyes-e vagy sem.

[Tutorial] Update memory hacking plugins
« Válasz #5 Dátum: 2016. Január 29. - 18:44:45 »
0
Ez igen, szép munka! Sokak nevében köszönjük DrAkE[/member]!
www.twitch.tv/almightymartin

Az év STAFF tagja - 2015
Az év RP szervere - 2015 - [rc-rp.hu]

Red County Role Play [rc-rp.hu] - Tulajdonos
Project San Andreas [psa.hu] - Főadminisztrátor
See MTA LV [see-game.com] - Admin 4

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #6 Dátum: 2016. Január 29. - 20:07:53 »
0
Idézetet írta: Cα℘℘ჷƴ date=1454014534\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"59321\" data-ipsquote-contentclass=\"forums_Topic
Tudom, hogy közhelyes vagyok. De tekintetve a fórumozókra: A fórum nyelve magyar! Nem tudnál esetleg egy magyarított leírást is csinálni?  :yucky: :)
 
Nincs időm ilyenekre  :D
Mellesleg nem hoztam volna ide a linket, ha ez nem egy olyan \"secret\" dolog lenne évek óta, hogy kb. a scripterek 98%-a azt se tudja, mit kezdjen vele. Ezután se fogja egyből felfogni senki, sok gyakorlát és gondolkodást igényel, hogy megtanulja.
DrAkE[/member]: Kösz a fordítást!  :)

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #7 Dátum: 2016. Január 29. - 21:13:18 »
0
Idézetet írta: kurta999 date=1454094473\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"59321\" data-ipsquote-contentclass=\"forums_Topic


Tudom, hogy közhelyes vagyok. De tekintetve a fórumozókra: A fórum nyelve magyar! Nem tudnál esetleg egy magyarított leírást is csinálni?  :yucky: :)
 
Nincs időm ilyenekre  :D
Mellesleg nem hoztam volna ide a linket, ha ez nem egy olyan \"secret\" dolog lenne évek óta, hogy kb. a scripterek 98%-a azt se tudja, mit kezdjen vele. Ezután se fogja egyből felfogni senki, sok gyakorlát és gondolkodást igényel, hogy megtanulja.
DrAkE[/member]: Kösz a fordítást!  :)
 
[/quote]
Inkább Én köszönöm, hogy csináltál egy leírást. Végre értem :D

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #8 Dátum: 2016. Január 29. - 22:39:58 »
0
RPC-s része is érthető?
Esetleg pl az armourt és a vehicle id-t is megtudnád keresni és felírni a struktúrát a nulláról a fentihez, amiben a health van benne? (CPlayer-t)
Úgy, hogy az életet, a páncélt és a jármű id-t tartalmazza? Ha igen, akkor érted :D

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #9 Dátum: 2016. Január 29. - 23:03:37 »
0
Idézetet írta: kurta999 date=1454103598\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"59321\" data-ipsquote-contentclass=\"forums_Topic
RPC-s része is érthető?
Esetleg pl az armourt és a vehicle id-t is megtudnád keresni és felírni a struktúrát a nulláról a fentihez, amiben a health van benne? (CPlayer-t)
Úgy, hogy az életet, a páncélt és a jármű id-t tartalmazza? Ha igen, akkor érted :D
 
Annyira nem éltem még bele magam, de remélem gyakorlással belejövök :D Viszont leírás, néhol kicsit értelmetlenül van megfogalmazva (\"then do same what I said before how to navigate to the function\") és összetudja kavarni az embereket.

Nem elérhető divkn

  • 3259
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #10 Dátum: 2016. Január 30. - 00:04:37 »
+1
Nem teljes visszafordított verzió, RakNet funkciók keresgéléseknél feladtam. XD
És még ott a ttmath, ActorPool...
http://www.solidfiles.com/d/a53d995792/

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #11 Dátum: 2016. Január 30. - 00:34:26 »
0
Tese unatkoztál... Fasza :D
http://pastebin.com/GYNb14Jn
Mellesleg CTRL + F9 -> importáld be az ittlévő dolgokat, aztán ahol van egy pPlayer vagy pNetGame ott jobb klikk rá és \"Convert to struct*\" azt kiválasztod neki a megfelő struktúrát a listából, és valami ilyesmit fogsz kapni:
http://pastebin.com/wkWvfmhh
(Compiler options - default alignment -> 0)
« Utoljára szerkesztve: 2016. Január 30. - 00:38:21 írta kurta999 »

Nem elérhető divkn

  • 3259
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #12 Dátum: 2016. Január 30. - 22:10:07 »
0
Nem importálja be a fájl tartalmát, mármint kiírja azt hogy importálva, de struktúra listában nincs.
Most nézem hogy F5-re sem reagál, a pseudocode nézetre. Bár nem is fog hiányozni, nem 100% az amit visszafordít.

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #13 Dátum: 2016. Január 31. - 17:51:53 »
0
Az csak akkor van ott, hamá társítod valamihez a struktúrát. (jobbklikk -> convert to struct* - itt megjelenő listán 100%, hogy itt lesz!!!) Mellesleg az hülyeség, hogy nem 100%-os a visszafordítás, mert az, csak néha elég érdekes kódok keletkeznek.
Netán ha kéne 6.8-as ida, akkor dobj egy pm-et és küldöm.

Nem elérhető divkn

  • 3259
    • Profil megtekintése
[Tutorial] Update memory hacking plugins
« Válasz #14 Dátum: 2016. Január 31. - 21:32:21 »
0
Nincs \"Convert to struct*\" opció 6.5-ben úgy látszik, viszont az van hogy struktúrák fülön hozzá kell adni eggyessével a struktúrákat és akkor jobb kattintás egy elágazásban és \"Structure offset\"-> [eax+CNetGame.pPlayerPool]
E: Ahh, fuck it. Inkább mellé írom kommentben.
« Utoljára szerkesztve: 2016. Január 31. - 21:46:46 írta divkn »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal