Alice in binary Wonderland -- part 1

Alice in binary Wonderland -- part 1.

Bevezeto

Mint ahogy Alice a meseben, ugy en is racsodalkozok, hogy milyen szep is lehet
egy vilag. A binaris fajlformatumok vilaga;)

Talan mernokkent kellene a problemahoz hozzaallni.
Problema:
Adott egy binaris fajl, ki kell nyerni belole az ertekes adatot/szoveget.

# Megoldas menete:

0. utananezni, hogy nem-e a kereket akarjuk ujra feltalalni
1. irodalomkutatas
2. a problema tenyleges megoldasa

A 0. ponton tulvagyok, 1 napot gugliztam, es az elozo blogbejegyzesemben
ra is kerdeztem, hatha valami trivialisat akarok megfejteni. Az ottani
hozzaszolok jo resze megerositette, hogy ez egy binaris fajlformatum, specifikacio
nelkul, aka. titkos. A vegso lokest timar adta, idezem:
"Több, mint valószínű, hogy egy egyedi,
saját fejlesztésű fájlformátumról van szó, amihez egy deka leírás sincs sehol."

Irodalomkutatas joreszt megegyezik az elozo ponttal, guglizas agyba-fobe:
megnezni, hogy ki hogyan latott neki egy fajlformatum megfejtesehez.

Kigyujtottem nektek nehany erdekesebb irast [1], [2], [3], [4].

A rossz hir tobbek kozott, hogy sokaig eltarthat, pl. a Quark Xpress fajlformatumat
tobb mint egy evig butykolgette az illeto[4].
Viszont a jo hir, hogy egy fajlformatum megfejtese az osszes reverse engineering
kozul a legszorakoztatobb;)

# A feladat megoldasahoz az alabbiakra lesz szuksegem:

* elszantsag
* ido
* kitartas
* hexa editor
* valamilyen nyelven programozoi tudas
* legalabb egy mintafajl
* mukodo program ha elerheto (sajnos ilyenem nincs csak nehany fajlom)

A megfejtes nagyjabol annyibol all, hogy aloallunk nehany 5lettel, irunk ra
programot, es megnezzuk utana az eredmenyt. ha nem jott be, akkor modositunk a
programunkon.

# A problema megoldasa:

Egy fajl tanulmanyozasat legegyszerubb azzal kezdeni, hoyg megnyitjuk valamilyen
nezokevel, szerintem az mc-ben levo beepitett nezoke nagyjabol meg is felel a
celnak ha nem tul nagy a fajl. Esetleg a vi. Itt nagyjabol olyan egyszeru
dolgokat kellene eszrevenni, hogy van-e benne felismerheto karaktersor, esetleg
szoveg a binaris adatok kozott. Ebben a kezdeti fazisban akar eszrevehetunk
valamifele ismetlodest is a fajlban, ami akar nagyban segithet is kesobbiek soran.

Persze a kesobbiek soran erdemesebb valami komolyabb hexa editorral
felverteznunk magunkat, pl. HexWorkshop, aminek idolimitalt demo valtozata
elerheto a honlapjukon [5]. Wine alatt gyonyoruen fut leszamitva, hogyha az alap
locale-lal inditom a wine-t akkor gorog betuk jelennek meg a feluleten;-\

LANG=en_US wine program.exe

Es a problema elillan. Kicsit fapad, egyszer jo lenne valami ertelmes irast
talalni errol az egesz locale mizeriarol...

Talan a legnagyobb pozitivuma a HexWorkshopnak, hogy nem fagyott le nekem eddig.

# Tomoritett-e?

Mint ahogy semmifele ertelmes szoveget nem talaltam a fajlban, igy talan a
legkezenfekvobb, hogy a fajl tomoritve van. Nosza ellenorizzuk is le:


import zlib, sys

def main(args):
    f = file(args[0], 'rb').read()
    size = len(f)

    i = 0
    while i < size:
        try:
            de = zlib.decompress(f[i:])
        except zlib.error:
            i += 1
            continue

        print 'Found a compressed block starting at', i

        i += 1

if __name__=='__main__':
    sys.exit(main(sys.argv[1:]))

(A kodot az openrce.org-rol [3] vettem)

Sajnos ez nem vezetett eredmenyre. Meg ki lehet probalni nehany ismertebb
algoritmusra, de azok se vezettek eredmenyre. Tehat vagy egyedi algoritmussal
tomoritett, vagy titkositott, vagy valami egyeb.

# Titkositott-e?

Erdemes meg a nyilvanvalo ,,mi a feneert tennek''-en kivul azert ezt is meglesni.
A legtobb titkositas utan a titkosito algoritmus benne szerepel a fajlban,
pl: RSA, DSA, etc.
Titkositott fajlt talan a program minimalis RE-jevel kene kezdeni, de szerencsere
(mivel ehhez nem ertek, es eleg nagy falatnak tunik) ezt hamar elvetettem.

A tomorites es a titkositas egyebkent nagyban megnoveli a fajl betoltesi idejet,
ami a jelen esetunkben akar kritikus is lehet (hacsak nem nyalja be az egesz
adatbazist a memoriaba a program). Szoval ha lehet altalaban kerulik. Persze
ezt is csak olvastam.

# Nehany tovabbi technika

Egyik talan legjobb technika, hogyha a binaris fajlt programbol hozzuk letre
(pl. szovegszerkesztobol mentjuk el,
es mindig csak par karakter a kulonbseg ket mentes kozott), es aprokat modositunk
es ugy mentjuk el. Ezutan elemezzuk, hogy mi valtozott a fajlokban. Sajnos
ez a mi esetunkben megoldhatatlan, mivel csak par fajllal rendelkezem.

Olvastam meg template illesztesrol is, pl. a 010 hexa editor[6], tud ilyet alapbol.

Van egesz python segedkonyvtar is binaris fajlok kezelesere, ilyen a hachoir
projekt[7] is, talan erdemes meg azt is meglesni.

# Folytatas
Ha komolyabb erdeklodes lesz, es az idom is engedi, akkor lehet folytatom ezt a
megkezdett sorozatot.

UPDATE1: Wikibooks-on egy egesz konyv van rola!

Vegezetul egy kep:

[1]: http://www.kaydash.za.net/blog/archive/2006/sep/08/file-format-reverse-…
[2]: http://www.hexprobe.com/hexprobe/binary_file.htm
[3]: http://www.openrce.org/articles/full_view/16
[4]: http://www.iwriteiam.nl/Ha_HTCABFF.html
[5]: http://bpsoft.com
[6]: http://www.sweetscape.com/010editor/
[7]: http://www.hachoir.org

Hozzászólások

nem tudom, mit nevezel komolyabb érdeklődésnek, de engem személy szerint érdekel:D
hasznos bejegyzés
_________________________________________
Valódi paraszt vagyok. Csak előre tudok lépni, nem azt ütöm le, aki velem szembenáll, és ha nincs tovább, megváltozom.

hagy szóljon!
a régi szép időkre emlékeztet, amikor még a krynn trilógiához barkácsoltam pascalban karakter editort, meg ilyesmik. B-)