Каково содержимое альтернативного потока данных: ms-properties? - PullRequest
1 голос
/ 16 марта 2020

При сохранении файла в OneDrive добавляется альтернативный поток данных :ms-properties. Я открыл пример потока с помощью FlexHex (как показано на рисунке), но я не могу сказать, какой тип структуры могут представлять эти байты. Кто-нибудь знает?

enter image description here

На самом деле, исходя из последовательности 1SPS, я думаю, что это может быть магазин товаров для хранения или мешок с ракушками или что-то еще. Для справки . И это . Но я не уверен, правильно ли это.

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Они только что сериализованы Windows свойства . Вы можете записывать и читать эти файлы (как потоки), используя встроенную Windows реализацию IPropertyStore , например, используя функцию PSCreateMemoryPropertyStore

Вот небольшой пример консоли приложение, которое создает файл test.props с одним свойством строкового типа:

#include <windows.h>
#include <atlbase.h>
#include <atlcom.h>
#include <propsys.h>
#include <propkey.h>
#include <propvarutil.h>

// some COM error handling useful macros
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define __WFILE__ WIDEN(__FILE__)
#define SBTRACE wprintf
#define CHECKHR(expr) {hr=(expr);if(FAILED(hr)){ SBTRACE(L"HR FAILED line:%u file:%s\n", __LINE__, __WFILE__); goto cleanup; } }  
#define HR HRESULT hr=S_OK;

int main()
{
  HR;
  PROPVARIANT pv;
  PropVariantInit(&pv);
  CoInitialize(NULL);
  {
    CComPtr<IPropertyStore> ps;
    CComPtr<IPersistStream> pstream;
    CComPtr<IStream> stream;

    // create the in-memory store
    CHECKHR(PSCreateMemoryPropertyStore(IID_PPV_ARGS(&ps)));

    // define some PROPVARIANT value (here it's a string)
    CHECKHR(InitPropVariantFromString(L"hello world", &pv));

    // any property key would work
    CHECKHR(ps->SetValue(PKEY_ItemNameDisplay, pv));

    // get IPersistStream to be able to load or write
    CHECKHR(ps->QueryInterface(&pstream));

    // create a file stream
    CHECKHR(SHCreateStreamOnFileEx(L"test.props", STGM_WRITE | STGM_CREATE, 0, TRUE, nullptr, &stream));

    // this sample only saves, but you can load from an existing stream
    CHECKHR(pstream->Save(stream, TRUE));
  }

cleanup:
  PropVariantClear(&pv);
  CoUninitialize();
  return 0;
}

Вот результат:

enter image description here

0 голосов
/ 17 марта 2020

1SPS - это подпись для сериализованного хранилища свойств, которое, по сути, является системой типа пары ключ-значение. это стандартная структура, поэтому ее легко анализировать, хотя типы данных могут сделать ее немного сложной задачей.

Похоже, что есть некоторые GUID там среди 4 или около того. было бы достаточно легко разобрать эти структуры, так как подобные вещи используются в пакетах. это, конечно, просто выглядит как серия блоков 1sps, что облегчает его.

вы уже знаете мою электронную почту, поэтому, если вы можете извлечь несколько примеров ADS, сжать их и отправить, я могу взять пристальный взгляд. если это оправдано, я даже напишу новый инструмент forensi c для их анализа

...