2016-07-19, 02:10 PM
(Üzenet szerkesztésének időpontja: 2016-07-23, 11:11 AM. Szerkesztette: masodikbela. Módosítva 3 alkalommal.)
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...
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
), ahol ugyebár fizikailag tárolva vannak a fájlok.
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:
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).
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).
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
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):
É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.
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.
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
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

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))
- 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ó.
[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

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]](http://i.imgur.com/CFbBwfF.png)
![[Kép: CFbBwfF.png]](http://i.imgur.com/CFbBwfF.png)
Utána: ![[Kép: RYzQxRC.png]](http://i.imgur.com/RYzQxRC.png)
![[Kép: RYzQxRC.png]](http://i.imgur.com/RYzQxRC.png)
A TEA cipher
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?
Spoiler:
"Loopholes"
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

![[Kép: TMgIQ4y.png]](http://i.imgur.com/TMgIQ4y.png)
![[Kép: otB5XU8.png]](http://i.imgur.com/otB5XU8.png)