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

Тема в разделе "WASM.RESEARCH", создана пользователем vipsgas, 24 окт 2004.

  1. vipsgas

    vipsgas New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2004
    Сообщения:
    3
    Адрес:
    Минск
    Возник вопрос по поводу защиты от дизассемблир и вообще полностью всей программы от ее алгоритмоповторения.

    Проект скомпилен в делфи6.

    Пользуюсь пакером Yoda PE Protector 1.02 (yodap.cjb.net).

    Пробовал ASProtect 2.0.

    ----------------

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

    Требуется, чтобы никто не разобрался в работе этой программы. Там идут различные математичесмкие расчеты по алгоритмам, которые представляют коммерческую ценность.

    -----------

    Пробовал распаковывать оригинальный файл (не пакованный) при помощи EMS Sourse Rescuer - впечатлило. Но процедуры показывает не все. Ссылается на опред. адрес\смещение.

    Пакованные\криптованные не открывает.

    С IDA Работать не умею.

    Прошу учесть, что в основном я математик.

    -----------

    Заранее спасибо.
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Что же является более надежной защитой?



    Я отвечу. Благо, недавно что-то подобное одной французской фирме пояснял.

    То, что вы математик - это только плюс.

    Начну с аксиомы - неломаемых защит нет. Если вашей программой заинтересуются всерьез - ее не спасет ничего. Опции по защите.

    1) Использовать какой-либо упаковщик типа Asprotect/Armadillo/Obsidium и прочей дряни. Новичков и средних отсечет начисто. Людей высокого уровня задержит лишь на ... хм, ненадолго, в общем! И кто-нибудь потом обратится к кому-нибудь из нас, чтобы избавить вашу программу от такой защиты.

    2) Использовать какой-нибудь HASP. Затычку в порту, реализующую симметричную криптографию на базе AES или каком-нибудь самопальном алгоритме. Опять таки, в силу распространенности это не поможет.



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



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

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Попробуй EXECryptor - если на скорость выполнения защищяемого кода наплевать, то после обработки восстановить начальный код приницпиально невозможно - он раздувается в десятки раз, не говоря уже про антиоладочные приемы.
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    приницпиально невозможно



    Побойся таких фраз :)

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



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

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Вот так и знал, что порча бизнеса будет :)





    Хорошо - соответствует сложности решения NP-полной задачи. :)





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



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



    Убегаю, убегаю :))
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Убегаю, убегаю :))



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



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



    Хм, может я Дмита не так понял...

    Fuck... Так таки да...

    Вот фрагмент из письма ко мне:



    На счет перекореживания кода - теоретически, можно попробовать. Нечто

    подобное делает ExeCryptor 2.0 - еще один аналог ASProtect от

    российских разработчиков (SoftComplete Development). В устах автора ... все очень красиво

    и надежно. Но сколько он это писал - не знаю.



    По идее надо построить граф операций (учесть все переходы), а потом

    сделать некоторый морфинг, в результате которого все пути на графе

    останутся без изменений, а сам граф станет максимально непохожим на

    оригинал.
     
  7. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    Убегаю от праведного гнева всекарающей руки Володи :)

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





    Насчет надежно можно легко самому проверить. Сколько писалось точно не скажу, но больше года точно - одно тестирование версии 2.0 год длилось.

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

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754




    IMHO "проблема" эта решаемая:

    - берём некий мулятор x86, выполняем код от начала некоторого участка до инструкии перехода;

    - анализируем изменения в регистрах и генерируем команды необходимые для произведения этих изменений;

    - полученный код помещаем поверх старого, дополнив nop'ами;

    - повторяем анализ от начала участка до тех пор пока преобразования кода возможны (необязательный шаг);

    - переходим к следующему участку: от инструкии перехода до следующей инструкии перехода;

    - когда все участки между переходами проанализированы, анализируем переходы, убирая "лишние"

    - если удалось избавиться от лишних переходов, переходим к п1.



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

    Ну и подводные комни наверняка можно найти, иначе бы производителям оптимизирующих компиляторов было бы проще..
     
  9. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев


    Ню-ню :)





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





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



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



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

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    >




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





    >




    Он не будет решать что лишнее, а что нет.

    Упрощённо логика такая:

    пусть на входе участка кода eax == 0, после исполнения 50 инструкций eax == 5, другие регистры не изменились.

    Того же результата можно добится одной командой, "вычисление" её труда н составит.

    Сами команды анализировать нет смысла, это же мусор по определению - анализируются содержимое "регистров" мулируемого проца.



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

    Начало же ф-ции найти не проблема - от него и работаем.

    Суперинтелекта тут никакого не нужно, просто некоторый анализатор потока команд, лучше интерактивный..



    >




    $па$ибо :) но я пас.

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

    Mario555 New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2004
    Сообщения:
    21
    В аспре там всё не так сложно =) на ВМ выполняются только четыре типа команд (jmp/jcc/call/cmp) и их можно восстановить автоматически, остальное - обычный метаморф (мутно конечно, но разбираться в нём можно).

    А вот с ExeCryptor'ом - хз... появился он совсем недавно, поэтому подробно его пока не разбирал, но на первый взгляд муть редкосная, метаморф покруче аспрового и есть вызовы похожие на аспровые call VM, только вот если это действительно ВМ, то она метаморфная, а это уже совсем грустно :dntknw:

    PS а импорт у ExeCryptor'а легко восстанавливается... на порядок легче, чем в апре 2.0 ;)
     
  12. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    masquer

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



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

    vipsgas New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2004
    Сообщения:
    3
    Адрес:
    Минск
    Большое спасибо за советы.

    Признаюсь, в ассемблере я не разбираюсь вообще. Помню толшько часть университетского курса по интерпрететору 8086 и примерно представляю структуру\организацию памяти.

    И все же если пользоваться какой-нибудь платной версией той же ASProtect? Будет ли от этого толк?

    --------------

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

    ---------------

    Вопрос к аудитории номер 2.

    Как можно организовать защиту исходного алгоритма программы по DOS, скомпилированную в Borland Pascal 7.01.

    Может стоит попробовать разные паскали типа FreePascal и т.д. Может ли отличаться способ компиляции\паковки в экзешник в других продуктах.

    ----------

    Я программирую под DOS\Win исключительно на Pascal\Delphi.

    Под ДОС - т.к. работаю с железом (x86 в сопряжении с различными источниками сигналов - их то я и обрабатываю).

    ----------

    Буду очень признателен за советы и помощь.

    Возможно обращусь к кому-ть лично.....
     
  14. vipsgas

    vipsgas New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2004
    Сообщения:
    3
    Адрес:
    Минск
    Недавно наткнулся на сайт BGCorp. Там предлагается программа Delphi String Protect, которая заменяет процедуры в исходниках делфи, что по их словам очень увеличит время на распознавание алгоритма.

    Я понимаю, что такого рода защиту нужно придумать самому.

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

    Есть ли у кого пример такой или похожей реализации? И стоит ли так делать вообще?
     
  15. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    vipsgas

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

    Есть ли у кого пример такой или похожей реализации?



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

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    S_T_A_S_



    Нет, так ты точно ничего не добьешься. Тем более для того, чтобы написать такое - хорошо попотеть придется.



    Mario555




    А импорт там не самое главное :)
     
  17. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    [offtop]



    CyberManiac >




    Можно было так: вслед за загрузчиком обычно шла упакованная картинка, которая загружалась и далее делался call на её стартовый адрес для распаковки. Дык, вот вместо картинки просто подсовывался другой файл (с) :)



    [/offtop]