Pull to refresh

Comments 24

Мне понравилась идея с control flow, но похоже вам действительно нужно менять алгоритм почаще, а то строки следующего вида кажутся очевидными:

int num7 = -19581;
switch (0)
{
    case 0:
    do
    {
        ...
        if (num7 == -18995)
        { .... }
        ...
    }
    while (false);
    ...
Полностью согласен. Да, требует больше времени, но control flow восстанавливается на ура.
Не существуют защиты, которую не возможно обойти. Единственная цель любых средств защиты — максимально повысить стоимость взлома и, в идеале, сделать его нерентабельным.
Да, но это вырожденный случай, как правило в switch оказывается не одна ветка а множество. При этом значение счетчика устанавливается в предыдущем шаге для следующего, чтобы усложнить анализ. Кроме того, в некоторые моменты, выполнение уходит за пределы switch блока, и обрабатывается другими инструкциями перехода. Там так же применяется переход на базе счетчика, с разделенной на разные блоки инциализацией и инструкцией перехода.
тогда извиняюсь, так как глаза случайно наткнулись именно на этот блок
А Вы попробуйте одновременно включить все режимы защиты в обфускаторе (кроме галочки Library mode, т.к. это не защита). В совокупности они дают особенно красивый эффект :)
Ссылка на faq с главной страницы ведет на 404.
Трудно добраться до заметки про прайсинг. Было бы удобнее (мне по крайней мере) добавить в главное меню ссылку на прайсинг. Пусть даже с той же текстовкой про «Pricing in progress...», как в нынешнем неочевидном месте.
Большое спасибо, действительно мы слишком увлеклись работой над программой, и совсем забыли про обновление сайта. Битую ссылку поправили, страницу с нормальным прайсом сделаем в самое ближайшее время.
ММММ Метро UI в Кабинете. Обожаю минималистик. Только стиль основного портала совсем «не торт».
Но Вы меня не слушайте… я брюзга, возможно.
У вас что, пароли в открытом виде хранятся?
Нет, пароль доступен только в момент регистрации из формы, а в БД сохраняется уже хеш md5 с солью.
Всё равно мне кажется это лишним и даёт повод для недоверия. И лучше пароль на почту вообще не высылать, нечего ему там делать.
Да, спасибо Вам за замечание, мы убрали вставку пароля в письмо.
А WinRT приложения (Metro) обфусцировать умеет сервис?

* И по моему на сайте явно не хватает странички с тарифами, как например тут:
habrahabr.ru/info/advertising/corporate/
т.к. сначала желательно знать на сколько лучше ваше предложение, а уже потом решать пользоваться или нет.
Сервис может обфусцировать любые .NET сборки, поэтому если WinRT приложение написано на .NET, то все должно работать.
Страничка с тарифами обязательно будет, как я уже писал выше, что мы проглядели этот вопрос.
Надежная защита говорите… Выложите кто-нибудь семпл обфусцированного сервисом файла.
Для примера выкладываю обфусцированную OpenSource программу NClass
Обфускация проведена со всеми параметрами по умолчанию, без явных исключений, все алгоритмы защиты включены:
public.66bit.ru/files/2013.02.15/2abc87810a9a9963d7ee81e3434a36b5/NClass.rar (смотреть в ILSpy, Reflector и т.п.)
Оригинальный код: nclass.sourceforge.net/
Ох сколько уже попыток было…
Пара вопросов по how it works:
1. Обычно производители или владельцы кода испытывают диссонанс когда они защищают свой код, а тут раз… и надо его в третьи руки(а у многих(корпоративных) даже в соглашениях о неразглашении прописан прямой запрет передачи) передавать код третьей стороне. Как эта проблема решена в вашем SaaS решении?
2. Интересно конечно, как же происходит поиск референсных сборок, если они допустим не системные, а от стороннего вендора, или кастомные? Бывают проекты на 1-10 гигов (если учитывать все референсные сборки).
Вопросов конечно больше, но вот SaaS (или около-SaaS) решения в области защиты кода часто упираются в этот тупик.
Спасибо заранее.
Приложения на Windows Forms обфусцирует отлично, но вот на WPF под управлением .NET Framework 4.0 — главную форму приложения открывает, но стоит только нажать на ссылку, подгружающую фрейм — сразу же ПО вылетает без суда и следствия…
Все дело в том, что в WPF используется множество механизмов неявного связывания по имени. Наш обфускатор распознает и корректно обрабатывает многие из этих случаев, но во-первых, разумеется, мы могли что-то и упустить, а во-вторых местами неявное связывание слишком уж неявное чтобы его выявить и обработать :) Особенно в этом плане опасны случаи генерации WPF содержимого непосредственно из кода приложения.

Чтобы выявить проблемную область, мы рекомендуем перенаправить поток ошибок в текстовый файл (по типу: you.exe 2> log.err), а затем скормить его стек трейс декодеру. Он подскажет с чем связана ошибка, дальше как правило достаточно добавить атрибут ObfuscationAttribute.

Как альтернативный вариант: если Вы дадите нам пример незащищенной сборки в которой проявляется ошибка, мы сможем диагностировать проблему и помочь Вам исправить её.

Спасибо за отзыв!
Кстати да, не работает как раз то, что приложение генерирует автоматически. Если элемент физически (?) создан на форме и его стиль прописан через свойства объекта — он работает.
Если дополнительно для него прописан стиль, определяющий наведение мыши — работает.
Но если какой-либо компонент создается непосредственно из кода — как раз эти «узкие» места обфускатор и не обработал.
Прочтя множество информации из поисковых систем, данной проблемой страдают практически все обфускаторы. Точнее, я не нашел рабочего варианта для BAML.
Единственным подходящим решением было использование "ILProtector" для защиты WPF, НО из всего приложения на нем НЕ РАБОТАЛА всего одна форма — нажимая кнопку открывается окно, в окне пользователь авторизуется на веб-сайте (компонент WebBrowser), при переходе по ссылке ПО должно считывать адресную строку и проверять на наличие определенного параметра. Если параметр найден — передавать его на основную форму приложения и закрывать текущее окно.
Собственно, обработчик WebBrowser_LoadCompleted и не срабатывает после применения ПО «ILProtector».
Но хотелось бы не просто защищать, а именно обфусцировать проект.

Чтобы выявить проблемную область, мы рекомендуем перенаправить поток ошибок в текстовый файл (по типу: you.exe 2> log.err), а затем скормить его стек трейс декодеру. Он подскажет с чем связана ошибка, дальше как правило достаточно добавить атрибут ObfuscationAttribute.

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

Как альтернативный вариант: если Вы дадите нам пример незащищенной сборки в которой проявляется ошибка, мы сможем диагностировать проблему и помочь Вам исправить её.

Если у самого не получится решить проблему, тогда к Вам обращусь. А если решу сам — напишу как решил.
Но хотелось бы не просто защищать, а именно обфусцировать проект.

Здесь почти наверняка проблема именно в переименовании.

Если у самого не получится решить проблему, тогда к Вам обращусь. А если решу сам — напишу как решил.

Да, обязательно напишите что получится. И, в любом случае, мы будем рады помочь Вам советом.
Здесь почти наверняка проблема именно в переименовании.

Я более чем уверен, что в переименовании. Тот же Гугл дает ~90% всех проблем при обфускации WPF проектов именно с переименованием.
Sign up to leave a comment.

Articles