A téma értékelése:
  • 2 szavazat - átlag 5
  • 1
  • 2
  • 3
  • 4
  • 5
Leírás Az EterPack
#1
Szóval eljött az ideje az első posztnak, úgyhogy mivel a következő az EterWizard lesz, ezért összerakok egy átfogó ismeretterjesztőt az eterpackról és annak működéséről, illetve bizonyos gyengeségeiről is szó lesz a témában. Az ötlet igazából onnan jött, hogy gyakorlatilag egy évtizede használjuk már, és mégis senki semmit nem tud róla...

EterPack?

A Metin2 adatfájlait (alapból *.eix, *.epk) hívjuk így. Ugyebár mindenki látott már ilyeneket, az *.eix (feltételezem EterIndex, vagy EterpackIndex) tartalmazzák az adott csomag fájlneveit/"elérési útját", illetve információkat arról, hogy melyik fájl hol található a packban (*.epk, feltételezem EterPack Tongue ), ahol ugyebár fizikailag tárolva vannak a fájlok.

Az index

Nos ugyebár az előbb említettem nagy vonalakban, hogy mi is a szerepe, de nézzünk bele kicsit mélyebben a dologba.
Az index alapjáratom minimum 12 byte hosszú, ez alatt semmiféleképpen nem nem beszélhetünk index fájlról, hiszem az index alapból így épül fel:
  • header, 12 byte (lásd: CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite))
    1. fourCC ->  4 x BYTE = DWORD hosszúságú, ez azonosítja az index fájl kódolásának típusát (egyeseknek biztos feltűnt, hogyha ránéznek hex editorban az indexre, akkor látják ezt)
      Típusok:
      • EPKD: titkosítás: nincs compress: nincs (alapból nem ez van beállítva csomagolásnál)
      • MCOZ:
          titkosítás
        : 4 kulcsos TEA titkosítás (legtöbb kliensben ez az egy titkosítás van használva, pack fájlok nincsenek titkosítva)
          compress
        : szokásos lzo1x-es compress, ami egyébként nagyon jó arányú tömörítést végez
        Alapból ezt használja a csomagoló.
      Át lehet írni, ha egyedit szeretnél, értelme nem sok, egy mozdulattal lehet módosítani, szerepe azonban a csomagoló számára fontos, így tudja azonosítani az index fájl "típusát" (mivel lett compresselve, cryptelve, stb...)
    2. verziószám -> 1x DWORD (4 Byte): értelme nem sok van, gondolom korábban a ymir átcsomagolta a fájlokat és nem szerette volna, hogy a régi fájlok működjenek a kliensben. Át lehet írni, mivel alapból a csomagolók szűrik, viszont egyrészt könnyen módosítható, másrészt ki is lehet venni a csomagolókból az ellenőrzését. (+ csomagoló ad rá syserrt is, hogy mi a baj kicsomagolásnál).
    3. indexek száma -> 1x long (4 Byte): valódi fájlok számát tartalmazza, azaz hogy hány darab "index" van a későbbiekben a fájlban (területszámításhoz kell (pl for loop, stb...)).
  • indexek (186 (crc ellenőrzés esetén, md5 esetén 198) byte * indexek száma a mérete).
    [Csak regisztrált felhasználók láthatják ezt a tartalmat.]
    egy kép a structról. Ezeknek a feladata a fájlok nevének, és adatainak tárolása, mint pl hol foglal helyet az adatfájlban, mekkora a mérete, mi a checksumja, mivel lett csomagolva, stb (gondolom a képen egyértelműen látszik).
    Itt már jobban van értelme módosítást végrehajtani. Például crc helyett md5-öt használni, vagy akár csak + byteokkal megnövelni a structot, és máris képtelenek más bontók hasznosítani az index fájlunkat. (Nem egy nagy védelem, ASM-hez jobban értők simán visszakeresik a structod méretét.)

Szóval mint az látható, index fájl nem FELTÉTLENÜL szükséges bontáshoz. Persze elég bonyolult úgy bontani, hogy nem tudod a fájl konkrét méretét, vagy nevét, de ha a pack fájl nincs titkosítva, akkor esetleg egy ilyet is meg lehet játszani.
Érdekesség, hogy csupán az index fájl használatával lehet készíteni olyan toolt, amely bizonyos fájlokat megkeres anélkül, hogy kibontanád a teljes packot. Későbbiekben ha lesz rá időm, biztosan fogok egy ilyet is valahova kirakni Smile

A data fájl

Nos mint a neve is mondja, itt vannak fizikailag tárolva a fájlok, ezeket indexeli az eix fájl. Túl sok dolgot nem lehet róla elmondani, mivel szimplán és egyszerűen nem áll másból, mint adatból. Na persze fontos megemlíteni itt is a kódolásokat és a compresst.
Típusok (typek szerint):
  • COMPRESSED_TYPE_NONE (type 0): Nos ez az a verzió, ami gyakorlatilag csak egymás mellé beteszi a fájlba a kliens fájljait.
    [Csak regisztrált felhasználók láthatják ezt a tartalmat.]
      Titkosítás: nincs
      Compress: nincs
  • COMPRESSED_TYPE_COMPRESS (type 1): Neve gondolom mindent elárul, simán csak compressel. Ebben az esetben már nem csak a fájlok vannak tárolva a packban, hanem a compresshez szükséges
    [Csak regisztrált felhasználók láthatják ezt a tartalmat.]
    is. Erről elég annyit tudni, hogy minden fájl elé kerül egy ilyen.
      Titkosítás: nincs
      Compress: lzo1x-es compress
  • COMPRESSED_TYPE_SECURITY (type 2): Számomra ez tetszik a legjobban, mivel ennek konkrétan megvan az algoritmusa, és lehet módosítani, nem úgy, mint a következő esetekben. Mint azt a neve is mondja, itt már compress és titkosítás is van, a header pedig továbbra is ugyan az, mint a korábbi esetben.
      Titkosítás: 4 kulcsos TEA titkosítás (hasonló mint az index esetében, csak más a kulcs)
      Compress: lzo1x-es compress
  • COMPRESSED_TYPE_PANAMA (type 3): Nem tudok róla sokat elmondani, mivel type 2-nél nagyobb titkosítást nem használtam még, ha egyszer lesz időm jobban utána fogok járni.
      Titkosítás: cryptoPP-s panama
      Compress: ? (szerintem nincsen, hacsak a panama alapból nem compressel)
  • COMPRESSED_TYPE_HYBRIDCRYPT (type 4): Nagyjából annyit tudok róla, hogy a szerver küldi el bejelentkezés után a kulcsokat, amik a kibontáshoz kellenek. Hasonló barátja a COMPRESSED_TYPE_HYBRIDCRYPT_WITHSDB (type 5) ami annyiban különbözik tőle, hogy részlegesen bontja ki a fájlokat, tehát mindig csak annyit, amennyi szükséges (pl mapváltáskor szokott a kliens SDB kulcsokat küldeni).

Érdekességnek még elmondható a csomagolásról, hogy az index fájl kódolása a csomagolás végén történik.
Compress és crypt előtt: [Kép: CFbBwfF.png]

Utána: [Kép: RYzQxRC.png]

A TEA cipher

[Csak regisztrált felhasználók láthatják ezt a tartalmat.]Spoiler:



Térjünk is át ennek az egésznek a gyengeségeire, és hogy hogyan javíthatunk a csomagjaink és egyben kliensünk biztonságán.

Több kulcs? Hogyan?

[Csak regisztrált felhasználók láthatják ezt a tartalmat.]Spoiler:

"Loopholes"

[Csak regisztrált felhasználók láthatják ezt a tartalmat.]Spoiler:



Ha már az eterpacknál tartunk, esetleg felmerülhet még az a kérdés, hogy hogyan készíthetünk egyedi csomagolót. Nos a tools mappában találhatunk egy makepack nevé projectet, azzal el lehet játszadozni. Esetleg lehet használni az én packmakeremet is (ami hamarosan ide is felkerül) ami gyakorlatilag az eredeti, kisebb fixekkel és felhasználóbarátabb átalakítással.

Gyakorlatilag ennyi, amit így hirtelenjében érdemesnek találtam leírni. Esetlegesen ha valaki érdeklődő az eterpackkal kapcsolatban, és van további kérdése, a topicban nyugodtan felteheti, és megpróbálok rá választ adni Smile
[Kép: TMgIQ4y.png]
[Kép: otB5XU8.png]
Válaszol


Fórumra ugrás:


Jelenlevő felhasználók ebben a témában: 1 Vendég