Sokqucqi что это за файл

Обновлено: 05.07.2024

QlikView и его младший брат QlikSense — замечательные BI инструменты, достаточно популярные у нас в стране и "за рубежом". Очень часто эти системы сохраняют "промежуточные" результаты своей работы — данные, которые визуализируют их "дашборды" — в так называемые "QVD файлы". Часто QVD файлы используются в качестве основного хранилища в многоэтапных ETL процессах, построенных на базе Qlik. И тогда у некоторых (у меня, например, — я занимаюсь в компании вопросами инженерии данных) возникает вопрос — можно ли и как воспользоваться этими данными без QlikView/QlikSense? Или другой — а что там и правильно ли "оно" посчиталось?

QVD — это формат файла, оптимизированный для работы QlikView/QlikSense (чтение из запись информации этими приложениями в файлы такого формата происходит существенно быстрее, чем в файлы любого другого формата). Структура этого файла недокументирована и покрыта "мраком проприетарности", практически не существует приложений, которые способны работать такими файлами (читать и тем более писать). В этой серии статей я поделюсь своим опытом и полученными практическими познаниями: я знаю, как устроен QVD, умею напрямую и быстро его читать и в него писать.

Кому будет интересна данная информация: в первую очередь тем, кто работает с QlikView/QlikSense, а также тем, кто (как и я) хотел бы воспользоваться данными, хранящимися в QVD файлах. Ну и, конечно, всем любознательным.

Все, что написано в этой серии, базируется на моем личном опыте, что, разумеется, не является "документацией" или "гарантией" (того, что ваши файлы будут в точности такими, как я описал. Или того, что так это будет вечно). Также не могу гарантировать, что разобрал все случаи — наверняка могут найтись файлы, которые будут содержать что-то, не описанное мной (хотя бы просто потому, что мне такие варианты не попадались). Однако должен заметить, что информация проверена на большом (несколько сотен) наборе файлов, созданных разными людьми из разных систем при помощи разных версий QlikView/QlikSense.

И немного о том, как я это делал: начинал я с простого — небольшой inline пример, сохраняющийся в QVD. Далее — анализ бинарного файла, мозговые усилия, пробы и ошибки. Забегая вперед (я об этом более подробно скажу в заключении серии) у меня получилось достаточно эффективно читать и писать QVD файлы среднего размера (сотни гигабайт). Отправной точкой моего путешествия в мир QVD был вот этот GitHub, большое спасибо автору (пытался с ним связаться — не отвечает).

Какую я преследовал цель (кроме любопытства и желания проверить корректность данных, с которыми работает QlikView/QlikSense) — мне необходимо было прочитать содержимое QVD файла, т.е. воссоздать на его основе реляционную таблицу. И наоборот — выгрузить данные реляционной таблицы в QVD так, чтобы QlikView смог ее корректно загрузить.

Как я вижу эту серию статей

  • введение, структура файла, метаданные (эта статья)
  • хранение информации о колонках
  • хранение информации о строках, достижения, планы

Структура файла

QVD файл создается скриптом QlikView/QlikSense в процессе загрузки данных в память приложения (результат работы команды STORE) и соответствует одной (реляционной) таблице QlikView/QlikSense. Он состоит из двух частей

  • текстовой (метаданные) и
  • бинарной (колонки и строки)

Метаданные представлены в виде XML (пример будет приведен ниже), бинарная часть начинается непосредственно после текстовой и состоит из двух блоков

  • уникальные значения всех колонок (исходной таблицы)
  • строки (исходной таблицы), ссылающиеся на уникальные значения колонок

Структура файла

Таким образом для таблицы из N колонок файл будет содержать N + 1 бинарный блок. Все части файла "плотно склеены" и идут друг за другом без каких-бы то ни было заполнителей и "хвостовиков".

Метаданные (XML)

QVD файл содержит достаточно много метаданных — "данных о данных". Он практически самодостаточен, судите сами, вот краткий перечень того, что есть в метаданных (более подробно я опишу их ниже):

  • версия ПО, породившего файл
  • дата и время создания файла
  • файл QlikView/QlikSense, работа скрипта которого привела к созданию файла
  • исходный код скрипта, породивший QVD файл
  • имя таблицы
  • информация о колонках (имена, типы, количества уникальных значений)
  • количество строк

Метаданные хранятся в файле в текстовом виде и их можно увидеть в любой программе, которая может показать файл в текстовом виде (ну, почти в любой… в такой, которая не боится файлов больших размеров). Лично я смотрю метаинформацию при помощи more — достаточно удобно.
В дальнейшем изложении я буду использовать тестовую таблицу (использую синтаксис QlikView, но думаю, несложно будет домыслить):

Приведу в качестве примера метаданные для этой таблички

Мой опыт работы с QVD показывает, что структура XML не меняется от файла к файлу.

Прокомментирую наиболее важные элементы метаданных.

Общая информация

QvBuildNo

Номер билда того приложения QlikView/QlikSense, которое породило QVD файл.

CreatorDoc

Как правило содержит имя того QVW файла, скрипт которого породил QVD файл. В данном примере не заполнено, возможно, потому что использовался Personal Edition.

CreateUtcTime

Время создания QVD файла.

SourceCreateUtcTime, SourceFileUtcTime, SourceFileSize, StaleUtcTime

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

TableName

Имя таблицы в QlikView (см. пример выше).

Информация о полях (колонках)

Кстати, слова "поле" и "колонка" для меня являются синонимами, не пугайтесь, если я их буду употреблять оба (постараюсь этого не делать, но все же. ).

Про каждое поле в QVD хранится информация о

FieldName

Имя поля (опять же в терминах QlikView, т.е. с учетом "AS")

BitOffset, BitWidth, Bias

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

Type, nDec, UseThou, Fmt, Dec, Thou

Хорошо задуманная (судя по названиям), но абсолютно бесполезная с точки зрения достижения моей цели информация (подробнее — во второй части, где будем говорить о колонках). Почему бесполезная? — тэг "Type" не коррелирует с типом данных, которые хранятся в бинарной части. По нему нельзя восстановить тип колонки (казалось бы — что может быть проще, есть же тэг Type!). В 90% случаев значением этого тэга будет строка UNKNOWN.

В метаданных о колонках бывают еще такие данные (в метаданных примера его нет, видимо, по причине малого размера)

Комментарий в комментариях не нуждается (кстати, в тех файлах, с которыми я работал, 100% пуст. ).

Тэги — тоже бесполезная (с точки зрения восстановления структуры таблицы) информация. Но по ней можно примерно догадаться, какого типа информация хранится в колонке. Я более подробно коснусь типизации во второй части — когда буду говорить о колонках: это важно. Но чуть более сложно, чем мне бы хотелось.

NoOfSymbols

Количество записей в бинарной части, относящейся к данной колонке. Как мы видим — в нашем примере это 5. Очень важная для расшифровки информация.

Offset

Смещение блока данных данной колонки в байтах относительно начала бинарной части файла. Также очень важно.

Length

Длина всего блока данных данной колонки в байтах. Отметим, что бинарное представление элемента колонки (ячейки таблицы) в общем случае имеет переменную длину (строка, например), поэтому длину нельзя вычислить, можно только взять из этого тэга (smile).

Информация о строках

Compression

Никогда не заполнено (в тех данных, с которыми я работал). Возможно, мы не используем эту опцию.

RecordByteSize

Размер записи о строке в байтах. Все строки представлены в бинарном блоке строк в виде битового индекса (об этом подробнее в третьей части), битовый индекс состоит из строк одинаковой длины.

NoOfRecords

Количество строк (в битовом индексе и в исходной таблице).

Offset

Смещение битового индекса (блока с информацией о строках) в байтах относительно начала бинарной части файла.

Length

Длина битового индекса в байтах.

В метаданных о строках бывают еще такие данные (опять же — короткий пример не позволяет увидеть все, но зато позволяет разобраться в сложном)

Не буду здесь слишком вдаваться в суть, она примерно понятна (исходные SELECT-ы, которые породили таблицу в QlikView), до конца я в этом еще не разобрался (иногда они двоятся)… (кроме одного — комментариев 100% нет (smile)).

Подытожим

  • QVD файл является самодостаточным (т.е. его можно анализировать в отрыве от других данных)
  • QVD файл состоит из текстовой (метаданные) и бинарной (колонки и битовый индекс) частей
  • метаданные — это XML с вполне понятной семантикой

Любознательный читатель вправе тут спросить: "Пока не прозвучало ничего нового, все вышесказанное можно взять и посмотреть в XML заголовке QVD файла… Об этом уже неоднократно писали в разных интернетах, в чем новизна?". Все верно — первая часть практически полностью посвящена метаданным. Но это — не конец.

Что дальше — в следующей части мы подробно рассмотрим структуру бинарной части QVD файла, содержащего информацию о колонках (уникальные значения всех колонок таблицы).

Этот служебный файл автоматически создается на флешке и других мобильных накопителях при подключении к телевизорам, которые используют операционную систему, базирующуюся на Unix-платформе (например, Samsung).

Файл текстовый, хотя и не имеет расширения. Внутри вы найдете одну строчку с текстом типа: CM_DEV_ID|987042733. Считается, что в этих цифрах зашифрована информации о времени, на котором пользователь остановил просмотр видеофайла с флешки. Благодаря файлу вы сможете продолжить просмотр при последующем включении видео.

Размер файла — около 20 байт. Файл можно удалять, тем более, что на флешке порой остается старая версия файла, которая ни на что не влияет.

Может ли под этим именем скрываться вирус? Да. Создатели зловредного ПО могут специально спрятать троян под этим именем. Если на флешке имеется только этот файл, включите отображение скрытых и служебных файлов.

Thumbs.db

Этот служебный файл использовался в старых версиях Windows для хранения эксизов изображений при просмотре в режиме «Эскизы страниц». Благодаря этому при повторном обращении к фотографиям и картинкам они открывались быстрее. Раньше подобные файлы создавались в каждой папке, где вы открывали изображения. В Windows 10 эти файлы хранятся в одной папке — СИСТЕМНЫЙ ДИСК\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\AppData\Local\Microsoft\Windows\Explorer.

В файлах Thumbs.db хрпнчтмч уменьшенные копии изображений популярных форматов: PNG, JPG, BMP, GIF, TIF, PDF и HTML. Каждый файл имеет определенную структуру, которую можно расшифровать с помощью таких программ, как Thumbnail Database Viewer и Thumbcache Viewer, поэтому с флешек такие файлы лучше удалять, если вы не хотите, чтобы эта информация попала к другим людям.

Данный файл имеет атрибут «скрытый». Чтобы его увидеть, включите в Проводнике или файловом менеджере отображение скрытых и служебных файлов. В предыдущих версиях Windows автоматическое создание Thumbs.db можно было отключить. В Windows 10 штатными средствами это сделать не получится.

desktop.ini

Еще один служебный файл, который применялся в старых версиях Windows. В этом файле хранились параметры для отображения папки и ее свойств (вид иконок, имя, свойства доступа и т. п.). Можно удалять.

Autorun.inf

Файл автозапуска, который запускает программу при подключении компакт-диска или флешки к компьютеру (если на ПК не отключен автозапуск). В 2000-е годы вирусописатели часто подменяли этот файл для автозапуска вирусов и троянов. Подобные файлы с флешек лучше удалять, но перед этим посмотрите его содержимое текстовым редактором. Там будет указан путь к запускаемому приложению.

fssort.ini

Этот файл создает менеджер изображений FastStone Image Viewer для автоматического переименования файлов. Файл текстовый, внутри список файлов-изображений, с которыми вы работали. Можно смело удалять.


только сильно не смейтесь

я, конечно, понимаю, вопрос ламерский и глупый. но честно, понятия не имею, что это за файлы, для чего нужны и как появились (предположительно появились после установки игры Сегун2 Тотальная Война, но не уверен)
это дата-диск (не системный), соответственно на нем таких файлов быть не должно. хочу удалить их, но не знаю не испорчу ли чего

А зачем было в корень диска что-либо вообще устанавливать? А то это не вопрос ламерский, а действия изначально. Почему бы не в папочку отдельную для каждой софтинки утанавливать, как все нормальные люди?

Добавлено через 53 секунды

FeyFre
Оно их в корень диска само НЕ распаковывает при установке, это можно только вручную сделать

__________________
ПУК - Последняя Удачная Конфигурация.
(с) veroni4ka Штандартенфюрер СС, это баг инсталлятора vcredist_x86_2008.exe! Инсталлятор самораспаковывается не во временную папку, а куда-нибудь а пальцем мимо. Там очередной какой-нибудь багнутый SFX-ZIP, который должен был распаковать во временную папку пакет Windows Installer, и пнуть его. Между прочим, этот пакет при установке какраз и не спрашивает куда устанавливаться, ибо выбора всё-равно нет - только в WinSxS да и всё тут. Мелкомягки позже исправили это, но было уже поздно.
Так что не нужно человека учить зря, он никакими своими действиями не смог повлиять на это. (Не каждый юзер является нахватавшимся знаний что-бы заставить компоненты винды плясать под свою дудку).
Вот список файлов которые оно могло оставить и которые можно спокойно тереть.


Нередко в корне диска С или D клиентских компов вижу эти файлы, и думал - во дураки )) Как оказалось не те дураки, а другие Ни разу в корне диска такое не видел, у меня всегда ЭТО лежит в папках с именами типа v49d74fhq374f7if747 в корне, которые бывает сами не удаляются после установки и вручную их приходится подтирать. __________________
ПУК - Последняя Удачная Конфигурация.
(с) veroni4ka Штандартенфюрер СС, да, Мелкомягкие баги иногда исправляют(о чудо!). У меня тоже ЭТО уже ложится в подобные директории(и тоже не затираются иногда), ибо я всё-таки нашел нормальный установщик.

Штандартенфюрер СС
всегда указываю пути куда что распаковать или установить. оно само так сделалось

Этичный хакинг и тестирование на проникновение, информационная безопасность


Если вы из тех, кто хочет узнать как работают инструменты указанного сервиса, а также как ими пользоваться на своём компьютере, то продолжайте читать.

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

Во-вторых, у этой статьи будет продолжение, в которой эти же самые инструменты, которые вы изучите на этой странице, будут использоваться для:

1) разбора прошивок (например, роутеров, IP камер) на составные части (первый этап обратной инженерии либо анализа работы устройств для поиска уязвимостей и бэкдоров)

2) поиска файловых систем на дисках и их образах (первый этап криминалистической IT экспертизы)

3) поиска удалённых файлов

Как определить тип данных, если у файла нет расширения

Если у файла нет расширения, то единственным вариантом определения его типа остаётся содержимое этого файла. Можно попробовать добавлять различные расширения к имени файла и пытаться открыть соответствующими для этого расширения программами — этот вариант медленные и неэффективный.

Определённые типы бинарных файлов могут иметь одинаковый набор байтов — по этим байтам можно сопоставить тип файлов. И именно данный метод и применяется программами, предназначенными для определения типа данных. Специфичные байты как правило располагаются не в самом начале файла, поэтому кроме самих байтов, нужно знать смещение от начала, где эти байты должны находиться. Некоторые программы в дополнении к байтам для идентификации ещё имеют список для проверки на ложное срабатывание.

Такие паттерны на английском часто называют magic — это пошло от «magic number» в исполнимых файлах. Эти файлы имеют «магическое число», хранящееся в определённом месте рядом с началом файла, которое сообщает операционной системе UNIX, что файл является двоичным исполняемым файлом и каким именно из нескольких типов. Концепция «магического числа» была применена к другим бинарным файлам. То есть файлы одинакового типа имеют одинаковую последовательность байтов в определённом месте от начала файлов.

Файл с сигнатурами, описывающими какие именно байты, на каком расстоянии от начала файла характерны для файлов того или иного типа, обычно называют magic file.

Кроме магических чисел могут применяться и другие техники, например, программа file для проведения тестов файловых систем также может использовать системный вызов stat. Тип текстовых файлов определяется по содержащимся в них строкам (например, это может быть PHP код, файл в XML или HTML разметке, JSON и так далее).

Команда file — мгновенное определение типа любого файла

В Linux есть команда file с огромной базой сигнатур, которая очень быстро определяет тип файла:

Чтобы узнать, что за файл без расширения, выполните команду вида:


То есть это текстовый файл офисного пакета Microsoft Office.

Можно указать сразу несколько файлов для проверки или использовать подстановочные символы. Например, следующая команда проверит типы всех файлов в текущей папке:


У программы file имеются опции, подробности о них смотрите в отдельной статье «Инструкция по использованию команды file».

Аналог команды file для Windows

file — это утилита командной строки для Linux, поэтому пользователям Windows нужна какая-то альтернатива. Рассмотрим несколько способов использования file в Windows.

1. Утилита file в Cygwin

Данный способ, на мой взгляд, самый простой. Достаточно скачать Cygwin и вы можете пользоваться большинством утилит Linux. Подробности, в том числе как указывать пути в файловой системе, смотрите в ветке «Как начать знакомство с командами Linux: Cygwin».


2. file в WSL

Подсистема Windows для Linux (WSL) это ещё один способ использовать утилиты Linux в Windows. Подробности о работе с WSL смотрите в справочном материале «WSL (подсистема Windows для Linux): подсказки, инструкции, решения проблем».

3. Скомпилированный file для Windows

Файлы различаются архитектурой (64- и 32-битные), а также компилятором.

Распакуйте скаченный архив. Например, я поместил скаченные файлы в папку C:\Users\MiAl\Downloads\file\.

Откройте командную строку, для этого нажмите Win+x, выберите «Windows PowerShell».

Перейдите в папку с программой:

Для определения расширения файла используйте команду вида:


Вы можете проверить сразу много файлов, для этого перейдите в папку с утилитой file и выполните команду вида:

Например, я хочу проверить все файлы в папке Z:\testfiles\, тогда команда следующая:


4. TrID — кроссплатформенная альтернатива file для Windows и Linux

Пример анализа файла — обратите внимание, что выведено несколько вариантов с указанием процентной вероятности каждого из них:


Если указать несколько файлов для идентификации, то будет выведен только самый вероятный вариант типа файла:


Установка TrID в Windows

Распакуйте оба файла в одну папку.

Распакуйте скаченный архив. Например, я поместил скаченные файлы в папку C:\Users\MiAl\Downloads\trid\.

Откройте командную строку, для этого нажмите Win+x, выберите «Windows PowerShell».

Перейдите в папку с программой:

Для определения расширения файла используйте команду вида:

Подстановочные знаки могут использоваться для сканирования групп файлов, целых папок и так далее.




Кроме того, использование ключа -ae даст команду TrID добавить предполагаемые расширения к именам файлов. Это удобно, например, при работе с файлами, восстановленными программами для восстановления данных. Например:

На этом этапе файлы в папке c:\temp будут выглядеть так:

Вместо предыдущей опции можно использовать -ce, которая изменит расширение файла на новое; если у файла нет расширения, будет добавлено новыъое. Например:

  • IAmASoundFile.dat -> IAmASoundFile.wav
  • IAmABitmap -> IAmABitmap.bmp

TrID может получить список файлов со стандартного ввода с помощью переключателя -@.

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

Можно указать TrID показывать дополнительную информацию о каждом совпадении (например, тип mime, кто создал эту сигнатуру, сколько файлов было просканировано и так далее); а также можно ограничить количество отображаемых результатов.

Ключ -v активирует подробный режим, а -r:nn указывает максимальное количество совпадений, которое будет отображать TrID. По умолчанию 5 для обычного режима, 2 для подробного, 1 для многофайлового анализа.

Программа TrID обновляется нечасто, но база данных регулярно получает новые сигнатуры, поэтому время от времени обновляйте базу данных.

5. fil — ещё одна кроссплатформенная альтернатива file

Программа fil написана на Go и является кроссплатформенной. Но в программе настолько мало сигнатур, что, на мой взгляд, утилита fil практически бесполезна.

Альтернативы file

Для большинства нужд по определению типа файла без расширения достаточно утилиты file, но есть утилиты со смежным функционалам, которые могут заменить или уточнить информацию от file. Более подробно каждая из этих программ будет рассмотрена в следующей части, сейчас только краткий обзор.

Detect It Easy

Detect It Easy — это кроссплатформенная программа для определения типов файлов. Имеется вариант с графическим интерфейсом, а также интерфейсом командной строки.

Анализ файла /mnt/disk_d/Share/testfiles/file1 с показом результатов в графическом интерфейсе:

Анализ файла без расширения, расположенного по пути /mnt/disk_d/Share/testfiles/file1 для определения типа файла:

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

Binwalk

Binwalk это программа для анализа прошивок, но в ней собрано много сигнатур бинарных файлов, поэтому она подходит для определения типа файла. Особенность Binwalk в том, что она нацелена на работу с составными файлами (которыми обычно и являются прошивки), поэтому она может определять тип файла даже если файл находится не в начале.

Использование такое же, как и file, достаточно указать путь до одного или нескольких файлов:

Detect It Easy и Binwalk не столько конкуренты утилиты file, сколько «последний шанс» определить тип данных, если команда file не помогла.

Читайте также: