|
И снова попытки лечения битого файла 1Cv8.1CD... | ☑ | ||
---|---|---|---|---|
0
ChAlex
28.03.12
✎
21:00
|
Тут на форуме уже подымался аналогичный вопрос. Может кто-то знает формат файла? Очень нужно попытаться вытащить данные. На http://infostart.ru/public/19734/ описан формат, но у меня что-то не срастается все в единое - что-то не выходит получить смещение к нужной информации.
|
|||
1
vde69
28.03.12
✎
21:03
|
размер архива?
|
|||
2
ChAlex
28.03.12
✎
21:04
|
В описании таблицы в строке {"Files",118,119,96} - индексы. Эти индексы указывают на заголовочный блока объекта или непосредственно к данным?
|
|||
3
ChAlex
28.03.12
✎
21:06
|
(1) размер офигенный 3,2 Гига,
|
|||
4
ChAlex
28.03.12
✎
21:07
|
более того похоже дернули питание при записи, в результате в файле видны структуры к одинаковым таблицам дважды, но не по всем
|
|||
5
andrewks
28.03.12
✎
21:07
|
Tool_1CD пробовал?
|
|||
6
awa15
28.03.12
✎
21:08
|
(2) на заголовочный блок.
|
|||
7
ChAlex
28.03.12
✎
21:09
|
(5) не берет ибо бит заголовок. Я немного нарисовал сам обработок и разбор файла на блоки провести могу. Вот только немного не въезжаю в логику адресации
|
|||
8
aleks-id
28.03.12
✎
21:09
|
зови Аву и молись
|
|||
9
andrewks
28.03.12
✎
21:09
|
(8) ша, уже почти все здесь. только MMF не хватает до кворума
|
|||
10
ChAlex
28.03.12
✎
21:13
|
(6) - ну я вроде тоже так понял, т.е. 118 - это номер блока (с сигнатурой "1CDBOBV8" - из этого блока по соответсвующему смещению беру массив блоков с данными (опять же индексов) - и теперь попадаю к блоку данных. Но вот взял на нормальном файле который читается Tool_1CD - и что-то по такому пути я не попадаю на нужное смещение (там и данные отображаются нужные и таблицы не битые) , но... что-то не так
|
|||
11
awa15
28.03.12
✎
21:17
|
(4) То, что видны структуры к таблицам дважды - это нормально, такое бывает после реструктуризации. Реально, одна из структур находится в удаленных.
(10) Ну, где-то ты ошибся, может в блоке таблицы размещения файлов ты пытаешься взять как индекс блока с данными первое же число? Первое число - это количество индексов на данной странице таблицы размещения. Сами индексы начинаются со смещения 4. |
|||
12
awa15
28.03.12
✎
21:20
|
(3) А если упаковать, то сколько? 3 гига - это немного.
|
|||
13
awa15
28.03.12
✎
21:22
|
+(12) Или это уже упакованный размер?
|
|||
14
ChAlex
28.03.12
✎
21:23
|
(11) - в принципе я не исключал такой ход. (13) Нет это сама база, паковат не пробовол, за ненадобностью
|
|||
15
awa15
28.03.12
✎
21:29
|
(7) А что значит бит заголовок? Какой блок испорчен? Блоки 0, 1 и 2 элементарно рисуются вручную, блоки 3 и 4 чуть сложнее.
|
|||
16
ChAlex
28.03.12
✎
21:32
|
(11) по арифметике - мои алгоритмы (смотрю в реалии) Hex -редактором и Tool_1CD . К примеру вот такая строка: {"Files",5945,0,5950}. Значится в 5945-м блоке начало массива индексов с данными: смещение 5945*4096=24350720 (0х1378FFE). Там действительно блок 314344424F425638070500000100000001000000010000003C17 - то бишь вот он блок с данными (0х03С17) - иду туда (смещение 0х03С17000 - в байтах) - там не та хрень. Tool_1CD показыает смещение 0х173D08F - и там нужные данные
|
|||
17
ChAlex
28.03.12
✎
21:33
|
(7) начала заголовка вообще нет 0,1 и 2 -я нарисую без проблем, да 3 и 4 сформирую, если разберусь с адресной арифметикой
|
|||
18
awa15
28.03.12
✎
21:36
|
(16) Цитирую свою статью:
В массиве blocks находятся индексы блоков, содержащих таблицу размещения данных объекта. Каждый блок, указанный в blocks, и являющийся частью таблицы размещения, имеет следующую структуру: struct { int numblocks; unsigned int datablocks[1023]; } Т.е. в блоке 0х03С17 таблица размещения, а не сами данные. |
|||
19
aleks-id
28.03.12
✎
21:38
|
(18) помнишь я тебе говорил, что одинцы не стали себя утруждать и слизали структуру БД с фат? :)
|
|||
20
awa15
28.03.12
✎
21:38
|
+(18) Только, блок не 3C17, а 173C
|
|||
21
awa15
28.03.12
✎
21:41
|
(19) Любой контейнер, хранящий в себе файлы и обеспечивающий произвольный доступ обязан иметь какую-то таблицу размещения. Тут дело не в слизывании.
|
|||
22
vde69
28.03.12
✎
21:41
|
awa15 - кстате давно хотел тебя спросить, а что будет если {"Files",118,119,96} заменить на аналог из configsave ?
прокатит, или там внутрение идентификаторы разные? |
|||
23
ChAlex
28.03.12
✎
21:43
|
(16)Бррр... че-то не сразу вьезжаю. unsigned int datablocks[1023] - разве не массив блоков (то бишь размещения данных)?
|
|||
24
awa15
28.03.12
✎
21:44
|
(22) Если в CONFIGSAVE загружена полная конфигурация (например, после операции "Загрузить конфигурацию из файла", то прокатит. Только надо будет удалить запись c файлом "deleted", если таковой окажется в CONFIGSAVE.
|
|||
25
ChAlex
28.03.12
✎
21:44
|
(20) - а вот это посущественней, данные представлены в виде младший байт старший?
|
|||
26
vde69
28.03.12
✎
21:47
|
(25) да, адрес 01 A0 - это смещение 0A 00 10 00
|
|||
27
vde69
28.03.12
✎
21:49
|
(26)+ и с количеством нулей повнимательней, пони что добавляется 3 нуля а не 2 байта
|
|||
28
ChAlex
28.03.12
✎
21:49
|
(26) - а тут все верно? что-то я так не могу перевернуть
|
|||
29
ChAlex
28.03.12
✎
21:50
|
(27) - что то у меня тут пробел, енто как?
|
|||
30
vde69
28.03.12
✎
21:51
|
(29) адрес указывается в блоках, одни блок - это 10 00 (начало блока всегда заканчивается тремя нулями)
|
|||
31
vde69
28.03.12
✎
21:54
|
если адрес в hex редакторе 01 20 33 00 (4 байта), то смещение будет:
(пишу текстовым сложением буковок) 00+33+20+01+000 = 03 32 00 10 00 |
|||
32
awa15
28.03.12
✎
21:54
|
(23) Да, это уже массив блоков с данными. В твоем примере блок 5945 - заголовочный. У него структура
struct { char[8] sig; // сигнатура “1CDBOBV8” int length; // длина содержимого объекта int version1; int version2; unsigned int version; unsigned int[1018] blocks; }; Отсюда мы вытаскиваем номера блоков с таблицей размещения. У тебя это один блок 0x173c. Блок 0x173c имеет структуру struct { int numblocks; unsigned int[1023] datablocks; }; Отсюда уже вытаскиваешь индексы блоков с данными. (25) Данные представлены обычным для виндовс способом - в младших байтах младшие. У тебя 3с младший байт, 17 - старший. И еще 2 байта нулевых еще более старшие. (31) Он на 4096 умножает, так что дописывает 3 нуля - все правильно. |
|||
33
ChAlex
28.03.12
✎
21:56
|
(30) - это уже мерцает из-за разбивки по байтам. Все верно ( уж очень коррелирует с исходными данными)
|
|||
34
ChAlex
28.03.12
✎
22:17
|
(15) - спасибо большое! теперь арифметика получается. Ну блин и напетляли. А еще вопрос по по поводу корневого блока: в массиве индексов находятся индексы блоков на блок с описанием таблицы? И 2-й - а последовательность указания таблиц в корневом блоке в таком случае имеет какое-нибудь значение?
|
|||
35
ChAlex
28.03.12
✎
22:19
|
:) и откуда я в прошлом сообщении взял (15)?...
|
|||
36
vde69
28.03.12
✎
22:19
|
>>>>корневого блока: в массиве индексов находятся индексы блоков на блок с
описанием таблицы индексы - на файлы >>>а последовательность указания таблиц в корневом блоке в таком случае имеет какое-нибудь значение нет |
|||
37
awa15
28.03.12
✎
22:27
|
(34) Блоки в массиве tableblocks указывают на заголовочные блоки файлов с описанием таблиц. И, как и сказал vde69, последовательность таблиц не важна.
|
|||
38
ChAlex
28.03.12
✎
22:27
|
(36) - извините за настойчивость или непонимание, но тяжело дается переваривание терминов :) (особенно когда индексов на индексы и т.п.) - не в укор вам, понимаю что ноги то растут от предмета... Уточняю правильно ли я понял: то бишь в массиве индексов ссылки к описанию файла
({"_REFERENCE102",0, {"Fields", {"_IDRREF","B .... и т.д. {"Files",5945,0,5950} То бишь к точке , с которой я начинал |
|||
39
ChAlex
28.03.12
✎
22:32
|
(37) спасибо! А еще один вопросик по структуре ужу самих таблиц. Наряду с таблицами базы и т.п. вижу есть таблица FILES в нормальной базе и DBSCHEMA. В битой описания таких таблиц отсутствует. А что в них?
|
|||
40
awa15
28.03.12
✎
22:36
|
(39) В FILES всякие вспомогательные файлы. Она не очень важна. А вот DBSCHEMA важна критически. В ней содержится структура базы данных. В двух местах, в DBSCHEMA и записи DBNames таблицы PARAMS содержится соответствие таблиц и полей объектам метаданных.
|
|||
41
awa15
28.03.12
✎
22:38
|
+(39) в DBSCHEMA и записи DBNames таблицы PARAMS разные данные, эти данные дополняют доуг друга, и они нужны одновременно. Без них база - бессмысленный набор таблиц.
|
|||
42
ChAlex
28.03.12
✎
22:39
|
(40) Спасибо большое! А если их взять из копии - может взлететь?
|
|||
43
ChAlex
28.03.12
✎
22:43
|
+(40) еще раз всем спасибо - пойду извлекать неизвлекаемое :)
|
|||
44
awa15
28.03.12
✎
22:43
|
(42) Если это бэкап этой же базы с той же конфигурацией - взлетит. Если это просто база с такой же конфигурацией, то DBSCHEMA не подойдет. В разных базах разное соответствие. В одной базе Справочник Подразделения может быть в таблице _Reference57, а в другой это же справочник в таблице _Reference66. И DBSCHEMA будет уже другая.
|
|||
45
ChAlex
28.03.12
✎
22:45
|
Бэкам той-же базы, но полгода как, структура может чуть и изменилась , но мне главное вытянуть те данные, которые были в структуре полгода назад. Так что буду пробовать. Спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |