Сейчас на форуме: hgdagon, asfa (+4 невидимых)

 eXeL@B —› Программирование —› NTFS MFT и системные файлы
Посл.ответ Сообщение

Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 17 февраля 2007 23:06
· Личное сообщение · #1

Проблема в следуещем: хочу открыть, скопировать, хоть как-нибудь получить доступ к $MFT на конкретном томе, но CrFile, c:$MFT - ошибка, CopyFile, C:$MFT - ошибка. Единственное что могу - сбросить атрибуты файла на нормал, но с главной таблицей файлов тома необдуманных односторонних действий делать не хочется Как вообще работать с системными файлам - открыть в readonly, скопировать, вообщем лишь бы доступ получить к данным. Ещё - в справочнике API SetFileAtribute в списках параметров нет системного файла, тоже сгодится если знаете параметр.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 17 февраля 2007 23:41
· Личное сообщение · #2

Freecod Я бы посмотрел, как это делает ParagonManager или поискал в Интернете. Кракеры конечно многое знают, но починкой файловых систем или их уничтожением не занимаются.




Ранг: 66.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 18 февраля 2007 06:14
· Личное сообщение · #3

Попробуй прочитать файл в RAW режиме (то есть покластерно).



Ранг: 63.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 18 февраля 2007 07:24
· Личное сообщение · #4

Софт от GetData, который включает проги для полуавтоматического востановления с NTFS, а главное ихний дисковый экплорер. Можешь статейку Криса по этой теме почитать.



Ранг: 62.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 18 февраля 2007 07:45
· Личное сообщение · #5

Кстати, на XP есть ещё папка $extend в корне диска, там хранятся данные о дисковых квотах (нда, очередная кража идеи с *nix-систем)
Как ни странно, но скопировать её атрибуты на другую папку у меня не получилось даже под админом.



Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 18 февраля 2007 09:29
· Личное сообщение · #6

Делается так (под админом):

char buf[512];
DWORD io;
HANDLE h = CreateFile("\\.\Буква_тома:", GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,0, OPEN_EXISTING,0,0); // открываем том в RAW
SetFilePointer(h,0,0,FILE_BEGIN);
ReadFile(h,buf,512,&io,0); // читаем суперблок

по смещению 46 байт лежит линейный адрес МФТ в секторах. Размер записи в МФТ - обычно 1024 байта (2 сектора).

Более детально о размере - "курить" НТФС суперблок. Если МФТ не фрагментированна, читать можно как
"пока следующий блок в 1024 байта начинается с '$FILE' ".

Если по-правильному - первые 24 блока МФТ _никогда_ не фрагментированны. Один из них (не помню номера) - описывает саму МФТ (как "нерезидентный атрибут"). Далее - читаем блок, "фиксим" (см. sectors bondaries fixing) и читаем run-list (можно помотреть исходники линуксового драйвера... но не советую.. нервы беречь надо ). Далее - по той же схеме...



Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 19 февраля 2007 00:20
· Личное сообщение · #7

Да ну это нафиг Репаир маленьких файлов непосредственно из $MFT - один Х через CrFile только рабочий диск открыть.
Проще содрать через winhex с физического диска файл и репить парся копию.
А вот про параметр для SetFileAtrib.. для системного файта кто-нибудь знает?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 19 февраля 2007 04:00
· Личное сообщение · #8

Наверное это ?! winnt.h
#define FILE_ATTRIBUTE_READONLY 0x00000001
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
#define FILE_ATTRIBUTE_ENCRYPTED 0x00000040
#define FILE_ATTRIBUTE_NORMAL 0x00000080
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
#define FILE_ATTRIBUTE_OFFLINE 0x00001000



Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 20 февраля 2007 13:55
· Личное сообщение · #9

Freecod пишет:
Проще содрать через winhex с физического диска файл и репить парся копию.


Да ну... При небольшом размере тома может быть рамер кластера в 512 байт... А если диск сильно фрагментирован (что часто бывает рядом, например, с кэшем IE) - такой геммор с поиском кусков!
Лучше уж доковырять структуру МФТ (благо в нете сырцы есть более-менее: видел, но не помню где ) - и по ранлисту/резидентному атрибуту тащить уже "правильно"...

Если надо "не на раз" - то лучше уж поковырять... А если "штучная работа" - согласен: любой hex с поддержкой "сырых дисков" и найти хоть и по кускам. Времени таки меньше уйдет...



Ранг: 5.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 16 марта 2007 21:37
· Личное сообщение · #10

Еще вариант (если уж совсем серьезно) - ставить DDK и писать драйвер, подключающийся к драйверу ЖД сверху


 eXeL@B —› Программирование —› NTFS MFT и системные файлы
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати