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

 eXeL@B —› Вопросы новичков —› Определение архива без сигнатуры
Посл.ответ Сообщение

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

Создано: 07 апреля 2010 14:51
· Личное сообщение · #1

дравствуйте. Сразу извиняюсь что вопрос не в полне по теме, но у Вас может быть подходящий опыт что бы подсказать. Передомной стоит интересная учебная задачка, но пока нет идей реализации. Представим себе следующую ситуацию:
Организация, человек утром приходит и начинает свою работу с того, что чинит сигнатуру некоторого архива и работает с ним. То есть, например, у RAR файл начинается с 0x52 0x61 0x72 0x21 0x1a 0x07 0x00. У других архиваторов свои сигнатуры. В конце дня он снова портит сигнатуру и оставляет файл среди остального хлама и других нормальных архивов.
Задача: придумать и реализовать (сам реализую) алгортим нахождения в файловой системе такого архива. Содержание архива не известно. Формат архива (rar, 7z, zip etc) не известнен. По некоторой легенде есть универсальный метод. Есть идеи какой?

P.S.
Задачка учебная, по этому идеи в стиле "проследить" не катят.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 07 апреля 2010 16:54
· Личное сообщение · #2

Не понятно, что нужно, но может это поможет ARchive iDentifier version 0.07 исходниками расспространяется

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 07 апреля 2010 16:58
· Личное сообщение · #3

Sicness пишет:
По некоторой легенде есть универсальный метод. Есть идеи какой?


данная формулировка напоминает "На каждую хитрую гайку - найдется свой болт с резьбой"

как самый очевидный метод - считать энтропию файлов

-----
EnJoy!




Ранг: 87.8 (постоянный), 10thx
Активность: 0.070
Статус: Участник

Создано: 07 апреля 2010 19:10 · Поправил: gena-m
· Личное сообщение · #4

Насколько я понял расширения он не меняет, архив так и остается архивом, другим файлам он тоже расширения не меняет, получается нужно найти архив который архиватором не открывается, а это не сложно, во вторых время открытия и др.атрибуты, все это соответсвенно отсортировать - в результате останется нужный.

Isaev

Если я правильно понял, задача открыть не стоит, только найти.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 07 апреля 2010 19:32
· Личное сообщение · #5

gena-m пишет:
архив который архиватором не открывается

ну если так, то скорее возможно по сигнатуре от zlib-а 78 9C
потом если это так можно сделать из всего gzip архив например, следующим образом
достаточно приписать к началу данных последовательность 1F, 8B, 08, 00 - это сигнатура gzip-а и 00, 00, 00, 00, 00, 0B - это информация о том, как следует формировать имя файла и значение контрольной суммы - ее можно оставить нулевой (будет, конечно, получено сообщение об ошибке, но распаковка продолжится). Также в конец файла следует приписать длину распакованного файла (да, надо не забыть отбросить сигнатуру 78 9C от zlib-а).

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

Создано: 09 апреля 2010 18:46
· Личное сообщение · #6

> архив который архиватором не открывается
Да, это и надо.
Метод пользователя Isaev не вполне понял.
1F, 8B, 08, 00 поставить в виде сигнатуры к файлу?
0, 00, 00, 00, 00, 0B - стразу после сигнатуры?
А как он поймет блоки данных других архивов? Всмысле там наверняка смещения начал блоков, да и вообще поля могут не совпадать.
Скорее надо определить формат архива.
Может быть составить базу форматов архивов? Всмысле заголовков. Там у каждого заголовка не редко есть CRC. Если ошибок нет, то формат угадали. Иначе это не тот формат.
Только тогда надо отсеивать явно не архивы...
Как думаете?



Ранг: 87.8 (постоянный), 10thx
Активность: 0.070
Статус: Участник

Создано: 09 апреля 2010 20:15 · Поправил: gena-m
· Личное сообщение · #7

Только тогда надо отсеивать явно не архивы...
Естественно, не нужно все файлы подряд открывать архиваторами, у вас задача какаято типа кто то что то сказал и нужно что то придумать. Нужно вручную или програмно? Нужен алгоритм или готовая программа? Сложного здесь абсолютно ничего нет, вначале составить список всех архивных файлов на машине (по их расширениям, при условии что расширения не изменяются в конце работы, отсеять все архивы которые в этот день не открывались), а потом по очереди открыть их и посмотреть какой не открывается. Если расширения меняются один из вариантов дал Jupiter или составить базу сигнатур (по вашему форматов архивов), но здесь есть один минус, поскольку сеществует вероятность, хотя и маленькая что этот человек поменяет именно эту сигнатуру по которой будет идти поиск.
Если задача стоит найти и открыть то один из вариантов дал Isaev, определитесь что вам нужно.
Может быть составить базу форматов архивов?
Это будет довольно тяжелая задача, если судить по последнему вопросу и в добавок более трудоемкая.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше




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

Создано: 10 апреля 2010 09:45
· Личное сообщение · #8

> у вас задача какаято типа кто то что то сказал и нужно что то придумать. Нужно вручную или програмно?
Ну так и есть. Нужно программно. На вход подается директория, а прога ищет в ней замаскерированный изменением сигнатуры (первых байт файла) архив. Расширение файла, конечно, меняется, ибо было бы слишком просто. Так как задачка учебная, разрешается сфокусироваться на одном типе архива, то наверное буду пробовать открывать файлы не взирая на сигнатуру, но взирая на контрольные суммы остальных заголовков. В реальности, конечно, пришлось бы перебирать форматы наиболее популярных архивов. За основу беру исходники unrar.
Пока более оптимального алгоритма не нашел.



Ранг: 87.8 (постоянный), 10thx
Активность: 0.070
Статус: Участник

Создано: 10 апреля 2010 13:35
· Личное сообщение · #9

буду пробовать открывать файлы не взирая на сигнатуру, но взирая на контрольные суммы остальных заголовков
При такой постановке задачи нужно вначале найти файлы которые открывались сегодня, затем найти именно не архивы ( причем независимо от из расширения) , а затем только проводить анализ энтропии и сигнатур, а возможно и еще по каким либо критериям.
За основу беру исходники unrar
При такой постановке задачи он не должен их открывать в любом случае, для чего его тогда использовать? Его можно и в готовом виде через ShellExecute использовать для отсеивания архивов которые открываются, но по задаче они и так лежат в открытом виде и непопадают в поле поиска по расширению исходя из ваших же условий " Расширение файла, конечно, меняется, ибо было бы слишком просто." Здесь скорее всего прийдется файлы запускать предусмотренными программами в ОС для этих файлов, другими словами если он стал .txt то его вначале нужно пробовать запустить в текстовом редакторе. Степень "испорченности" файла тоже неизвестна, поскольку его можно изуродовать так что вообще нельзя будет восстановить. Задача все равно довольно расплывчатая.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 13 апреля 2010 18:36
· Личное сообщение · #10

Загадочная постановка задачи... ТС похоже сам не до конца представляет что ему нужно...
Sicness пишет:
На вход подается директория, а прога ищет в ней замаскерированный изменением сигнатуры (первых байт файла) архив.

Исходя из того, что Sicness пишет: Так как задачка учебная полагаю должен быть известен минимум метод шифрования сигнатур... тогда можно осуществить задуманное, иначе любой школьник их парой формул так зашифровать может что можно просто забыть...
Если нет, то
Jupiter пишет:
как самый очевидный метод - считать энтропию файлов

это самое бОльшое что тебе поможет, но вероятность что ты угадаешь я думаю не больше 60% и учитывая что Sicness пишет: Содержание архива не известно. ты никогда так и не узнаешь угадал или нет

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh



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


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