Nanomites v0b
От: nen777w  
Дата: 26.11.13 18:22
Оценка: 1 (1)
Привет!
Как и обещал, выкладываю бета версию скриптов для создания защиты приложения на основе приема (nanomites) который используется в протекторе Armadilo.
Хочу этим постом привлечь заинтересованных людей что бы вместе допилить все это до вменяемого вида и главное попробовать портировать под компилятор cl.
Самой большой проблемой тут является то что генерируемый ассемблерный листинг cl, не компилируется в ml
Автор: nen777w
Дата: 16.09.13
.
Я читал что это можно исправить правкой полученного кода, но за эту задачу я еще не брался.
А пока то что есть реализовано только для gcc компилятора.
Сам я планирую и дальше развивать то что написал, потому как это будеть частью защиты моего приложения, но "гуртом лечгче батька бити".

Некоторые ремарки:
— пожалуйста не сильно удивляйтесь если в скриптах обнаружите полную чушь, на питоне я пишу можно сказать 3-й раз в жизни так что заодно и учусь.
— если найдутся заинтересованные поддержать разработку, может будет лучше положить все сырки на github, но пока для ознакомления они лежат на RSDN
— этот проект был написан по этой стаье
, к сожалению исходники в конце были недоступны. Когдя я связался с автором тот сказал что специально убрал их т.к. фирма где он работает делает
комерческий проект на основе этой технологии. Пришлось все делать самому.

Состав архива:

/nanomites_v0b/py/common_constants.py
— таблица инструкций перехода и соответвующий ей код, в дальнейшем развитии планируется ее занчительно расширить, что бы обрабатвать иснтрукции call, loop
а также не относительные переходы типа jmp eax
/nanomites_v0b/py/gcc_s_processor.py
— скрипт генерирующий таблицу с информацией о наномитах а также таблицу контрольных сум
(планируется обработка таблиц CRC для обечпечения целостности (защита от патичнга), пока реализована только на половину)
Входные параметры:
-s — обрабатываемый ассемблерный листинг .s-файлы
-d — результирующий файл
[-m] — ключик для обработки только кода между маркерами (существуют маркеры для наномитов и crc (см. файл: protector_SDK.h))
/nanomites_v0b/py/objdump_nano_tbl_generator.py
— скрипт для обработки результата работы утилиты objdump. По сути генерация h-файла со всеми необходимыми для отладчика таблицами
Входные параметры:
-s — обрабатываемый dump файл
-d — результирующий h файл, со всеми таблицами

/nanomites_v0b/bin_constants.h — вспомогательные макросы
/nanomites_v0b/debuger.cpp — отладчик процесса с наномитами
/nanomites_v0b/do.sh — шелл скрипт для генерации и компиляции тестового проекта
/nanomites_v0b/protector_SDK.h — маркировочные макросы
/nanomites_v0b/test_app.cpp — исходнк обрабатываемого приложения (внутри алгоритм md5)


Проверялось это на Linux, но теоретически должно работать и под unix подобные системы например OSX.
Есть вероятность что это заработает под Windows на MinGW, но еще руки не дошли проверить.

Что есть:
— бета версии скриптов с демонстрацией техники
— генерация полных таблиц наномитов (с фейковыми адресами)

Что хотелось-бы и планируется:
— Привлечь заинтересованных людей к проекту для совместной разработки.
— В первую очередь всетаки правдами-неправдами портировать все для cl. Может у кого то завалялся скрипт или зания которые помогут всетаки ml сожрать то что негенерил cl. У меня пока таких зананий нет.
— Расширить таблицу инструкций а также включить обработку инструкций относительного перехода (уже работаю над этим).
— Попробовать портировать под Intel compiler, там вроде не должно быть проблем.
— Добавить дополнительные механизмы обеспечивающие целостность генерируемых таблиц (есть пару идей)

Соственно все, на этот момент времени. Если что то забыл допишу потом.
Надеюсь на интересную дискуссию.
Re: Nanomites v0b
От: Аноним  
Дата: 26.11.13 20:09
Оценка:
Хм, вместо модификации ассемблерного листинга можно ведь править бинарник? В статье конечно говорится про преимущество листинга в виде однобайтовой мины для перехода любого размера, и соответствующие сложности с восстановлением, но ведь и в случае работы с бинарником можно сдвинуть весь код и пофиксить все джампы\коллы, условные переходы и смещения. Сложность в виде неоднозначности в определении предназначения операнда (смещение или похожая на смещение константа) отпадает благодаря релокам.
Re[2]: Nanomites v0b
От: mike_rs Россия  
Дата: 27.11.13 06:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хм, вместо модификации ассемблерного листинга можно ведь править бинарник? В статье конечно говорится про преимущество листинга в виде однобайтовой мины для перехода любого размера, и соответствующие сложности с восстановлением, но ведь и в случае работы с бинарником можно сдвинуть весь код и пофиксить все джампы\коллы, условные переходы и смещения. Сложность в виде неоднозначности в определении предназначения операнда (смещение или похожая на смещение константа) отпадает благодаря релокам.


армадилла с бинарником и работала. Достаточно map файла и простенького дизасма длин, дальше просто забиваешь все найденные 7x на cc в коде и генеришь таблицу. Все, больше ничего не надо.
Re[3]: Nanomites v0b
От: nen777w  
Дата: 10.12.13 15:52
Оценка:
_>армадилла с бинарником и работала. Достаточно map файла и простенького дизасма длин, дальше просто забиваешь все найденные 7x на cc в коде и генеришь таблицу. Все, больше ничего не надо.
Зря вы так, предложенный метод позволяет значительно расширить возможности наномитов.
Re[4]: Nanomites v0b
От: drVanо Россия https://vmpsoft.com
Дата: 11.12.13 03:23
Оценка: 1 (1)
Здравствуйте, nen777w, Вы писали:

_>>армадилла с бинарником и работала. Достаточно map файла и простенького дизасма длин, дальше просто забиваешь все найденные 7x на cc в коде и генеришь таблицу. Все, больше ничего не надо.

N>Зря вы так, предложенный метод позволяет значительно расширить возможности наномитов.

Вам предлагают полностью отказаться от перегона асма туда/сюда и сделать работу с уже готовым бинарем. Предложенный метод совсем никак не пострадает, а вот удобство для пользователя (да и в целом поддержка бинарей для любого компилятора) существенно улучшится.
Re[5]: Nanomites v0b
От: Жора Корнев  
Дата: 12.12.13 10:46
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Вам предлагают полностью отказаться от перегона асма туда/сюда и сделать работу с уже готовым бинарем. Предложенный метод совсем никак не пострадает, а вот удобство для пользователя (да и в целом поддержка бинарей для любого компилятора) существенно улучшится.


Согласен, на бинаре было бы более универсально. К таму же .map вполе для этого хватило, без плясок с асмом
Re[4]: Nanomites v0b
От: Kubyshev Andrey  
Дата: 12.12.13 13:43
Оценка:
_>>армадилла с бинарником и работала. Достаточно map файла и простенького дизасма длин, дальше просто забиваешь все найденные 7x на cc в коде и генеришь таблицу. Все, больше ничего не надо.
N>Зря вы так, предложенный метод позволяет значительно расширить возможности наномитов.

Я давно давно такое хотел написать. Добился следующего:
Диасмом генерил асм, его парсил (так легче)
потом разбивал на группы команд по 3-4-5 команд. И путем анализа изменяемых регистров добивался того что б группу команд использовать как моджно чаще.
Типа оно догадывалось что

xor ecx,ecx
mov eax,1
mov ebx,1

mov ebx,1
xor ecx,ecx
mov eax,1

Это одно и тоже
Потом дописывал новую секцию к бинарнику, а в опимизированые места call. Получалось оч много call. И трудно было понять и нельзя было пропатчить группу команд потому что она часто использовалась везде.
У меня тогда не хватило знаний и я забросил это дело.
Я думаю топик стартер правильно взялся за промежуточный асм.
А наномиты эти армадиловские я вчера случайно посмотрел. Ниче такого, глаз к ним привыкает xchg да пушпопы.
Re[5]: Nanomites v0b
От: drVanо Россия https://vmpsoft.com
Дата: 13.12.13 03:26
Оценка:
Здравствуйте, Kubyshev Andrey, Вы писали:

KA>Я думаю топик стартер правильно взялся за промежуточный асм.


В чем правильность то? ИМХО было проще хоть минимально изучить РЕ формат чем столько времени убить на борьбу с MSVC, а помимо GCC и MSVC есть еще куча компилеров, о которых ТС еще не подозревает: MinGW, WDK, BCB, Delphi, Free Pascal, XE2-XE5, VB6 наконец. Я не думаю что для всех из них удастся сделать перегон асма туда/сюда, причем даже если это и получится, то нет никакой гарантии, что пересобраный бинарь будет работать также как оригинал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.