Как декомпилировать .NET EXE в читаемый исходный код С#?

Я написал приложение С# для клиента пару лет назад, но у меня больше нет исходного кода. Все, что у меня есть, это EXE, который я развернул на клиентском ПК. Есть ли способ генерировать исходный код С# из EXE?

Ответ 1

Reflector и его надстройка FileDisassembler.

Отражатель позволит увидеть исходный код. FileDisassembler позволит вам преобразовать его в решение VS.

Ответ 2

Когда Red Gate заявили, что больше не будет бесплатной версии .Net Reflector, я начал использовать ILSpy и Telerik JustDecompile. Я нашел ILSpy более декомпилировать, чем JustDecompile (который все еще находится в бета-версии). Red Gate изменила свое решение и все еще имеет бесплатную версию .Net Reflector, но теперь мне нравится ILSpy.

На веб-сайте ILSpy (http://www.ilspy.net/):

ILSpy - это браузер и декомпилятор с открытым исходным кодом .NET.

Функции ILSpy

  • Сборочный просмотр
  • Разборка МЛР
  • Декомпиляция на С#
  • Поддерживает lambdas и возвращает доход
  • Показывает документацию XML
  • Сохранение ресурсов
  • Поиск типов/методов/свойств (подстрока)
  • Навигация по типу/методу/свойствам на основе гиперссылок
  • Навигация по базам/производным типам.
  • История навигации
  • BAML для декомпилятора XAML
  • Сохранить сборку как проект С#
  • Найти использование поля/метода
  • Расширяемый через плагины (MEF)

Update:

15 апреля 2012 года был выпущен ILSpy 2.0. Новые возможности по сравнению с версией 1.0:

  • Списки сборок
  • Поддержка декомпиляции деревьев выражений
  • Поддержка отмененных операторов по значениям nullable
  • Декомпилировать Visual Basic
  • Поиск нескольких строк, разделенных пробелом (поиск "Менеджер сборки" в ILSpy.exe найдет AssemblyListManager)
  • При нажатии на локальную переменную будут выделены все другие вхождения этой переменной
  • Ctrl + F может использоваться для поиска в режиме декомпилированного кода.

Update:

  • ILSpy 2.1 поддерживает декомпиляцию async/await

Ответ 4

Отражатель и надстройка File Disassembler от Дениса Бауэра. Он фактически создает исходные проекты из сборок, где Reflector сам по себе отображает только разобранный источник.

ADDED: Моим последним фаворитом является JetBrains dotPeek.

Ответ 5

Telerik JustDecompile является бесплатным и имеет функцию для создания проектов из сборников .NET.

Ответ 6

Я удивлен, что никто не упомянул Microsoft ildasm. Это может быть не так хорошо, как ILSpy или Reflector, но он поставляется с Visual Studio, так что многие разработчики уже имеют его.

Чтобы запустить его (при условии, что VS 2013, должен быть аналогичным для других версий):

  • Выберите "Пуск" > "Все программы" > "Visual Studio 2013" > "Инструменты Visual Studio".
  • Дважды щелкните команду "Командная строка разработчика" для VS2013.
  • Запустите "ildasm" из появившейся командной строки.
  • В инструменте выберите "Файл" > "Открыть" и откройте исполняемый файл или DLL.

Теперь вы можете перемещаться по структуре DLL. Дважды щелкните по членам класса, чтобы увидеть IL. Используйте File > Dump для экспорта IL в файл.