> Nem bánod, ha kérdezek párat?
dehogy!
> Használható erre a boot szektor beli MFT rekord méret (N * boot_mft_entry_size) mint fájloffszet?
igen. en legalabbis igy csinalom, mindig stimmelt (sot en egy elso lepesben (persze nekem adatmenetshez kell mindez) kimasolom egy fileba az MFT tartalmat (ritkan van fragmentalva, igy 1-2 dd eleg hozza), es utana mar csak azt a filet parsolom python scripttel :)
arra figyelj hogy az MFT entry size nem mindig 1024 (bar ez a leggyakoribb), es a szektor meret se mindig 512 byte (talalkoztam mar 4k sectormeretu 4TB vinyoval ahol az ntfs is igy szamolta)
> allocated_size megegyezett a boot_mft_entry_size-el, na de ez biztos mindig így van?
biztos a halal, de nekem is mindig egyezett. amugy meg csak annyit kell feldolgozni belole mint az allocated size es kesz :)
> igaz az, hogy minden N * boot_mft_entry_size pozíción egy MFT header található, még akkor is, ha több rekord tartozik ugyanahhoz a fidhez?)
igen. ha nem fer bele egy MFT blokkba egy file osszes adata, akkor tobb MFT blokk lesz, mindegyik sajat headerrel stb (ugyanaz a struktura) de az elso MFT-ben referencia lesz a tobbire (child nodes) es nem a tenyleges file tartalom vcn-ek (runs). erre linkeltem a py implementaciom feljebb, de eleg gany :) de eleg ritka hogy nem fer be egy mft-be, ahhoz nagyon de nagyon fragmentaltnak kell lennie (tobb 100 runs) vagy nagy meretunek es tomoritettnek (mivel akkor minden blokk kulon van megadva).
> Hogy kell listázni egy könyvtárat?
technikailag a konyvtar is csak egy "file" (ugyanugy kell beolvasni mintha file lenne), amiben INDX tipusu (ez a magic az elejen) blokkok vannak, ami az MFT-hez hasonlo (de nem pont ugyanolyan) struktruban tartalmazza a benne levo direntry-ket (nev datum meret stb attribok) es az MFT szamat. igy kell parsolni:
https://github.com/gereoffy/drutils/blob/main/lsindx.py
kb ugyanaz az info van benne mint az MFT-ben, kiveve a tenyleges adat tartalmat (VCN-ek/runs nincs benne).
persze az is jarhato hogy a parent-re szurve vegigmesz az MFT-n, nekem ugye adtamentes miatt hol az MFT hianyzik (ha pl. leformaztak, akkor az 1:1-be felulirodik) hol az INDX hianyzik/serult. ezert en mind2-bol meg tudom mar oldani... csak MFT-bol azert trukkos felepiteni a directory treet, de azert nem veszes
> Ez egyébként csak az MFT adatokra vonatkozik, vagy a fájltartalomra is
az MFT es INDX (konyvtar) rekordokra biztosan vonatkozik, a normal file tartalomra nyilvan nem. ha resident a file akkor persze arra is, de igazabol mar az MFT beolvasasakor meg kell patchelni minden 510.+511. byteot (elvileg miutan ellenorizted a checksumot), es csak utana kezdheted el parsolni, igy mire a resident filehoz ersz mar fixed :)
> Vagy lényegtelen, mert csak menjek végig a fixup listán és cseréljem le az értékeket, akármi is az offszetjük, igaz?
igen. mivel ezt meg az mft parsolasa elott kell megcsinalni, nem is tudhatod hol mi van...