Категория > Новости > Разгребаем руины. Как восстановить удаленные файлы на разделах NTFS - «Новости»

Разгребаем руины. Как восстановить удаленные файлы на разделах NTFS - «Новости»


27-04-2021, 00:01. Автор: Нина
Разгребаем руины. Как восстановить удаленные файлы на разделах NTFS - «Новости»


В течение пер­вых 30 дней про­даж эту кни­гу мож­но купить со скид­кой 30% в интернет‑магази­не изда­тель­ства по про­моко­ду first30. Про­мокод нуж­но вво­дить на эта­пе офор­мле­ния заказа.



 

Пакет FILE_DISPOSITION_INFORMATION


IRP_MJ_SET_INFORMATION/FILE_DISPOSITION_INFORMATION — это пакеты, посыла­емые драй­веру при уда­лении фай­ла (имей это в виду при дизас­сем­бли­рова­нии). Что­бы уметь вос­ста­нав­ливать уда­лен­ные фай­лы, необ­ходимо отчетли­во пред­став­лять, что про­исхо­дит в про­цес­се уда­ления фай­ла с раз­дела NTFS. Вот пос­ледова­тель­ность выпол­няемых при этом дей­ствий.



  1. Кор­ректи­рует­ся файл /$MFT:$BITMAP, каж­дый бит которо­го опре­деля­ет "занятость" соот­ветс­тву­ющей фай­ловой записи (FILE Record) в MFT (зна­чение 0 говорит о том, что запись не исполь­зует­ся).

  2. Кор­ректи­рует­ся файл /$BITMAP, каж­дый бит которо­го опре­деля­ет "занятость" соот­ветс­тву­юще­го клас­тера (зна­чение 0 говорит о том, что клас­тер не исполь­зует­ся).

  3. Фай­ловые записи, соот­ветс­тву­ющие фай­лу, помеча­ются как уда­лен­ные (поле FLAG, находя­щееся по сме­щению 16h от начала фай­ловой записи, сбра­сыва­ется в нуль).

  4. Ссыл­ка на файл уда­ляет­ся из дво­ично­го дерева индексов. Тех­ничес­кие под­робнос­ти это­го про­цес­са здесь не рас­смат­рива­ются, пос­коль­ку вос­ста­новить таб­лицу индексов вруч­ную смо­жет толь­ко "гуру". Кро­ме того, в таком вос­ста­нов­лении нет необ­ходимос­ти. Ведь в NTFS индексы игра­ют вспо­мога­тель­ную роль, и гораз­до про­ще пере­индекси­ровать каталог заново, чем вос­ста­нав­ливать сба­лан­сирован­ное дво­ичное дерево (B-tree).

  5. Обновля­ется атри­бут $STANDART_INFORMATION катало­га, в котором хра­нит­ся уда­ляемый файл (вре­мя пос­ледне­го дос­тупа и т. д.).

  6. В фай­ле /$LogFile обновля­ется поле Sequence Number (изме­нения, про­исхо­дящие в жур­нале тран­закций, здесь не рас­смат­рива­ются).

  7. Поля Update Sequence Number сле­дующих фай­ловых записей уве­личи­вают­ся на еди­ницу: сам уда­ляемый файл, текущий каталог, $MFT, /$MFT:$BITMAP, /$BITMAP, /$BOOT, /$TRACKING.LOG.


Ка­тало­ги уда­ляют­ся прак­тичес­ки так же, как и фай­лы. В этом нет ничего уди­витель­ного, так как с точ­ки зре­ния фай­ловой сис­темы каталог тоже пред­став­ляет файл осо­бого вида, содер­жащий внут­ри себя дво­ичное дерево индексов (B-tree).


Ни в том, ни в дру­гом слу­чае физичес­кого уда­ления фай­ла не про­исхо­дит, и он может быть лег­ко вос­ста­нов­лен. Лег­кое и быс­трое вос­ста­нов­ление воз­можно до тех пор, пока не будет затер­та фай­ловая запись (FILE Record), при­над­лежащая это­му фай­лу и хра­нящая его резиден­тное тело или спи­сок отрезков (run-list) нерези­ден­тно­го содер­жимого. Утра­та фай­ловой записи край­не неп­рият­на, пос­коль­ку в этом слу­чае файл при­дет­ся собирать по клас­терам. При этом сто­ит заметить, что чем силь­нее был фраг­менти­рован уда­лен­ный файл, тем слож­нее будет эта задача. К счастью, в отли­чие от FAT, NTFS не затира­ет пер­вого сим­вола име­ни фай­ла, что зна­читель­но упро­щает вос­ста­нов­ление.


 

Автоматическое восстановление удаленных файлов


Ути­литы, вос­ста­нав­лива­ющие уда­лен­ные фай­лы, не вхо­дят в стан­дар­тный ком­плект пос­тавки Windows. Разуме­ется, это явный недос­таток — вспом­ни, ведь в MS-DOS такая ути­лита была! Сле­дова­тель­но, эти средс­тва при­ходит­ся при­обре­тать отдель­но. Одна из авто­мати­чес­ких ути­лит для вос­ста­нов­ления уда­лен­ных фай­лов — GetDataBack. Опа­саясь раз­рушить фай­ловую сис­тему окон­чатель­но, боль­шинс­тво таких ути­лит избе­гает пря­мой записи на диск. Вмес­то это­го поль­зовате­лю пред­лага­ется счи­тать уда­лен­ный файл и перепи­сать его в дру­гое мес­то, но толь­ко не на сам вос­ста­нав­лива­емый раз­дел. Не слиш­ком‑то удач­ное решение. А если на осталь­ных дис­ках сво­бод­ного мес­та нет, или если вос­ста­нав­лива­емый диск име­ет все­го лишь один логичес­кий раз­дел?


Пред­положим, нам необ­ходимо вос­ста­новить базу дан­ных объ­емом в нес­коль­ко гигабайт. Мож­но, конеч­но, под­клю­чить вто­рой вин­честер, ско­пиро­вать ее туда, а затем обратно. Одна­ко подумай, сколь­ко же это зай­мет вре­мени, не говоря уже о том, что сер­вер луч­ше не вык­лючать, а "горячую" замену под­держи­вают далеко не все жес­ткие дис­ки!


Дру­гой недос­таток подоб­ных ути­лит — слиш­ком мед­ленная работа. Вмес­то того что­бы най­ти один‑единс­твен­ный файл, имя которо­го нам извес­тно, они про­водят пол­номас­штаб­ные "манев­ры", ска­нируя весь раз­дел целиком. При работе с боль­шими дис­ками на это ухо­дит от одно­го до нес­коль­ких часов, при­чем это вре­мя фак­тичес­ки тра­тит­ся впус­тую.


Ути­лита GetDataBack за вос­ста­нов­лени­ем уда­лен­ных фай­лов

С дру­гой сто­роны, ути­литы, вно­сящие изме­нения непос­редс­твен­но в струк­туру NTFS, рис­куют серь­езно пов­редить дис­ковый том, пос­ле чего ему не помогут даже про­фес­сиона­лы. Нас­тоящие хакеры не доверя­ют никако­му коду, кро­ме соз­данно­го лич­но ими, осо­бен­но, если исходные тек­сты недос­тупны, а докумен­тация туман­на и двус­мыслен­на. Раз­личные вер­сии NTFS отли­чают­ся друг от дру­га. Пос­ледние радикаль­ные изме­нения про­изош­ли в Windows XP (NTFS вер­сии 3.1) — мас­сив пос­ледова­тель­нос­тей обновле­ния (Update Sequence Number-n-Array) перемес­тился на шесть бай­тов впе­ред, а его мес­то было отда­но под вырав­нивание и поле номера текущей фай­ловой записи (Number of this MFT Record). С тех пор фор­мат фай­ловой сис­темы не пре­тер­пел каких‑либо сущес­твен­ных архи­тек­турных изме­нений.


На­конец, воз­можна и такая ситу­ация, ког­да ути­лит вос­ста­нов­ления прос­то не ока­жет­ся под рукой в тот момент, ког­да вам сроч­но пот­ребу­ется вос­ста­новить какой‑нибудь цен­ный файл. Законов Мэр­фи еще ник­то не отме­нял! В этом слу­чае вам при­дет­ся рас­счи­тывать толь­ко на свои силы.


 

Ручное восстановление ошибочно удаленных файлов


Нач­нем с прос­тей­шего. Файл толь­ко что уда­лен, и при­над­лежащая ему фай­ловая запись еще не затер­та. Как най­ти его на дис­ке? Сущес­тву­ет два спо­соба — "теоре­тичес­кий" и "прак­тичес­кий". Теоре­тичес­кий метод исклю­читель­но надежен, но тре­бует допол­нитель­ных опе­раций, выпол­нения которых мож­но избе­жать, при­няв ряд прак­тичес­ких допуще­ний.


Те­оре­тичес­ки гра­мот­ный и пра­виль­ный под­ход сос­тоит в сле­дующем. Извле­каем из заг­рузоч­ного сек­тора ука­затель на MFT, извле­каем из нее пер­вую запись (она опи­сыва­ет $MFT), находим атри­бут $DATA (80h), декоди­руем спи­сок отрезков (data runs) и пос­ледова­тель­но чита­ем все записи в MFT, ана­лизи­руя содер­жимое атри­бута $FILE_NAME (30h) — имя фай­ла. Обра­ти вни­мание, что таких атри­бутов у фай­ла может быть нес­коль­ко. Этот же атри­бут хра­нит ссыл­ку на родитель­ский каталог. Поэто­му, если нес­коль­ко одно­имен­ных фай­лов были уда­лены из раз­личных катало­гов, то необ­ходимо выяс­нить, какой имен­но из них дол­жен быть вос­ста­нов­лен.



Перейти обратно к новости