· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Какой самый надежный криптор\пакер для файлов скомпиленых в Borland Delphi ?

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Окт 24, 2004 23:23:02 · Поправил: vipsgas

Возник вопрос по поводу защиты от дизассемблир и вообще полностью всей программы от ее алгоритмоповторения.
Проект скомпилен в делфи6.
Пользуюсь пакером Yoda PE Protector 1.02 (yodap.cjb.net).
Пробовал ASProtect 2.0.
----------------
Что же является более надежной защитой?
Требуется, чтобы никто не разобрался в работе этой программы. Там идут различные математичесмкие расчеты по алгоритмам, которые представляют коммерческую ценность.
-----------
Пробовал распаковывать оригинальный файл (не пакованный) при помощи EMS Sourse Rescuer - впечатлило. Но процедуры показывает не все. Ссылается на опред. адрес\смещение.
Пакованные\криптованные не открывает.
С IDA Работать не умею.
Прошу учесть, что в основном я математик.
-----------
Заранее спасибо.


Дата: Окт 25, 2004 01:47:38 · Поправил: volodya

Что же является более надежной защитой?

Я отвечу. Благо, недавно что-то подобное одной французской фирме пояснял.
То, что вы математик - это только плюс.
Начну с аксиомы - неломаемых защит нет. Если вашей программой заинтересуются всерьез - ее не спасет ничего. Опции по защите.
1) Использовать какой-либо упаковщик типа Asprotect/Armadillo/Obsidium и прочей дряни. Новичков и средних отсечет начисто. Людей высокого уровня задержит лишь на ... хм, ненадолго, в общем! И кто-нибудь потом обратится к кому-нибудь из нас, чтобы избавить вашу программу от такой защиты.
2) Использовать какой-нибудь HASP. Затычку в порту, реализующую симметричную криптографию на базе AES или каком-нибудь самопальном алгоритме. Опять таки, в силу распространенности это не поможет.

Есть и еще несколько опций. Однако истина проста. Чтобы защита была хорошей, она обязана быть индивидуальной - разработаной сугубо под данного конкретного клиента. Причем, желательно иметь доступ к исходному коду, чтобы максимально интегрировать защиту. Для таких случаев подписывается NDA. В вашем же случае можно обойтись и без этого. Тут несколько другая специфика...

Словом, мои ребята вполне могли бы помочь вам в данном случае. Если заинтересовались - начнем с мыла volodya///wasm///ru. А уж тогда я отвечу с нормального ящика.


Дата: Окт 25, 2004 02:07:03

Попробуй EXECryptor - если на скорость выполнения защищяемого кода наплевать, то после обработки восстановить начальный код приницпиально невозможно - он раздувается в десятки раз, не говоря уже про антиоладочные приемы.


Дата: Окт 25, 2004 03:05:32

приницпиально невозможно

Побойся таких фраз :)
EXECryptor - это защита на основе интерпретатора. Если клиент говорит о мат. операциях - это значит, важна скорость выполнения. Да, я согласен, что в случае интерпретатора сложность разбора повышается на порядки! Требуется восстановить формат представления данных и т.п. Это чудовищно сложно. Но. Самый большой минус. Скорость.

Кроме того, не порть мне бизнес :) Не лезь в чужие топы :) Если человек скажет, что хочет на халяву - это другое дело и я из игры выбыл. Пусть юзает, что хочет. Если нет - канай, редиска :)


Дата: Окт 25, 2004 03:38:07

Вот так и знал, что порча бизнеса будет :)

„Побойся таких фраз :)“
Хорошо - соответствует сложности решения NP-полной задачи. :)

„EXECryptor - это защита на основе интерпретатора.“
В корне не верно (говорю о версии 2.х, но и в ранних такого не было, насколько я знаю). Упрощенно говоря там просто берется одна-две команды и превращаются, в зависимости о настроек виртуализвции, в несколько тысяч команд, т.ч. отделить зерна от плевел нельзя - исходных инструкций просто не будет. Скорость - да, снижается в десятки раз, но такова плата за безопасность :)

Ну и это не на халяву :)

Убегаю, убегаю :))


Дата: Окт 25, 2004 03:44:27 · Поправил: volodya

Убегаю, убегаю :))

Вот так всегда. Сначала нашкодит, потом убегает. :) Я же говорю - редиска :)

В корне не верно

Хм, может я Дмита не так понял...
Fuck... Так таки да...
Вот фрагмент из письма ко мне:

На счет перекореживания кода - теоретически, можно попробовать. Нечто
подобное делает ExeCryptor 2.0 - еще один аналог ASProtect от
российских разработчиков (SoftComplete Development). В устах автора ... все очень красиво
и надежно. Но сколько он это писал - не знаю.

По идее надо построить граф операций (учесть все переходы), а потом
сделать некоторый морфинг, в результате которого все пути на графе
останутся без изменений, а сам граф станет максимально непохожим на
оригинал.


Дата: Окт 25, 2004 04:02:56

Убегаю от праведного гнева всекарающей руки Володи :)
"Ничче" не могу с собой поделать - таки да, редиска :)

„В устах автора ... все очень красиво
и надежно. Но сколько он это писал - не знаю.“

Насчет надежно можно легко самому проверить. Сколько писалось точно не скажу, но больше года точно - одно тестирование версии 2.0 год длилось.
Если в статью будешь что-то включать, чиркани мне, если авторы дадут согласие, расскажу что к чему из первых рук :)


Дата: Окт 25, 2004 05:22:11

„Упрощенно говоря там просто берется одна-две команды и превращаются, в зависимости о настроек виртуализвции, в несколько тысяч команд, т.ч. отделить зерна от плевел нельзя - исходных инструкций просто не будет“

IMHO "проблема" эта решаемая:
- берём некий мулятор x86, выполняем код от начала некоторого участка до инструкии перехода;
- анализируем изменения в регистрах и генерируем команды необходимые для произведения этих изменений;
- полученный код помещаем поверх старого, дополнив nop'ами;
- повторяем анализ от начала участка до тех пор пока преобразования кода возможны (необязательный шаг);
- переходим к следующему участку: от инструкии перехода до следующей инструкии перехода;
- когда все участки между переходами проанализированы, анализируем переходы, убирая "лишние"
- если удалось избавиться от лишних переходов, переходим к п1.

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


Дата: Окт 25, 2004 05:43:35

„IMHO "проблема" эта решаемая:“
Ню-ню :)

„- берём некий мулятор x86, выполняем код от начала некоторого участка до инструкии перехода;“
до какого порехода? до jcc, до jmp [blabl+eax*4] или до push+ret? И что это даст? Повторю, если у нас есть например команды, например cmp eax, 0ffh, jnz blabla, то это все преобразуется в несколько тысяч инструкций с сотней переходов, прыжков внутрь инструкций и пр. И это если никакой защиты от отладки не включать.

„- анализируем изменения в регистрах и генерируем команды необходимые для произведения этих изменений;“
Гы, читай выше. На основании чего твой эмулятор будет решать что лишнее для того чтобы сгенерировать "правильный" код?

Кстати начало и конец участка очень сложно определить, разве что натренировавшись, а уж программно я вообще не представляю как это сделать - они никогда не будут одинаковыми или иметь какую-то определенную последовательность, кроме логической. А это опять таки сводится к написанию мифического суперинтелектуального эмулятора, который сможет ужать 5-50 кб до 5-10 байт. Думаю, это на нобелевскую премию потянет :))

Можно конечно и дальше теоретизировать, а можно скачать сам протектор и попробовать применить теорию на практике :)


Дата: Окт 25, 2004 06:54:46

> „до какого порехода? до jcc, до jmp [blabl+eax*4] или до push+ret? И что это даст?“

Под переходом я понимаю команду изменяющую EIP на значение не равное длине её опкода. Линейные участки кода анализировать проще.


> „На основании чего твой эмулятор будет решать что лишнее для того чтобы сгенерировать "правильный" код?“

Он не будет решать что лишнее, а что нет.
Упрощённо логика такая:
пусть на входе участка кода eax == 0, после исполнения 50 инструкций eax == 5, другие регистры не изменились.
Того же результата можно добится одной командой, "вычисление" её труда н составит.
Сами команды анализировать нет смысла, это же мусор по определению - анализируются содержимое "регистров" мулируемого проца.

Начало участка определить? Ну думаю есть разница между straightforward кодом delphi компилера и тем что даёт обфускатор. IMHO никто не будет замещать каждые 2 инструкции мегабайтной проги на несколько тысяч, а ограничится лишь несколькими ф-циями.
Начало же ф-ции найти не проблема - от него и работаем.
Суперинтелекта тут никакого не нужно, просто некоторый анализатор потока команд, лучше интерактивный..

> „можно скачать сам протектор и попробовать применить теорию на практике :)“

$па$ибо :) но я пас.
for the sake of Zen я лучше что-нить другое буду делать :)


Дата: Окт 25, 2004 16:35:30

В аспре там всё не так сложно =) на ВМ выполняются только четыре типа команд (jmp/jcc/call/cmp) и их можно восстановить автоматически, остальное - обычный метаморф (мутно конечно, но разбираться в нём можно).
А вот с ExeCryptor'ом - хз... появился он совсем недавно, поэтому подробно его пока не разбирал, но на первый взгляд муть редкосная, метаморф покруче аспрового и есть вызовы похожие на аспровые call VM, только вот если это действительно ВМ, то она метаморфная, а это уже совсем грустно :(
PS а импорт у ExeCryptor'а легко восстанавливается... на порядок легче, чем в апре 2.0 ;)


Дата: Окт 25, 2004 18:12:33

masquer
Если в статью будешь что-то включать, чиркани мне, если авторы дадут согласие, расскажу что к чему из первых рук :)

Хорошо. Может, и включу! :)


Дата: Окт 25, 2004 19:58:34

Большое спасибо за советы.
Признаюсь, в ассемблере я не разбираюсь вообще. Помню толшько часть университетского курса по интерпрететору 8086 и примерно представляю структуру\организацию памяти.
И все же если пользоваться какой-нибудь платной версией той же ASProtect? Будет ли от этого толк?
--------------
У меня наклевывается идея о том, что в принципе после распаковки и снятия защиты полный экзешник можно декомпилить како-нибудь программой, т.н. обратно преобразовать...
---------------
Вопрос к аудитории номер 2.
Как можно организовать защиту исходного алгоритма программы по DOS, скомпилированную в Borland Pascal 7.01.
Может стоит попробовать разные паскали типа FreePascal и т.д. Может ли отличаться способ компиляции\паковки в экзешник в других продуктах.
----------
Я программирую под DOS\Win исключительно на Pascal\Delphi.
Под ДОС - т.к. работаю с железом (x86 в сопряжении с различными источниками сигналов - их то я и обрабатываю).
----------
Буду очень признателен за советы и помощь.
Возможно обращусь к кому-ть лично.....


Дата: Окт 25, 2004 20:17:59 · Поправил: vipsgas

Недавно наткнулся на сайт BGCorp. Там предлагается программа Delphi String Protect, которая заменяет процедуры в исходниках делфи, что по их словам очень увеличит время на распознавание алгоритма.
Я понимаю, что такого рода защиту нужно придумать самому.
Может что-то вроде цепной реакции, например много процедур, каждая предыдущая распаковывает\раскриптовывает последующую.
Есть ли у кого пример такой или похожей реализации? И стоит ли так делать вообще?


Дата: Окт 25, 2004 21:24:18 · Поправил: CyberManiac

vipsgas
Может что-то вроде цепной реакции, например много процедур, каждая предыдущая распаковывает\раскриптовывает последующую.
Есть ли у кого пример такой или похожей реализации?

ZX Spectrum. Alkatraz loader, с кассеты вытягивать лениво :-) В древние времена ломалось старым добрым дампингом, в менее древние - эмуляцией и опять дампингом. Вообще если программа на ЯВУ начинает слишком активно шуршать на запись в секции кода (ну, в общем там, где исполняемый код находится) - это признак нехороший, и значит, там есть, чего ловить.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.101