Этот вопрос исказил меня - достаточно распространенная проблема, что хорошее решение должно уже существовать, что-то лучше, чем вектор векторов, или катит вашу собственную индексацию массива.
Когда что-то должно существовать в C ++ но нет, первое место для поиска - boost.org . Там я нашел Boost многомерную библиотеку массивов, multi_array
. Он даже включает класс multi_array_ref
, который можно использовать для упаковки собственного одномерного массива.
Назад с путаницей.Net 1.1 было важно: декомпиляция кода была легка, и Вы могли пойти от блока, к IL, к коду C# и компилировать его снова с очень небольшим усилием.
Теперь с.Net 3.5 я нисколько не уверен. Попытайтесь декомпилировать 3,5 блока; то, что Вы получаете, является длинным длинным путем от компиляции.
Добавляют оптимизации от 3,5 (намного лучше, чем 1,1) и путь анонимные типы, делегаты и так далее обрабатываются отражением (они - кошмар для перекомпиляции). Добавьте лямбда-выражения, компилятор 'волшебство' как Linq-синтаксис и var
, и функции C#2 как yield
(который приводит к новым классам с нечитабельными именами). Ваш декомпилируемый код заканчивается длинный длинный путь от компилируемого.
профессионал А подходит к большому количеству времени, мог все еще перепроектировать его назад снова, но тогда то же верно для любого запутываемого кода. Что кодирует, они вышли, который будет неудобен в сопровождении и очень вероятен быть очень ошибочным.
я рекомендовал бы подписанию ключа Ваши блоки (значение, если хакеры могут перекомпилировать тот, они должны перекомпилировать все), но я не думаю путаница, стоящая того.
Можно также хотеть посмотреть на новые технологии защиты кода такой как Metaforic и V.i. Labs и новые технологии программной защиты от копирования такой как ByteShield. Раскрытие: Я работаю на ByteShield.
Я запутывал код в том же приложении начиная с.Net 1, и это была сильная головная боль с точки зрения обслуживания. Как Вы упомянули, проблемы сериализации можно избежать, но действительно легко сделать ошибку и запутать что-то, что Вы не хотели запутываемый. Легко повредить сборку, или изменить шаблон путаницы и не быть в состоянии открыть старые файлы. Плюс он может быть трудным узнать то, что пошло не так, как надо и где.
Наш выбор был Xenocode и был мной для совершения выбора снова сегодня, я предпочту не запутывать код или использовать Dotfuscator.
Я также использовал SmartAssembly. Я нашел что Реактор Ezrinz.Net намного лучше для меня на .net приложениях. Это запутывает, Моно поддержка, блоки слияний, и это также также имеет очень хороший модуль лицензирования, чтобы создать пробную версию или связать лицензию на конкретную машину (очень легкий реализовать). Цена также очень конкурентоспособна и когда я нуждался в поддержке они где быстро. Eziriz
Только, чтобы быть ясным я - просто custumer, кому нравится продукт и ни в коем случае не связанный с компанией.
У меня не было проблем с Smartassembly.
Необходимо использовать то, что является самым дешевым и известным прежде всего платформой, и прекратить дело. Путаница высокоуровневых языков является тяжелой проблемой, потому что потоки кода операции VM не страдают от двух самых больших проблемных собственных потоков кода операции, сделайте: идентификация функции/метода и искажение регистра.
то, Что необходимо знать об инвертировании байт-кода, - то, что это уже - общепринятая практика для тестеров безопасности, чтобы рассмотреть прямой X86-код и найти уязвимости в нем. В необработанном X86 Вы не можете обязательно даже найти допустимые функции, уже не говоря о дорожке локальная переменная в течение вызова функции. Почти ни при каких обстоятельствах делают инверторы собственного кода имеют доступ к именам функций и именам переменной---, если они не рассматривают код Microsoft, для которого MSFT услужливо предоставляет ту информацию общественности.
"Dotfuscation" работает преимущественно путем скремблирования имен функций и имен переменной. Вероятно, лучше сделать это, чем публикуют код с информацией об уровне отладки, где Отражатель буквально бросает Ваш исходный код. Но что-либо, что Вы делаете вне этого, вероятно, войдет в убывающую доходность.
Я недавно попытался передать вывод по каналу одного свободного obfuscator в другой свободный obfuscator - а именно, CE Dotfuscator и новый Babel obfuscator на CodePlex. Больше деталей на моем блоге .
Что касается сериализации, я переместил тот код в различный DLL и включал это в проект. Я обосновал, что не было никаких секретов там, которые не находятся в XML так или иначе, таким образом, ему не была нужна путаница. Если существует какой-либо серьезный код в тех классах, использование частичных классов в основном блоке должно покрыть его.
В течение прошедших двух дней я экспериментировал с Общественным усовершенствованным Выпуском Dotfuscator (бесплатная загрузка после регистрации основного CE, который прибывает связанный Visual Studio).
я думаю причина, больше людей не использует путаницу, как опция по умолчанию - то, что это - серьезная стычка по сравнению с риском. На меньших тестовых проектах я мог получить запутываемый код, работающий с большим усилием. Развертывание простого проекта через ClickOnce было неприятно, но достижимо после ручного подписания деклараций с волшебником. Единственная проблема состояла в том, что на ошибке отслеживание стека возвратилось запутываемое, и CE не имеет deobfuscator или осветлителя упакованными.
я пытался запутать реальный проект, который является VSTO, базирующимся в Excel, с Виртуальной Наземной интеграцией, большим количеством вызовов веб-сервиса и контейнера МОК и партия отражения. Это было невозможно.
, Если путаница является действительно критическим требованием, необходимо разработать приложение с этим в памяти от запуска, тестируя запутываемые сборки, в то время как Вы прогрессируете. Иначе, если это - довольно сложный проект, Вы собираетесь закончить с серьезной суммой боли.
У нас есть много приложение уровня с asp.net и интерфейсом winform, который также поддерживает дистанционную работу. У меня не было проблем с использованием никакого obfuscator за исключением типа шифрования, который генерирует загрузчик, который может быть проблематичным во всех видах неожиданных путей и просто не стоить того, по-моему. На самом деле мой совет был бы больше вроде, "Стараются не шифровать тип загрузчика obfuscators как эпидемия".:)
, По моему опыту, любой obfuscator будет хорошо работать с любым аспектом .net включая asp.net и дистанционную работу, просто необходимо стать близкими с настройками и изучить, как далеко можно продвинуть его в который области кода. И не торопитесь для попытки инженерного анализа на том, что Вы получаете и видите, как он работает с различными настройками.
Мы использовали несколько за эти годы в наших коммерческих приложениях и обосновались на Специях obfuscator с 9rays.net, потому что цена является правильной, она делает задание, и у них есть хорошая поддержка, хотя нам действительно не была нужна поддержка в годах больше, но быть честным я не думаю, что она действительно имеет значение, какой obfuscator Вы используете, проблемы и кривая обучения являются всеми одинаковыми, если Вы хотите иметь ее работа правильно с дистанционной работой и asp.net.
, Поскольку другие упомянули все, что Вы действительно делаете, эквивалент замка, не пуская в других отношениях честных людей и или делая его тяжелее для простой перекомпиляции приложения.
Лицензирование обычно является ключевой областью для большинства людей, и необходимо определенно использовать некоторую снабженную цифровой подписью систему сертификата для лицензирования так или иначе. Ваша самая большая утрата прибудет из случайного совместного использования лицензий, если Вы не будете иметь в распоряжении умную систему, люди, которые повреждают систему лицензирования, никогда не собирались покупать во-первых.
действительно легко взять это слишком далеко и оказать негативное влияние на Ваших клиентов и Ваш бизнес, сделать то, что просто и разумно, и затем не волнуйтесь об этом.
Я попробовал почти каждый obfuscator на рынке, и SmartAssembly является лучшим, по-моему.
Я использовал smartassembly. В основном Вы выбираете dll, и он возвращает запутываемый. Это, кажется, хорошо работает, и у меня не было проблем до сих пор. Очень, очень простой в использовании.
Если Ваш поиск свободного, Вы могли бы попробовать Выпуск Сообщества DotObfuscator, который идет с Visual Studio или Eazfuscator.NET .
<час>с 29 июня 2012 , Eazfuscator.NET является теперь коммерческим. Последняя бесплатная доступная версия 3.3.
Мы попробовали много obfuscators. Ни один из них не работает над большим клиент-серверным приложением, которое использует дистанционную работу. Проблема состоит в том, что клиент и сервер совместно использует некоторый dlls, и мы не нашли obfuscator, который может обработать его.
Мы попробовали DotFuscator Pro, SmartAssembly, XenoCode, Саламандру и несколько маленьких приложений времени, имена которых выходят из меня.
Откровенно говоря, я - убежденная путаница, большой взлом.
Даже проблемами, которые это решает, является не полностью настоящая проблема. Единственной вещью, которую действительно необходимо защитить, являются строки подключения, коды активации, чувствительные к безопасности подобные вещи. Эта ерунда, что другая компания собирается перепроектировать Вашу целую кодовую базу и создать конкурирующий продукт из него, является чем-то от кошмара параноидального менеджера, не действительности.
Я также использую smartassembly. Однако я не знаю, как это работает на веб-приложение. Однако я хотел бы указать, что, если Ваше приложение использует условно-бесплатную защиту типа, удостоверьтесь, что это не проверяет лицензию с булевым возвратом. это слишком легко к трещине байта. http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx
Мы используем SmartAssembly на нашем клиенте окон. Работает просто великолепно.
Действительно добавляют некоторые дополнительные проблемы также. Распечатывание Ваших имен классов в файлах/исключениях журнала должно быть de-obfuscated. И конечно не может создать класс из его имени. Таким образом, это - хорошая идея смотреть на Ваш клиент и видеть, какие проблемы можно получить путем запутывания.
Я «по колено» в этом сейчас пытаюсь найти хорошее решение. Вот мои впечатления на данный момент.
Xenocode - У меня есть старая лицензия на Xenocode2005, которую я использовал для обфускации моих сборок .net 2.0. Он отлично работал на XP и был достойным решением. Мой текущий проект - .net 3.5, и я использую Vista, Служба поддержки посоветовала мне попробовать, но версия 2005 года даже не работает в Vista (вылетает), поэтому я и теперь вынужден покупать PostBuild2008 по невероятной цене в 1900 долларов. Это может быть хороший инструмент, но я не собираюсь выяснять. Слишком дорого.
Reactor.Net - Это гораздо более привлекательная цена, и он отлично работал с моим автономным исполняемым файлом. Модуль лицензирования тоже был хорош и сэкономил бы мне кучу усилий. К сожалению, в нем отсутствует ключевая функция, а именно возможность исключать данные из обфускации. Это делает невозможным достижение нужного мне результата (объединить несколько сборок вместе, запутать одни, не запутать другие).
SmartAssembly - Я скачал Eval для этого, и он работал безупречно. Я смог добиться всего, чего хотел, и интерфейс был первоклассным. Цена по-прежнему высока.
Dotfuscator Pro - Не удалось найти цену на веб-сайте. В настоящее время ведутся переговоры о получении цитаты. Звучит зловеще.
Confuser - проект с открытым исходным кодом, который работает довольно хорошо (чтобы сбить с толку людей, как следует из названия). https://confuser.codeplex.com/
(добавлено jgauffin)
Примечание: ConfuserEx, как сообщается, "сломан" в соответствии с проблемой № 498 в их репозитории GitHub.
бесплатный способ - использовать dotfuscator из Visual Studio, иначе вам придется пойти и купить обфускатор, например Postbuild ( http://www.xenocode.com/Landing /Obfuscation.aspx[114265ght)
Короткий ответ: вы не можете.
Существуют различные инструменты, которые усложнят чтение вашего кода для кого-то - на некоторые из них указывалось в других ответах
Однако все это затрудняет чтение - они увеличивают количество требуемых усилий, вот и все. Часто этого бывает достаточно, чтобы отпугнуть случайных читателей, но тот, кто полон решимости покопаться в вашем коде, всегда сможет это сделать.
Вот документ от самой Microsoft. Надеюсь, это поможет ... это с 2003 года, но, возможно, все еще актуально.
Все зависит от языка программирования, который вы используете. Прочтите статью: Обфусцированный код
Вы можете использовать «Dotfuscator Community Edition» - он по умолчанию входит в Visual Studio 2008 Professional. Вы можете прочитать об этом по адресу:
http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator. html
"Профессиональная" версия продукта стоит денег, но она лучше.
Вам действительно нужно запутывать ваш код? Обычно в декомпилированном приложении нет ничего плохого, если только оно не используется в целях безопасности. Если вы беспокоитесь о том, что люди «украдут» ваш код, не беспокойтесь; подавляющее большинство людей будут смотреть на ваш код с целью обучения. В любом случае, для .NET не существует полностью эффективной стратегии обфускации - кто-нибудь с достаточными навыками всегда сможет декомпилировать / изменить ваше приложение.
Пробовал демо-версию Eziriz .... Мне понравилось. Но программное обеспечение так и не принесло.
Crypto Obfuscator address all your concerns and scenarios. It :