Здравствуйте, L.Long, Вы писали:
LL>И что ты тогда из кода вытащишь? И вообще, нахрена хранить пароль-то?
из кода я могу вытащить, собственно, сам исходный код, в удобночитаемом виде. а с ним, и логику всяких там защитных механизмов. это я и имел ввиду, что, с этой точки зрения, безопасность NET не на высоте. конечно, любую программу можно дизассемблировать, но читается и понимается это гораздо сложнее.
Здравствуйте, игппук, Вы писали:
LL>>И что ты тогда из кода вытащишь? И вообще, нахрена хранить пароль-то?
И>из кода я могу вытащить, собственно, сам исходный код, в удобночитаемом виде...
Есть такое слово — обфускация.
Чем совершеннее технически средство, тем более примитивные, никчемные и бесполезные сведения при его помощи передаются.(с)Станислав Лем
1. Обфускаторы делают дизассемблированный код тяжелым для изучения, превращая IsLicensed() в x().
2. Некоторые обфускаторы используют баги ILDASM для защиты от дизассемблинга в нем (Salamander).
3. Некоторые обфускаторы даже конвертируют код в native код, делая бесполезным дизассемблинг (Salamander).
4. Некоторые обфускаторы шифруют и пакуют ваш exe и иже с ним referenced сборки в один exe-файл, так что размер проги может уменьшиться 2-4 раза и не поддается дизассемблингу (Thinstall).
Минусы
1. Продукт остается дизассемблируемым.
2. Собрать сборку после дизассемблинга не составит труда.
3. IL код – доступный для чтения и понимания по сравнению c ассемблерным.
4. «Защита» обфускаторов, которые используют баги ILDASM будут бессильны перед дизассемблерами других разработчиков.
5. Защита обфускаторов, которые используют шифрование символьной части метаданных, строковых и бинарных ресурсов мешает пользователям продукта, отлаживать и тестировать свои продукты. Кроме этого – это риск, так как некоторые символьные данные используются в Reflection – для получения типа (GetType(“MyType”)), или загрузки ресурса (GetManifestResourceStream(“MyResource”)).
6. Зачастую обфускаторы имеют кучу настроек, непонятных или сложных для понимания обычному юзеру. Неинформированность юзера может привести к тому что его обфусцированная прога будет работать не так как хотелось и иногда приводить к крэшу, да еще и не отлавливаемому отладчиком.
7. Цена – порядок цен – от 40 до 1500 долларов за программу. И цена может ничего не говорить о качестве обфускации. Может так статься что 40-долларовый обфускатор защитит ваш куда лучше чем более дорогой.
8. Насчет 4-его плюса. Защищенная таким образом прога «жестко привязана» к используемому .Net Framework, и сервис-пак установленный вами, «порушит» корректность работы защищенной программы. Да и такая защита возможна только для Intel-процессоров.
9. Насчет 5-го плюса. Да действительно защита сильна и лишена недостатков 4-го плюса. Продукт загружает из ресурса нужные сборки в память и managed exe файл и передает ему управление, занимаясь только разруливанием проблем со сборками, типами, ресурсами (через AssemblyResolve, TypeResolve, ResourceResolve). Но – не все сборки нужны сразу, загрузка их требует дешифровки и распаковки – дополнительного времени и нагрузки на процессор. Не все производят exe-файлы. А Thinstall будет работать только с exe, так как dll-сборки уже не имеют как раньше процессорного DllMain, из которой это было возможно производить. Но – взломать ее проблем также не составляет труда. Есть такая программа ProcDump – она может продампить запущенный процесс и соответственно легко получить расшифрованными и распакованными защищенный exe и referenced сборки. Thinstall будет иметь проблемы с загрузкой в память managed C++ сборки.
10. Некоторые обфускаторы создают замкнутую систему обфусцированных сборок, где необфусцированными остаются сборки сторонних производителей и MS-вские. Но и здесь все далеко от совершенства – обфускатор не знает как используются ресурсы сборки, поэтому может привести вашу прогу к нерабочему состоянию. Хотя в данном случае качество обфускации становится идеальным – ни к чему не подкопаться. Опять же – это возможно только для exe-прог. Если вам необходимо защищать библиотеку классов, то вам необходимо будет оставлять необфусцированными публичные члены классов и публичные классы – отсюда крэкер может начать свою работу.
и напоследок вопрос: как часто вы используете эту технологию?
Здравствуйте, игппук, Вы писали:
LL>> Есть такое слово — обфускация.
И>Плюсы и минусы
А еще есть люди, не задумывающиеся о том, что они, собственно, пишут. А в результате они пишут в плюсах:
3. Некоторые обфускаторы даже конвертируют код в native код, делая бесполезным дизассемблинг (Salamander).
4. Некоторые обфускаторы шифруют и пакуют ваш exe и иже с ним referenced сборки в один exe-файл, так что размер проги может уменьшиться 2-4 раза и не поддается дизассемблингу (Thinstall).
А в минусах, прямо следом:
1. Продукт остается дизассемблируемым.
К вопросу — лично я никак не использую обфускацию, ибо мне незачем, но если оно нужно — что мешает ее использовать?
Да, очень мне понравилось вот это:
6. Зачастую обфускаторы имеют кучу настроек, непонятных или сложных для понимания обычному юзеру.
Так и вижу обычного юзера, например, секретаршу, занятую настройкой обфускации...
Напоследок — значит, с тезисом о паролях мы разобрались?
Чем совершеннее технически средство, тем более примитивные, никчемные и бесполезные сведения при его помощи передаются.(с)Станислав Лем
Здравствуйте, L.Long, Вы писали:
LL>Напоследок — значит, с тезисом о паролях мы разобрались?
про пароли все понятно. по видимому, я неправильно понял утверждение о том, что на NET безопасности больше. или у нас разное понимание.
просто я вспоминаю один наш проект, когда надо было написать свой модуль на шарпе, к уже готовому проекту. не смотря на то, что заказчик нам не дал нормальных примеров исходников, нам хватило рефлектора, чтобы разобраться, как работает уже откомпиллированный код (с обращением к базе данных) и написать нечто подобное, причем работающее.
Здравствуйте, игппук, Вы писали:
И>из кода я могу вытащить, собственно, сам исходный код, в удобночитаемом виде. а с ним, и логику всяких там защитных механизмов. это я и имел ввиду, что, с этой точки зрения, безопасность NET не на высоте. конечно, любую программу можно дизассемблировать, но читается и понимается это гораздо сложнее.
Если обеспечение безопасности построено на некой секретной логике защитных механизмов, то это не безопасность, а фуфло. Нормальная безопасность обеспечивается при абсолютно открытой логике. См., например, PGP: все алгоритмы известны и открыты, а вломать — фигушки.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, anton_warlock, Вы писали:
_>P.S. может .NET так и использовать(позиционировать) — как язык для домохозяек, а С++ — это язык, который позволяет создавать большие сложные системы очень гибко?
Сори, а ты понимаешь чем отличается платформа от языка? Если, да, то попытайся объяснить как можно сравнивать платформу на кторой в том числе реализован С++-компилятор на 95% совместимый со стандартом ISO, с языком?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, L.Long, Вы писали:
LL>>И что ты тогда из кода вытащишь? И вообще, нахрена хранить пароль-то?
VD>А в друг кто спросит, а у нас нет паролей...
Не, это стандартный метод защиты "софта не дельфях". Когда делается навороченная система пользователей и правил, а в схему к ораклу все под одинм паролем (да еще и владельцем схемы) ходют. Ну а пароль ясен пень в exe. И правила доступа тоже в exe (типа меню неактивно — значиццо защищено). Вот об этих методах "защиты" походу товарищь нам и поведал. Для таких систем — да. Java и .Net не годяться (хотя C++ и Delphi тоже )
Тред как обычно скатился в никуда. А на конкретные вопросы автора так никто и не ответил. Я вот тоже с 2002-го думаю — нах мне этот .NET И пока что вполне счастлив без него.
Здравствуйте, ADK, Вы писали:
ADK>Тред как обычно скатился в никуда. А на конкретные вопросы автора так никто и не ответил. Я вот тоже с 2002-го думаю — нах мне этот .NET И пока что вполне счастлив без него.
Потому, что объяснить владельцу ваз2106 зачем платить за автомобиль 30куе, когда можно купить за 5 — невозможно, пока он не попробует поездить на таком автомобиле.
Да, пробовали, голубчик.Без особо дикого восторга. Плюс никто так толком и не смог показать успешные проекты под .NET — о чем это говорит? Плюс кажется скоро версий фреймворков расплодится куча, уже 3.5 на носу. И все они вместе будут жрать дикие кучи ресурсов.
Здравствуйте, ADK, Вы писали:
ADK>Да, пробовали, голубчик.Без особо дикого восторга. Плюс никто так толком и не смог показать успешные проекты под .NET — о чем это говорит? Плюс кажется скоро версий фреймворков расплодится куча, уже 3.5 на носу. И все они вместе будут жрать дикие кучи ресурсов.
До кол-ва питонов .net-у еще далеко — только на официальном сайте аж 8 версий: 2.5.1, 2.4.4, 2.3.6, 2.2.3, 2.1.3, 2.0.1, 1.6.1, 1.5.2.
Здравствуйте, ADK, Вы писали:
ADK>Да, пробовали, голубчик.Без особо дикого восторга. Плюс никто так толком и не смог показать успешные проекты под .NET — о чем это говорит? Плюс кажется скоро версий фреймворков расплодится куча, уже 3.5 на носу. И все они вместе будут жрать дикие кучи ресурсов.
Ну так посмотри на Java. Ибо
Но я не понимаю, зачем все это нужно. Да, программировать на C# значительно легче,чем на плюсах, плюс отражение, сборки там всякие.Но что это позволяет решить такого, что раньше нельзя было?! Ведь можно же как и раньше катать все на С++, пусть сложнее, но что-то я не заметил в .NET ничего революционного.
можно отнести и к jvm. Успешные проекты на java надо показывать? Особенно на серверах (с клиентской стороной у java не очень).
ЗЫ: Распространиться ли .Net так же как java — отдельный вопрос. Но тенденция перехода на манаджед языки симптоматична. Java, .Net, erlang — это все менеджед среды, которые для определенных задач рвут С/С++ по нескольким показателям сразу (в том числе бывает и по производительности). А по скорости и безопасности разработки (я для java/erlang еще и переносимость) — можно даже не сравнивать. Это просто разный уровень.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, ADK, Вы писали:
ADK>>И они несовместимы обратно?
L>Думаю что да. Track, например, работает только на определенной версии питона.
Питонов на машине может быть много и они не конфликтуют между собой.
Здравствуйте, aka50, Вы писали:
A>Здравствуйте, Lloyd, Вы писали:
L>>Здравствуйте, ADK, Вы писали:
ADK>>>И они несовместимы обратно?
L>>Думаю что да. Track, например, работает только на определенной версии питона.
A>Питонов на машине может быть много и они не конфликтуют между собой.
A>rwxrwxrwx 1 root root 9 2007-05-06 22:12 /usr/bin/python -> python2.5 A>-rwxr-xr-x 1 root root 1026092 2007-04-13 01:04 /usr/bin/python2.4 A>-rwxr-xr-x 1 root root 1157044 2007-05-02 20:58 /usr/bin/python2.5 A>-rwxr-xr-x 1 root root 4119 2004-10-27 01:46 /usr/bin/python_count