Возник вопрос по поводу защиты от дизассемблир и вообще полностью всей программы от ее алгоритмоповторения. Проект скомпилен в делфи6. Пользуюсь пакером Yoda PE Protector 1.02 (yodap.cjb.net). Пробовал ASProtect 2.0. ---------------- Что же является более надежной защитой? Требуется, чтобы никто не разобрался в работе этой программы. Там идут различные математичесмкие расчеты по алгоритмам, которые представляют коммерческую ценность. ----------- Пробовал распаковывать оригинальный файл (не пакованный) при помощи EMS Sourse Rescuer - впечатлило. Но процедуры показывает не все. Ссылается на опред. адрес\смещение. Пакованные\криптованные не открывает. С IDA Работать не умею. Прошу учесть, что в основном я математик. ----------- Заранее спасибо.
Что же является более надежной защитой? Я отвечу. Благо, недавно что-то подобное одной французской фирме пояснял. То, что вы математик - это только плюс. Начну с аксиомы - неломаемых защит нет. Если вашей программой заинтересуются всерьез - ее не спасет ничего. Опции по защите. 1) Использовать какой-либо упаковщик типа Asprotect/Armadillo/Obsidium и прочей дряни. Новичков и средних отсечет начисто. Людей высокого уровня задержит лишь на ... хм, ненадолго, в общем! И кто-нибудь потом обратится к кому-нибудь из нас, чтобы избавить вашу программу от такой защиты. 2) Использовать какой-нибудь HASP. Затычку в порту, реализующую симметричную криптографию на базе AES или каком-нибудь самопальном алгоритме. Опять таки, в силу распространенности это не поможет. Есть и еще несколько опций. Однако истина проста. Чтобы защита была хорошей, она обязана быть индивидуальной - разработаной сугубо под данного конкретного клиента. Причем, желательно иметь доступ к исходному коду, чтобы максимально интегрировать защиту. Для таких случаев подписывается NDA. В вашем же случае можно обойтись и без этого. Тут несколько другая специфика... Словом, мои ребята вполне могли бы помочь вам в данном случае. Если заинтересовались - начнем с мыла volodya///wasm///ru. А уж тогда я отвечу с нормального ящика.
Попробуй EXECryptor - если на скорость выполнения защищяемого кода наплевать, то после обработки восстановить начальный код приницпиально невозможно - он раздувается в десятки раз, не говоря уже про антиоладочные приемы.
приницпиально невозможно Побойся таких фраз EXECryptor - это защита на основе интерпретатора. Если клиент говорит о мат. операциях - это значит, важна скорость выполнения. Да, я согласен, что в случае интерпретатора сложность разбора повышается на порядки! Требуется восстановить формат представления данных и т.п. Это чудовищно сложно. Но. Самый большой минус. Скорость. Кроме того, не порть мне бизнес Не лезь в чужие топы Если человек скажет, что хочет на халяву - это другое дело и я из игры выбыл. Пусть юзает, что хочет. Если нет - канай, редиска
Вот так и знал, что порча бизнеса будет Хорошо - соответствует сложности решения NP-полной задачи. В корне не верно (говорю о версии 2.х, но и в ранних такого не было, насколько я знаю). Упрощенно говоря там просто берется одна-две команды и превращаются, в зависимости о настроек виртуализвции, в несколько тысяч команд, т.ч. отделить зерна от плевел нельзя - исходных инструкций просто не будет. Скорость - да, снижается в десятки раз, но такова плата за безопасность Ну и это не на халяву Убегаю, убегаю )
Убегаю, убегаю ) Вот так всегда. Сначала нашкодит, потом убегает. Я же говорю - редиска В корне не верно Хм, может я Дмита не так понял... Fuck... Так таки да... Вот фрагмент из письма ко мне: На счет перекореживания кода - теоретически, можно попробовать. Нечто подобное делает ExeCryptor 2.0 - еще один аналог ASProtect от российских разработчиков (SoftComplete Development). В устах автора ... все очень красиво и надежно. Но сколько он это писал - не знаю. По идее надо построить граф операций (учесть все переходы), а потом сделать некоторый морфинг, в результате которого все пути на графе останутся без изменений, а сам граф станет максимально непохожим на оригинал.
Убегаю от праведного гнева всекарающей руки Володи "Ничче" не могу с собой поделать - таки да, редиска Насчет надежно можно легко самому проверить. Сколько писалось точно не скажу, но больше года точно - одно тестирование версии 2.0 год длилось. Если в статью будешь что-то включать, чиркани мне, если авторы дадут согласие, расскажу что к чему из первых рук
IMHO "проблема" эта решаемая: - берём некий мулятор x86, выполняем код от начала некоторого участка до инструкии перехода; - анализируем изменения в регистрах и генерируем команды необходимые для произведения этих изменений; - полученный код помещаем поверх старого, дополнив nop'ами; - повторяем анализ от начала участка до тех пор пока преобразования кода возможны (необязательный шаг); - переходим к следующему участку: от инструкии перехода до следующей инструкии перехода; - когда все участки между переходами проанализированы, анализируем переходы, убирая "лишние" - если удалось избавиться от лишних переходов, переходим к п1. Это конечно точка зрения чайника, спецы тут что-нибудь по лучше предложат Ну и подводные комни наверняка можно найти, иначе бы производителям оптимизирующих компиляторов было бы проще..
Ню-ню до какого порехода? до jcc, до jmp [blabl+eax*4] или до push+ret? И что это даст? Повторю, если у нас есть например команды, например cmp eax, 0ffh, jnz blabla, то это все преобразуется в несколько тысяч инструкций с сотней переходов, прыжков внутрь инструкций и пр. И это если никакой защиты от отладки не включать. Гы, читай выше. На основании чего твой эмулятор будет решать что лишнее для того чтобы сгенерировать "правильный" код? Кстати начало и конец участка очень сложно определить, разве что натренировавшись, а уж программно я вообще не представляю как это сделать - они никогда не будут одинаковыми или иметь какую-то определенную последовательность, кроме логической. А это опять таки сводится к написанию мифического суперинтелектуального эмулятора, который сможет ужать 5-50 кб до 5-10 байт. Думаю, это на нобелевскую премию потянет ) Можно конечно и дальше теоретизировать, а можно скачать сам протектор и попробовать применить теорию на практике
> Под переходом я понимаю команду изменяющую EIP на значение не равное длине её опкода. Линейные участки кода анализировать проще. > Он не будет решать что лишнее, а что нет. Упрощённо логика такая: пусть на входе участка кода eax == 0, после исполнения 50 инструкций eax == 5, другие регистры не изменились. Того же результата можно добится одной командой, "вычисление" её труда н составит. Сами команды анализировать нет смысла, это же мусор по определению - анализируются содержимое "регистров" мулируемого проца. Начало участка определить? Ну думаю есть разница между straightforward кодом delphi компилера и тем что даёт обфускатор. IMHO никто не будет замещать каждые 2 инструкции мегабайтной проги на несколько тысяч, а ограничится лишь несколькими ф-циями. Начало же ф-ции найти не проблема - от него и работаем. Суперинтелекта тут никакого не нужно, просто некоторый анализатор потока команд, лучше интерактивный.. > $па$ибо но я пас. for the sake of Zen я лучше что-нить другое буду делать
В аспре там всё не так сложно =) на ВМ выполняются только четыре типа команд (jmp/jcc/call/cmp) и их можно восстановить автоматически, остальное - обычный метаморф (мутно конечно, но разбираться в нём можно). А вот с ExeCryptor'ом - хз... появился он совсем недавно, поэтому подробно его пока не разбирал, но на первый взгляд муть редкосная, метаморф покруче аспрового и есть вызовы похожие на аспровые call VM, только вот если это действительно ВМ, то она метаморфная, а это уже совсем грустно PS а импорт у ExeCryptor'а легко восстанавливается... на порядок легче, чем в апре 2.0
masquer Если в статью будешь что-то включать, чиркани мне, если авторы дадут согласие, расскажу что к чему из первых рук Хорошо. Может, и включу!
Большое спасибо за советы. Признаюсь, в ассемблере я не разбираюсь вообще. Помню толшько часть университетского курса по интерпрететору 8086 и примерно представляю структуру\организацию памяти. И все же если пользоваться какой-нибудь платной версией той же ASProtect? Будет ли от этого толк? -------------- У меня наклевывается идея о том, что в принципе после распаковки и снятия защиты полный экзешник можно декомпилить како-нибудь программой, т.н. обратно преобразовать... --------------- Вопрос к аудитории номер 2. Как можно организовать защиту исходного алгоритма программы по DOS, скомпилированную в Borland Pascal 7.01. Может стоит попробовать разные паскали типа FreePascal и т.д. Может ли отличаться способ компиляции\паковки в экзешник в других продуктах. ---------- Я программирую под DOS\Win исключительно на Pascal\Delphi. Под ДОС - т.к. работаю с железом (x86 в сопряжении с различными источниками сигналов - их то я и обрабатываю). ---------- Буду очень признателен за советы и помощь. Возможно обращусь к кому-ть лично.....
Недавно наткнулся на сайт BGCorp. Там предлагается программа Delphi String Protect, которая заменяет процедуры в исходниках делфи, что по их словам очень увеличит время на распознавание алгоритма. Я понимаю, что такого рода защиту нужно придумать самому. Может что-то вроде цепной реакции, например много процедур, каждая предыдущая распаковывает\раскриптовывает последующую. Есть ли у кого пример такой или похожей реализации? И стоит ли так делать вообще?
vipsgas Может что-то вроде цепной реакции, например много процедур, каждая предыдущая распаковывает\раскриптовывает последующую. Есть ли у кого пример такой или похожей реализации? ZX Spectrum. Alkatraz loader, с кассеты вытягивать лениво В древние времена ломалось старым добрым дампингом, в менее древние - эмуляцией и опять дампингом. Вообще если программа на ЯВУ начинает слишком активно шуршать на запись в секции кода (ну, в общем там, где исполняемый код находится) - это признак нехороший, и значит, там есть, чего ловить.
S_T_A_S_ Нет, так ты точно ничего не добьешься. Тем более для того, чтобы написать такое - хорошо попотеть придется. Mario555 А импорт там не самое главное
[offtop] CyberManiac > Можно было так: вслед за загрузчиком обычно шла упакованная картинка, которая загружалась и далее делался call на её стартовый адрес для распаковки. Дык, вот вместо картинки просто подсовывался другой файл (с) [/offtop]