Комментарии 26
Отличное оформление. Спасибо!
НЛО прилетело и опубликовало эту надпись здесь
я ж правильно понимаю, что после обфускации может отвалиться DataBindings?
может. может ещё много чего отвалиться (всё что зависит от Reflection).
но некоторые обфускаторы прилагают все усилия, чтобы задетектировать такие ситуации, и либо «подложить соломку», либо не обфусцировать данные части программы.
но некоторые обфускаторы прилагают все усилия, чтобы задетектировать такие ситуации, и либо «подложить соломку», либо не обфусцировать данные части программы.
да, и всё что живет на рефлекшине и именах отвалится если не сделать исключения на эти классы
Используете строковые литералы вместо expression trees? Так вам и надо. :)
хорошая, годная статья. От себя добавлю что есть способы превратить сборку в месиво из валидного ила, который уже никогда не декомпилировать в язык высокого уровня. Для этого надо писать собственный обфускатор, с заточками под свою архитектуру.
Обфускатор — это человек :))
У нас в компании работает несколько таких индивидов :)
У нас в компании работает несколько таких индивидов :)
Нда, люди на все тяжкие пойдут, чтобы не открывать код.
А есть у них возможность по «защифрованному» call-stack-у получить «правильный»?
Например у пользователя выскочила ошибка — он прислал CS — и у себя разработчик может его получить с правильными именами методами.
Например у пользователя выскочила ошибка — он прислал CS — и у себя разработчик может его получить с правильными именами методами.
Как-то уж слишком просто. Неужто не используются (нельзя использовать) аналоги классических алгоритмов, применяющихся для PE программ — защиты импорта, динамической модификаций кода, виртуальными машинами...?
можно. и используется. но это уже пакеры (будут рассмотрены в самом конце).
к тому же в .NET нет больших возможностей по модификации кода + в силу специфики платформы IL-код всё равно нужен, так что любой упаковщик снимается легко и непринуждённо.
к тому же в .NET нет больших возможностей по модификации кода + в силу специфики платформы IL-код всё равно нужен, так что любой упаковщик снимается легко и непринуждённо.
Ну виртуальную машину-то поверх всё равно можно нагородить :) Хотя тормозить будет нещадно, наверное.
да, ваш софт тогда никто не купит ;)
теоретически можно сделать вирт.машину для функций проверки лицензии, но и имеющейся защиты достаточно. не секреты пентагона же защищаем ;)
а абсолютной защиты всё равно не бывает, если программа как-то выполняется, её всё равно можно реверсить, даже если не скопировать код, то понять что и зачем можно при любой защите.
теоретически можно сделать вирт.машину для функций проверки лицензии, но и имеющейся защиты достаточно. не секреты пентагона же защищаем ;)
а абсолютной защиты всё равно не бывает, если программа как-то выполняется, её всё равно можно реверсить, даже если не скопировать код, то понять что и зачем можно при любой защите.
Хм. А что, никто не покупает софт, защищённый, например, ASProtect'ом?
Речь, как и всегда в этой области, не про абсолютную защиту, а про увеличение стоимости/сложности взлома. Реверсить, конечно, можно всё, но людей, которые смогут (и будут) такое сделать, будет разное количество в зависимости от степени защиты.
Речь, как и всегда в этой области, не про абсолютную защиту, а про увеличение стоимости/сложности взлома. Реверсить, конечно, можно всё, но людей, которые смогут (и будут) такое сделать, будет разное количество в зависимости от степени защиты.
ну аспротект не делает же виртмашину на дотнете/jav'e ;)
для нативного кода это уже довольно старая практика и машины уже оптимизированы.
я имел в виду именно виртуализованный managed-код
для нативного кода это уже довольно старая практика и машины уже оптимизированы.
я имел в виду именно виртуализованный managed-код
Подозреваю, что вм поверх другой вм с jit-компиляцией будет не намного медленнее, чем просто вм без jit. А последние вполне так существуют, и ничего — например, python без psyco/pypy. Сама по себе скорость выполнения программы становится всё меньше и меньше важной… Ну и плюс, как вы упомянули, не обязательно всё приложение защищать, можно и частично.
Эту бы энергию, да в мирных целях…
А представляете как сложно AOT транслятору преобразовать хорошенько обфусцированную (со вставками, заменами) программу в быстрый машинный код? В особо сложных случаях это вообще невозможно и поэтому очень тормозииит.
да, представляю. в одном из следующих постов собираюсь заодно произвести замеры производительности.
не думайте, что я так люблю обфускацию. просто меня заинтересовал данный вопрос, ну и деобфускация тоже.
решил привести свои мысли в порядок, всё записал, а накопилось аж на статью, вот решил поделиться ;)
не думайте, что я так люблю обфускацию. просто меня заинтересовал данный вопрос, ну и деобфускация тоже.
решил привести свои мысли в порядок, всё записал, а накопилось аж на статью, вот решил поделиться ;)
Огромное спасибо за статьи, очень интересно!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Обфускаторы (и деобфускаторы) для .NET §1