2009-10-01 2 views
4

Правильно ли это, что C# может быть спроектирован с обратной стороны? Как легко это сделать? Можем ли мы сказать, что C# недостаточно хорош с точки зрения безопасности? А как насчет C++ по сравнению с C# для декомпиляции?C# - Исполняемые файлы дешифруемы (могут быть инвертированы в обратном порядке)?

+2

Вы можете сказать это, но вы ошибаетесь. –

+0

Это называется Openable Source. –

ответ

12

Это правда!

Посмотрите на один из ваших собственных исполняемых файлов, используя Reflector.

Означает ли это, что C# «недостаточно хорош с точки зрения безопасности»? Нет, это не значит.

Нет ничего плохого в безопасности C#. Вам просто нужно убедиться, что вы не ставите никаких секретов в своих опубликованных исполняемых файлах, если вы не хотите, чтобы мир знал о них. (Это относится практически ко всему языку, а не только к C#. Все исполняемые коды могут быть обратно сконструированы, просто некоторые языки/фреймворки упрощают работу, чем другие.)

+2

Это бесплатно и для меня лучше всего :) – Tarik

+1

См. Http://en.wikipedia.org/wiki/Kerckhoffs%27_principle. – Joey

+1

Реальность не столько «не ставьте секреты в ...», как «нет смысла быть таким параноидальным и защитным, что вы никогда не публикуете или не получаете прибыль». Во всем есть риск - в том числе и вставать с постели по утрам и оставаться в постели все время. Первый обычно платит лучше. – Steve314

1

Да, C# может быть обратным инженером. На самом деле это тривиально легко сделать. Взгляните на рефлектор. Чтобы сделать это сложнее, но не невозможно использовать обфускатор.

Имейте в виду, что приложения, написанные на языке C/C++ или на любом другом языке, могут быть запрограммированы с обратной связью, хотя и не так легко, как непривязанные C# или Java.

+0

Я бы не сказал, что это тривиально легко сделать; вероятно, немного подумал и работал в Reflector, но да, тяжелый характер CIL-метаданных облегчает доступ к почти оригинальному коду с гораздо меньшими усилиями, чем с JVM или собственным кодом. – Joey

+0

Я не говорю, что Reflector тривиально прост в реализации, но использование его для проверки кода .NET, безусловно, является imo. Гораздо проще переделать unobfascated код .NET из двоичных файлов, чем сказать C-код. –

0

Google для «Red Gate Рефлектор» - http://www.red-gate.com/products/reflector/

Если вы хотите, чтобы предотвратить это, то вам нужно обфускатором, или какой-то другой более продвинутую форму защиты.

+0

Обфускатор не будет препятствовать его реверсивному проектированию, но делает его сложнее. – rahul

8

О, дорогой.

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

Этот факт хорошо иллюстрируется трещинами, появляющимися для любой игры или приложения через несколько дней после их выпуска независимо от того, насколько сложно разработчики пытались запутать код. Существуют методы обфускации, но, в конце концов, всегда можно будет перепроектировать машинный код (или код IL в случае .NET). Есть также очень хорошие сборки -> C декомпиляторы там.

Просто признайте тот факт, что ваш код может быть запрограммирован с обратной связью и будет, если кому-то нужен исходный код и он захочет инвестировать некоторое время в него. Разрабатывайте свое программное обеспечение, учитывая это.

+1

Действительно, в принципе любая программа может быть изменена с обратной стороны. Например, в C# и Java это проще, чем с языком, например C, потому что есть декомпиляторы, которые могут переводить байт-код обратно в (более или менее читаемый) исходный код - что намного сложнее с машинным кодом на C или C++. – Jesper

+0

Я видел секретный код для систем лицензионных ключей, застрявших в виде строкового литерала. Не раз :-(«любой, кто знает о команде строк, не требует декомпиляции ....) –

1

Каждая новая версия C# сложнее переделать. Это правда, что когда C# был в 1.0, Reflector практически раскрыл бы ваш исходный код, но теперь мы находимся на уровне 3.0, и если вы используете анонимных делегатов, LINQ, анонимных классов и т. Д., Весь синтаксис высокого уровня компилируется до «немой», MSIL, и нелегко перестроить их обратно к исходному источнику.

2

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

Но, как все говорят, что вы не можете отказаться от его разработки.

1

Любой код, написанный с использованием платформы .NET, может быть легко реконструирован. Вот где понятие запутывания приходит.

запутывания представляет собой метод некоторых инструментов использование, которые принимают на .NET вывод-сборка и пытаются зашифровать строки, управление изменением потока тел методов, переименование переменных, параметров и метода и тем самым затрудняет выполнение причинных хакеров и «декомпилирует» код.

Обфускация не гарантирует полную защиту вашего «проприетарного» кода. Чтобы поддерживать лучшую безопасность вашего кода, просто держите код на своих частных серверах. Важно помнить, что весь код может быть перепроектирован с учетом достаточного времени и настойчивости потенциальным «хакером».

C# аспект безопасности
Если вы чувствуете, у вас есть «чувствительный» код, который вы не хотите, чтобы другие пользователи будут видеть и «расшифровывает», вы должны исследовать развитие этих частей кода в родной среде Win32 (C++ или Delphi) и продолжайте пользоваться преимуществами платформы .NET.

Смежные вопросы