Kérdés:
A játék csomag titkosítási funkciójának fordított tervezése
Renan Moura
2015-05-05 05:48:59 UTC
view on stackexchange narkive permalink

Játékkiszolgáló-emulátort próbálok készíteni egy adott MMORPG (Tökéletes Világ) számára. Ismerem a játék hálózatának működésének alapjait és egyes csomagok felépítését, de ezek mind titkosítva vannak, kivéve a bejelentkezési csomag felhasználónevét.

Az Olly segítségével próbálom megtalálni a crypt függvény azoknak a csomagoknak, amelyeket az ügyfélről a szerverre küldenek, hogy tudják, hogyan kódolja a játék az adatokat, és segítségre van szükségem a crypt függvény megtalálásához. Készítettem néhány képernyőképet Olly-ról a hibakeresés során, és megjegyeztem, amit elemeztem a kódban.

Ez azelőtt van, hogy megtaláljam az elküldendő hívást, amikor csevegő üzenetet küldök a játékban, ezt látom:

b

Ekkor találtam meg a függvényt, amely hívást küld, és a függvény minden egyes sorának kiírását a hívás küldéséig:

c

Több képernyőképem van a dumpról a többi vonal számára, de nincs hírnevem, hogy egyszerre kettőnél több linket tegyek közzé , ezért később felteszem a többieket, ha valaki akarja őket.

A kérdésem az, hogy hol van a kriptafüggvény? És hogyan működik olyan nyelven, mint a C ++?

Egy válasz:
Dominik Antal
2015-05-05 16:11:02 UTC
view on stackexchange narkive permalink

Először futtatnék néhány statikus elemzést az alkalmazáson, például a Findcrypt vagy a ProtectID és a PEID Kanal plugin segítségével, hogy a használt ismert statikus értékek után kutassak. különféle titkosítási algoritmusokban. Ha talál valamit, keresse meg, hogy melyik függvény kereszthivatkozással éri el őket (X az IDA-ban, CTRL + r ollyban), és eljut a titkosítási funkció (k) hoz, vagy legalábbis nagyon közel van hozzájuk.

Ha ez a megközelítés sikertelen, elkezdheti nyomon követni egy olyan dinamikus hibakeresőben, mint az olly. Megtalálta a küldés funkciót, és elkezdhette visszakeresni a hívásköteget. Válassza ki a verem tetejét, és kattintson a követés elemre a szétszerelőben, amellyel eljuthat a küldési függvény nevű függvényhez. Helyezzen töréspontot a függvény tetejére. Ismételje meg ezt többször, visszalépve a hívásfába, és figyelje meg azokat a változókat, amelyekkel a függvény meghívásra kerül, amíg meg nem jelenik a titkosítandó adat.

A második képen megmutatja azt a funkciót, amelyet a hívások küldenek ( ) a titkosított adatokkal. Több szintet kell visszalépnie a titkosítási módszer közelébe.

Keressen releváns karakterláncokat a bináris fájlban (Shift + F12 az IDA-ban), például: "kulcs", "crypt", "jelszó", és kereszthivatkozás, hogy megtudja, melyik függvény használja.

Feladhat egy hardveres töréspontot azokra az adatokra is, amelyekről tudod, hogy valamikor titkosításra kerülnek, és ellenőrizheti, hogy hol érik el őket.

Annak megerősítéséhez, hogy az alkalmazás statikus kulcsot használ-e vagy sem, beállíthat egy új környezetet a játékhoz egy másik fiókkal egy másik gépen, és megnézheti, hogy a titkosított adatok ugyanazokra a bájtokra vannak-e titkosítva, mint amelyeket a képen talált 1. Ha ez megegyezik, a titkosítás statikus kulcsot használ.

Emellett van néhány bejegyzés erről a játékról a ragezone-on és az elitepvpers-en, ha minden egyéb nem sikerül, akkor tudnak segíteni:)

köszi, hogy segítettél, de a lelet nem talált semmit. Kiválasztottam a hívásküldés funkciójának tetejét, és feltettem egy töréspontot a tetejére, de nem működött újra. Az egyetlen módja annak, hogy találtam valamit, az az, amikor memória / harware töréspontot állítok be a titkosítandó adatokra, egy olyan kódrészletre megyek, ahol úgy néz ki, hogy ez egy looping függvény, amely kivonja a csevegő üzenetet, például: " hello "," ello "," llo "és így tovább, de nem találok logikát a függvény kódján
Kipróbálta az összes észlelési eszközt, vagy csak a findcryptet használta? Teljesen lehetséges, hogy nem észlelnek semmit, de mégis van valami. Mit értesz azon, hogy "de nem dolgozol újra"? Amikor látja a hurkolást, valószínűleg másolja ezeket az adatokat egy másik pufferbe. Figyelje meg, hová másolják, és helyezzen rá HW töréspontot is. Valószínűleg egy kicsit később titkosításra használják. Kérjük, a lehető legrészletesebben szerkessze kérdését az előrehaladással.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...