( arpi_esp | 2023. 12. 15., p – 10:35 )

> 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...