Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стеганография, Нужны материалы 
:(
    Опции темы
Гость_XpyDi
Дата 28.4.2004, 10:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Относительно меня могу сказать, что это была не шутка, т. к. метод который описан в приведенной мною статье подходит не только для защиты программ, но и для сокрытия информации. Если ты сама пишешь программу то данный метод впихнуть намного проще, чем если ты используешь чужую программу в качестве стегоконтейнера.
  Вверх
Urod
Дата 28.4.2004, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 376
Регистрация: 10.4.2004
Где: Москва

Репутация: 1
Всего: -1



Да, статья неплохая! Но в ней речь идет о скрытом аудите (я бы даже сказала самоаудите) системы, и, каким образом это можно применить к стеганографии, мне что-то не очень понятно.
Может, какой-нибудь пример в контексте данной статьи? wink.gif
PM MAIL   Вверх
XpyDi
Дата 30.4.2004, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 25.11.2002
Где: USSR

Репутация: 2
Всего: 2



Да там речь идёт о самоаудите, просто я дал ссылку на эту статью так как в ней описан метод, который можно использовать и для хранения скрытой информации в своих программах. Так, например, для вот такой структуры:
Код

st = Record
buf : array [1..5] of Byte;
Byte1 : Byte;
W : Word;
Byte2 : Byte;
end;

если нигде в программе нет явного обращения к полю byte1, то очень тяжело сказать каков размер массива buf - 5 или 6 байт, при этом если в начале работы программы туда было записано вот такое значение:
$68 $65 $6C $6C $6F (это строка hello), а в байт Byte1 значение 15 (просто часть нашего скрываемого сообщения), то если в ходе работы копировать в него всякую ерунду(т.е. использовать его по назначению) при это не затрагивая байты с нашим стего-сообщением(в данном случае это Byte1), то стего-сообщение можно будет извлечь даже из работающей программы(или её дампа). Можно конечно затереть в ходе работы Byte1, в данном случае становиться намного тяжелее догадаться, что 6 байт в структуре st это часть стего-сообщения, а не просто какая-то служебная информация используемая где-то программой в своих целях.
Также при определенных настройках компилятора в выходном exe файле части структуры st могут оказаться выровнеными на границу 4(хотя возможно и 2) байта, т.е. чтобы увеличить скорость доступа к данным копилятор впихнул в структуру несколько неиспользуемых байт, которые ты можешь использовать по своему усмотрению.
Также чем хороша программа в роли стего-контейнера, т.к. она использует динамически подключаемые библиотеки и ты вполне можешь размазать стего-сообщение по всем файлам необходимым для запуска программы, причем для каждого файла по своему, т.е. часть стего-сообщения в упаковынные файлы, часть в графические, часть в ..., часть в файлы с данных, потом dll и сам exe.
Также я заметил, что очень часто программисты используют тип integer (int - для C) который занимает 4 байта(при компиляции под Win32, практически всех pascal-компиляторов) практически для всх целочисленных переменных, при этом нередко засылаемое значение меньше 10000(а иногда и эта граница намного ниже). Так вот эти старшие байты и можно использовать для своих целей.

Теперь как все это реализовать, если ты не разработчик программы. Только полным или частичным дизассемблированием программы и анализом использоумых в ней структур данных, при этом надо учесть, что в данном случае нет 100%, что файл будет работать после того как ты впихнешь в него своё стего-сообщение. По этой тематике могу посоветовать посмотреть материалы посвященные пермутациям(технология используемая в вирусах для изменения собственного кода, с сохранением функциональности) и реверсирующим вирусам, т.к. там теме дизассемблирования и сборки с сохранением работоспособности уделяется больше внимания, нежели в различных публикациях по дизассемблированию.
Кстати защита от копирования Star-Force 3.0 анализирует исполняемый файл и большую част кода переводит в байт-код своей виртуальной машины, и потом защищенный исполняемый файл работает уже через виртуальную машину. Так что вот наглядный пример автоматического анализа чужой программы.

Я описал пожалуй самый эффективный метод(известный мне) встраивания сообщения в исполняемый файл. Но есть еще несколько от видоизменения кода до использования релоков и других системных структур исполняемого файла.
PM MAIL WWW ICQ   Вверх
Urod
Дата 30.4.2004, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 376
Регистрация: 10.4.2004
Где: Москва

Репутация: 1
Всего: -1



Цитата(sergej @ 26.4.2004, 23:29)
Открой полученный ехе любым текстовым редактором. Как ты видишь массив лежит в файле "открытым текстом".

Например, через Far посмотреть F3? Об этом идет речь? smile.gif
PM MAIL   Вверх
Urod
Дата 30.4.2004, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 376
Регистрация: 10.4.2004
Где: Москва

Репутация: 1
Всего: -1



Цитата(XpyDi @ 30.4.2004, 01:31)
Так, например, для вот такой структуры:
Код

st = Record
buf : array [1..5] of Byte;
Byte1 : Byte;
W : Word;
Byte2 : Byte;
end;

если нигде в программе нет явного обращения к полю byte1, то очень тяжело сказать каков размер массива buf - 5 или 6 байт,

А почему? sad.gif (я про размер массива)
PM MAIL   Вверх
sergejzr
Дата 30.4.2004, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Цитата
Например, через Far посмотреть F3

Это ведь вроде текстовый редактор (не встречался..)? Тогда да!

XpyDi Натолкнул на мысль. Такую прикольную, что я возьму свои слова обратно насчёт невозможности изменения сущ. ехе.
Информации туда напихать можно. Предлагаю на рассмотрение след. факты.
Идеи:
  • При декларации переменной в большинстве случаев значение ей не присваивается(в паскале то точно, вообще никогда).
    Код
    int main()
    {
    int a;
    a=3+7;
    cout<<a;
    }
  • Если учесть тот факт, что значение присвоится позже, то мы имеем ячейку для записи своей информации без каких либо изменений функциональности ехе!Больше!
  • Рассмотрим значения, которые принимает функция. В ехе эти ячейки существуют, но релевантными значениями заполнятся только при вызове этой функции. До того момента они могут содержать любую(!) информацию. Почему не нашу?
Решения:
  • Остаётся анализ дизассемблированого кода. Насколько я понимаю, не составит труда выловить такие ячейки.
  • Обязательным условием является то, что присваивание значения ячейке происходит позже в программе(до того, как эта ячейка будет программой использована).
Тут я бы предпочёл передать эту задачу специалистам по ассемблеру, которые возможно опровергнут/подтвердят такую возможность.
В случае позитивного ответа, такой способ действительно будет универсальным для ЛЮБОГО приложения.

Это сообщение отредактировал(а) sergej.z - 30.4.2004, 15:16


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Monty
Дата 30.4.2004, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Advanced Lamer
****


Профиль
Группа: Участник Клуба
Сообщений: 3511
Регистрация: 3.4.2003
Где: Гваделупа

Репутация: нет
Всего: 27



ох ... Запехните скрываемое сообщение в, допустим, calc.exe ... не выйдет и слова я свои не заберу smile.gif ... а вот в свою программу, я _легко_ спрячу скрываемое сообщение smile.gif ......

PS лень расписывать ... все кратко


--------------------
...
О, вещая моя печаль,
О, тихая моя свобода
И неживого небосвода
Всегда смеющийся хрусталь!
PM MAIL ICQ   Вверх
XpyDi
Дата 4.5.2004, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 25.11.2002
Где: USSR

Репутация: 2
Всего: 2



Urod
Просто случай из практики.
Я не имея исходных текстов программы не мог точно сказать, что за стурктура и какой ёе размер пока не увидел конкретных обращений к элементам массива, но с массивом можно работать поэлементно, а можно просто скопировать его в какой-нибудь буфер и работать с ним уже не как с массивом, а как с записью, и вот тут если жо этого все элементы массива были размером байт, то в записи некоторые стали размером 4 байта, некоторые 5 байт, а некоторые так и остались 1 байтовыми. И без анализа кода который с ним работает ничего конкретно сказать нельзя.
sergej.z
Некоторая поправка, если ты не проинициализируешь переменную, то физически в файл она записана не будет. Но все константы указанные в программе записываються в саму программу. Т.е. строка проинициализированная явным образом или массив или структура и т.д.
Monty
Не обижайся, но мне все равно заберешь ты свои слова или нет. Я только хочу сказать, что в где-то 80% случаев это можно сделать для чужой программы. А для своей я думаю, что это самый простой и эффективный способ.
Насчет того реально ли найти такие излишки в программе автоматическом режиме или нет. Думаю что реально, но обязательно нужен потом прогон программы, хотя и он не дает гарантии, что теперь все работает. Так же если данный способ не пройдет то в программе очень много мест в которые можно запихнуть по 1 байту, хотя оно и очень сильно ограниченно поэтому в программу вряд ли удастся запихнуть сообщение представляющее собой хотя бы 50 % размера программы, а может и 25%

P.S. Разделаюсь сессией и попытаюсь впихнуть что-нибудь в calc.exe для демонстрации реальности всего вышеизоложенного.
PM MAIL WWW ICQ   Вверх
Guest
Дата 8.5.2004, 14:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А нельзя ли о встраивании стего в бинарники как-нибудь по-проще? Так сказать на качественном уровне. XpyDi
sergej.z

  Вверх
Urod
Дата 13.5.2004, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 376
Регистрация: 10.4.2004
Где: Москва

Репутация: 1
Всего: -1



XpyDi
Прокомментируй, пожалуйста, свою идею. notify.gif
PM MAIL   Вверх
XpyDi
Дата 16.5.2004, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 25.11.2002
Где: USSR

Репутация: 2
Всего: 2



Цитата
А нельзя ли о встраивании стего в бинарники как-нибудь по-проще? Так сказать на качественном уровне. XpyDi
sergej.z

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


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

Так вот самое первое, что приходит на ум, это во первых заполнять своими данными таблицы, которые присутвуют в файле, но не используются(да и такие есть, вот они современные оптимизаторы) например практически во всех файлах генерируемых компилятором Delphi есть талица reloc'ов, но в связи с тем, что exe всегда грузится по фиксированному адресу, то она становится не нужна. Также некоторые таблицы мы можем изменять так, что бы запихнуть туда насколько наших байтов или битов, например: таблица импорта, а точнее название библиотек и функций. Про изменение ресурсов и так сказано уже достаточно. Теперь перейдем к видоизменению кода и данных. ТУт дело обстоит сложнее, т.к. в отличии от графических файлов данные тут приктически никак не изменяются. Но у кода ингда встречаются неспользуемые куски, их можно найти автоматическим дизассемблированием и анализом файла(а иногда они встречаются, но используются динамически, и тогда файлу кранты). Но с кодом мы всегда можем произвести одну простую операцию это его сжать, потом сжать наше стегосообщение и в освободившееся место впихнуть всё что нам нужно. Визуально файл будет работать, как работал(пример того бесчисленное количество пакеров и протекторов для исполняемых файлов), но если заглянуть туда hex-редактором то определить, что он запакован не составит труда(а каким пакором не важно их сейчас столько появилось), правда чтобы определить есть ли там стегосообщение в некоторых случаях потребуеться анализ распаковывающего кода .

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

Достаточно кратенько больше лени расписывать, да и нехочеться одну(или несколько) идей заливать водой.

Это сообщение отредактировал(а) XpyDi - 16.5.2004, 08:43
PM MAIL WWW ICQ   Вверх
Urod
Дата 25.5.2004, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 376
Регистрация: 10.4.2004
Где: Москва

Репутация: 1
Всего: -1



XpyDi
Подитожив способы:
1. Просто писать наше сообщение в незаполненые (или частично заполеннные) таблицы PE-файлов. Например, в их заголовки (там места больше). Или писать в таблицы импорта. При этом функциональность PE-файла не нарушается. Так?

2. Главное - мне понять, что ты подразумеваешь под понятиями код и данные. Т.к. для меня код - это текст программы, видимо наше понимание несколько отличается. Уточни, пож-та.
Так вот: Находим пустые куски в коде дизассемблированием и/или анализом файла и заполняем их своим сообщением. Не поняла, что будет, если пустые куски файла "используются динамически"?
Еще один метод встраивания стего в код - это его сжатие. Но, как я понимаю, сжатый файл наталкивает на размышления. Следовательно, вопрос: под какие случаи такое специальное сжатие файла (чтобы в его освободившиеся места впихнуть стего) можно замаскировать? Так сказать, я это сделал для того, чтобы... Чтобы не возникало у рецензента лишних подозрений и желаний проверить этот сжатый ф-л.

3. Мне непонятно, как, увеличивая объем данных, появляются дырки. Т.е. тоже кол-во данных просто размазывается по увеличенному объему, и соответственно, где-то появлюются дырки? Так? Но эти дырки слишком малы, чтобы вставить в них аообщение, поэтому данный способ подходит в основсном для ЦВЗ.

Скажа, пож-та, правильно ли я тебя поняла. smile.gif

PM MAIL   Вверх
XpyDi
Дата 27.5.2004, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 25.11.2002
Где: USSR

Репутация: 2
Всего: 2



Цитата
1. Просто писать наше сообщение в незаполненые (или частично заполеннные) таблицы PE-файлов. Например, в их заголовки (там места больше). Или писать в таблицы импорта. При этом функциональность PE-файла не нарушается. Так?

Да, если редактировать с умом, т.к. иначе можно повредить важную таблицу (или её часть). Тут самое главное то, что можно редактировать все, что не используется загрузчиком, при этом есть несколько минусов:

  • загрузчики Win 9x/Me/NT/2k/XP иногда достаточо сильно отличаются друг от друга, соответвенно у них разные требования к файлу.
  • можно изменить таблицы не используемые загрузчиком, но используемые другими программами, а наличие некоректной таблицы может оказаться подозрительным, хотя это еще не значит файл является стегоконтейнером, существует еще несколько ситуаций, когда в файле находится не совсем корректная информация.


Цитата
Главное - мне понять, что ты подразумеваешь под понятиями код и данные. Т.к. для меня код - это текст программы, видимо наше понимание несколько отличается. Уточни, пож-та.

Код - это те осмысленные инструкции на которые хотя бы один раз в процессе работы программы может исполнится процессором.
Данные же это все остальные байты, т.е. те на которые передав управление программа скорее всего аварийно завершится.
Так, например, если сожмем программу, то полученные после сжатия байты будут данными, но после того как мы ей (программу) распакуем и передадим её управление это будет код. Так и в любой программе есть куски кода (т.е. те которые исполняются) и данные.
Я хотел сказать, что в некоторых случаях одни и теже байты могут быть как данными, так и кодом. Т.е. пока процессор не стал исполнять записанные там инструкции это данные, как только исполнил хоть раз, значит код.
Вроде выразился как мог, надеюсь понятно что я хотел сказать.

Цитата
Так вот: Находим пустые куски в коде дизассемблированием и/или анализом файла и заполняем их своим сообщением. Не поняла, что будет, если пустые куски файла "используются динамически"?

Я написал не пустые, а не используемые. Это несколько разные вещи. Пустые в моем понимании это забитые нулями, а неиспользуемые это остаточная информация от каких-то таблиц, возможно какие-то данные или код, который оптимизитор случайно впихнул из-за своей несовершенности. Проблема в том, что могут найтись такие куски на которые нет явных ссылок, но управление на них передается конструкцией вида:
Код

 mov eax, 15
 lea eax, [eax*2+3]
 call eax

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

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

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

  • Уменьшить место занимаемое программой на диске. Реальный размер программы без распаковки узнать вряд ли удастся. Из-за этого программу можно выдать просто за несколько большую по размерам. Да и рецензент обратит внимание на то что программа сжата, только если залезет в неё дизассемблером или чем-то в этом роде.
  • Просто в сжатому коду был дописан какой-нибудь кусок который защищает его от различные модефикаций его взломщиками.
    Так же можно на самом деле впихнуть в файл подобных трюков байт на 20-30.

Цитата
3. Мне непонятно, как, увеличивая объем данных, появляются дырки. Т.е. тоже кол-во данных просто размазывается по увеличенному объему, и соответственно, где-то появлюются дырки? Так? Но эти дырки слишком малы, чтобы вставить в них аообщение, поэтому данный способ подходит в основсном для ЦВЗ.

Из-за выравнивания. Выравнивание - это дополнение некоторых структур нулевыми байтами, так что-бы все они располагались на границе(по адресу) кратному, например 2 байтам (сейчас чаще можно встретить 4,8 байт),
Из-за того что программист может плохо расположить различные структуры в программе её размер за счет выравнивания может немного увеличиться (относительно размера всей программы 10%-20%). А встраивание ЦВЗ это наиболее подходящий вариант для исполняемых файлов, т.к. что ни говори, а размер свободного места в файле под стегосообщение всеже сильно (по сравнению с музыкальными и графическими файлами) ограничено.
Единственное, что хочу напомнить, так это то, что ты можешь одно стего сообщение размазать по различным местам нашего файла и не только конкретного, но и тех, без которого запуск данной программы просто невозможен.

PM MAIL WWW ICQ   Вверх
Urod
Дата 15.6.2004, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 376
Регистрация: 10.4.2004
Где: Москва

Репутация: 1
Всего: -1



Всем спасибо! К сожалению нет права поднять репутацию sergej.z и
XpyDi за помощь и поддержку. Если это сделаю модераторы - это будет справедливо!


PM MAIL   Вверх
podval
Дата 15.6.2004, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 18
Всего: 62



Цитата(Urod @ 15.6.2004, 14:56)
Всем спасибо! К сожалению нет права поднять репутацию sergej.z и
XpyDi за помощь и поддержку. Если это сделаю модераторы - это будет справедливо!

Сделал smile.gif
PM WWW ICQ   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0844 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.