Сейчас на форуме: (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› Запутывание кода в VM |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 16 октября 2007 00:06 · Личное сообщение · #1 Товарищи, решил вот написать несложный прот и было бы неплохо реализовать в нем ВМ. Но я хочу максимально затруднить ее анализ и изучение. Машинку (ее рабочий скелет) я сделал такую, что она способна эмулировать и арифметику и лог. операции. Но как ее защитить. Если кто-то сталкивался с подобной проблемой поделитесь опытом. ![]() |
|
Создано: 17 октября 2007 09:26 · Личное сообщение · #2 dermatolog пишет: при этом скорость может упасть настолько, что она будет неприемлима для практического использования Пишим микроядро, и на базе него строим логику работу второй машины. Причем не забываем о профайлинге. И в случае, если тратится много времени на выполнение некоторой команды, просто выполняем для нее сквозную эмуляцию до уровня кода микроядра. Простое делегирование полномочий. Да, скорость выполнения на второй вм упадет, но всегда можно будет подобрать некоторую - "терпимую", величину времени выполнения инструкции пикода, или небольшого набора. ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... ![]() |
|
Создано: 17 октября 2007 09:50 · Поправил: dermatolog · Личное сообщение · #3 В принципе для любой ВМ есть множество вариантов запутывания логики в самом исполнителе - к примеру вкллючение непрозрачных предикатов на уровне пикода и в зависимости от из значений выполнение различных действий на уровне исполнителя (набор действий может быть очень широким, начиная от смены ключа по дешифровке пикода и заканчивая сменой логики самой ВМ при выполнении ВМ команд). Т.е. есть достаточно много методов усложнения логики ВМ без использования второй ВМ, которая будет исполнять часть первой ВМ, и практически с нимимальным падением скорости. ![]() |
|
Создано: 17 октября 2007 10:00 · Личное сообщение · #4 |
|
Создано: 17 октября 2007 10:06 · Личное сообщение · #5 tnt17 пишет: Да еще можно реализовать эмуляцию многопоточности, что-то типа виндовых фиберов.Впринципе это можно заюзать как некоторый механизм расспаралеливания задач на вм или между несколькими вм Если реализовать обфускацию на уровне самомого пикода то очень сложно в результате получить 2 независимых между собой потока инструкций (да их и на необфусцированном коде практически не бывает ![]() tnt17 пишет: А вообще - вариантов море. Причем ограничивается только фантазией разработчика ![]() ![]() |
|
Создано: 18 октября 2007 03:59 · Личное сообщение · #6 |
|
Создано: 18 октября 2007 06:01 · Личное сообщение · #7 |
|
Создано: 18 октября 2007 11:25 · Личное сообщение · #8 dermatolog пишет: Насчет "вм будет сама частично работать на пикоде" для этого достаточно завиртуализировать часть исполнителя одной ВМ чтобы она работала на другой ВМ (при этом скорость может упасть настолько, что она будет неприемлима для практического использования). Что и наблюдается в ВМ проте. + еще и код раздувается. Аспр тоже пошел по этому пути, только вовремя остановился. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 18 октября 2007 12:29 · Личное сообщение · #9 |
|
Создано: 18 октября 2007 12:44 · Личное сообщение · #10 S_T_A_S_ Ты у нас круче чем горы, и очень любишь принижать достижения других, хотя твои работы никто тут не видел. dermatolog пишет: А у меня за час уже был готовый вариант, а не просто прототип Да ладно, у слона все равно длинее и толще (с) непомню кто. ----- PGP key ![]() |
|
Создано: 18 октября 2007 12:49 · Личное сообщение · #11 |
|
Создано: 18 октября 2007 12:50 · Личное сообщение · #12 ntldr пишет: Ты у нас круче чем горы, и очень любишь принижать достижения других, хотя твои работы никто тут не видел. ну почему не видел, у него есть неплохая библиотека для фасма. правда она на другом форуме проскакивала, но всеже ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... ![]() |
|
Создано: 18 октября 2007 12:52 · Личное сообщение · #13 |
|
Создано: 18 октября 2007 13:22 · Поправил: S_T_A_S_ · Личное сообщение · #14 ntldr Я в общем-то специально расчитывал, что моё сообщение поймут не все ;) То, что dermatolog может за час собрать из готовых кусков метаморф меня совершенно не удивляет. Он и аналог того о чём я писал сделает за столько же, если не меньше... Если знает PERL на уровне, мне вот пришлось ставить задачу спецу. tnt17 пишет: библиотека для фасма Умерла давно, точнее, заменена на С++ аналог ![]() |
|
Создано: 18 октября 2007 14:12 · Личное сообщение · #15 |
|
Создано: 18 октября 2007 14:56 · Личное сообщение · #16 |
|
Создано: 18 октября 2007 15:00 · Поправил: DrSlonix · Личное сообщение · #17 |
|
Создано: 18 октября 2007 16:33 · Личное сообщение · #18 dermatolog пишет: применимо к мутации больше необходим обратный процесс - из разобранной на аргументы команды собирать её бинарное представление. Угу, и тут на первый взгляд уже не заюзаешь запросто доступные движки... Вот и думай, что больше в стотьях - вреда, или пользы. В аттаче старый пример альтернативного решения (каюсь, мыло таки я поправил в сорце =). ![]() ![]() |
|
Создано: 18 октября 2007 17:19 · Личное сообщение · #19 А вот в нашей конторе(какой-не скажу) ![]() нужно было быстро сварганить простейшую защиту: 1. Программа использует нижеприведенный (как у инсталлятора) алгоритм, представляет собой один-единственный PE, только в своем теле хранит неколько библиотек своих ф-ций, использует только LoadLibrary и delay-load, имеет в своем теле runtaim- перехватчик ф-ции Load/Unload Library, для расшифровки и загрузки/выгрузки в память необходимых в данный момент модулей машинного кода похожих по сути на -dll, получилось что-то вроде exe после PEBundle, только замороченней. Соответственно имелась привязка к ключу и железу, простейшая антиотладка на SEH и именах ф-ций. 2. Написали свой инсталлятор в виде exe, который в ресурсах хранит следующие архивированные одним из архиваторов запароленные файлы: а). Файл структуры открытого ключа (запароленный на всякий крайний другим открытым ключем, хранящемся в инсталляторе почти свободно), б). Файл устанавливаемой программы, запароленный с учетом номера каждой отдельной копии ПО и ключа, который генерируется, исходя из даты, HDD ser numb и прочей лабуды, касаемой BIOS и т.д, информация о которой доступна в реестре, в). массив машинного кода генератора первичного ключа, отсылаемого нам для активации, запарроленного структурой открытого ключа, извлекаемой из ресурсов. И естественно проверка на валидность CD и т.д. времени на обрезку ненужных заголовков в файлах не было. Естественно пришлось собрать компрессор для реализации всех заморочек. Оказалось все просто и не долго. Описывать больше- некогда сам я к этому отношение имел не очень, примерно так насколько помню. ----- продавец резиновых утёнков ![]() |
|
Создано: 18 октября 2007 20:13 · Личное сообщение · #20 |
|
Создано: 18 октября 2007 21:00 · Личное сообщение · #21 |
|
Создано: 19 октября 2007 03:12 · Поправил: S_T_A_S_ · Личное сообщение · #22 ssx пишет: мейл там был не твой указан В оригинале, что ты видел, должно было быть моё мыло, только старое и невалидное уже (были еще проблемы с компиляцией сорца такого размера и тема на васме). Но от графьев можно что угодно ожидать, не удивлюсь если он провозгласил себя автором =) Кстати, раз уже видел... не в курсе, ключ научились извлекать? ![]() ![]() |
<< . 1 . 2 . |
![]() |
eXeL@B —› Программирование —› Запутывание кода в VM |