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


259

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


2
Хорошо. Посмотрите здесь ... Teleriks JustDecompile фактически декомпилировал DLL, которые Red Gates Reflector полностью испортил ... было много проблем с Reflector ... JustDecompile ... пока безупречно ...
Марк Джонстон

1
Я использую JustDecompile довольно долгое время, и он действительно хорош в декомпиляции и упаковке исходных файлов как готовый к компиляции csproject. Он действительно активен в разработке, и в его
репозитории,

Ответы:


194

Отражатель и его надстройка FileDisassembler .

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


4
В моей копии Reflector есть опция «Экспорт ...», и у меня не установлены плагины. Он создает проект VS со всем исходным кодом и ресурсами. Так почему все предлагают FileDisassembler? Лучше?
Лукас

Лукас: Из коробки я не видел отражателя, способного сделать это. FileDisassembler всегда был единственным способом. Возможно, это изменилось в недавней истории, хотя я думаю. Я это проверю.
GEOCHET

ЭКОНОМИЯ ЖИЗНИ! тупой зад TFS удалил мой проект. Хотя я сказал TFS удалить себя, но не ожидал, что он удалит проект из локальной файловой системы. спасибо все равно. х
Кристо

Где находится FileDisassembler? : /
Том Стиккель

Это работает только для .Net Framework. любой инструмент, который работает для .Net core 3.0 exe?
Сомнат Кадам

144

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

С веб-сайта ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

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

Особенности ILSpy

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

Обновить:

15 апреля 2012 года вышел ILSpy 2.0. Новые функции по сравнению с версией 1.0:

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

Обновить:

  • ILSpy 2.1 поддерживает асинхронную / ожидающую декомпиляцию

1
Я использую 2.2, и он поддерживает декомпиляцию в IL, VB.NET и C #. Я нашел это очень полезным.
Голосуйте за кофе

1
Кажется, Telerik заинтересован в сборе сомнительной информации с компьютера, на котором он работает, и ILSpy не может быть скомпилирован из источников. Также двоичный файл ILSpy смешивает имена переменных и помещает некоторые странные символы в исходный код.
AaA

1
Обратите внимание, что ILSpy включает надстройку Visual Studio. Для ILSpy 2.4 я добавил возможность перехода от исходного кода Visual Studio непосредственно к декомпилированному выводу. К сожалению, было несколько последних исправлений, которые теперь объединены с основной веткой ILSpy, но не сделали релиз 2.4.
Yoyo

Brilliant! Есть софтверная компания, которая платит людям 100 фунтов стерлингов за то, чтобы они использовали «специальный» инструмент на вашем сервере для решения проблем. Удалось получить копию инструмента, который они использовали при подключении, а затем очень легко использовал ILSpy, чтобы получить пароль разблокировки инструмента. Нет больше срывать клиентов!
user2924019

ILSpy лучший один
Pritam

65

Reflector больше не является бесплатным в целом, но они предлагают его бесплатно для разработчиков с открытым исходным кодом: http://reflectorblog.red-gate.com/2013/07/open-source/

Но несколько компаний, таких как DevExtras и JetBrains, создали бесплатные альтернативы:

DevExtras CodeReflect

JetBrains DotPeek


5
Отражатель вроде 35 $. Взломать банк я знаю, но это стоит в 10 раз больше.
StingyJack

7
Также стоит добавить Telerik JustDecompile в список бесплатных декомпиляторов сборок .NET. telerik.com/justdecompile
Тодд

3
@StingyJack: Отлично, похоже, они слышали тебя! Сейчас на самом деле цена 10 долларов, если вы хотите дизассемблер VS2012. : /
DeepSpace101

1
Я не против того, чтобы они зарабатывали деньги, но ILSpy (упомянутый) в ответе @ Daniel - это то, что я использую сейчас.
StingyJack

1
Теперь он стоит 100 долларов за стандартную версию и 200 долларов за версию, которая интегрируется с Visual Studios. Это чертовски уровень инфляции. Несмотря на то, что они предлагают вещи бесплатно для разработчиков с открытым исходным кодом: reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee

35

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

ДОБАВЛЕНО: Мой последний фаворит - это dotPeek JetBrains .


Мне нравится, что dotPeek позволяет легко работать со всей папкой, но на сегодняшний день они декомпилируются только в c #. Большинство других декомпиляторов также делают VB и IL. Он также поддерживает только до Net 4.5, тогда как Telerik поддерживает 4.5.1
VoteCoffee,

так dotPeek абсолютно бесплатен или у них есть ограничения для платной версии? Я не мог видеть какую-либо информацию на сайте Jetbrains относительно этого.
Batmaci

29

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


Telerik предлагает возможность декомпиляции в VB.NET, IL или C # .NET, что мне показалось полезным. Он также автоматически выбирает фреймворк и имеет плагин, доступный для деобфускацирования. Также поддерживается .NET 4.5.1. Кажется довольно хорошо.
Проголосуй за кофе

1
Я попробовал все решения здесь в этом посте, и JustDecompile был единственным, который идеально подходит для меня.
Альваро Перейра

24

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

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

  1. Выберите Пуск> Все программы> Visual Studio 2013> Инструменты Visual Studio.
  2. Дважды щелкните командную строку разработчика для VS2013.
  3. Запустите «ildasm» из полученной командной строки.
  4. В инструменте выберите «Файл»> «Открыть» и откройте исполняемый файл или DLL.

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


Я считаю, что IL DASM немного варварский. Это показывает дерево, но когда щелчок правой кнопкой мыши ничего не делает, я нахожу это безумным. Плюс дамп экспорта в файл в основном мусор. Посмотрите на это, как это даже отдаленно полезно?
Том Стиккель

4
Я никогда не утверждал, что ildasm - лучший вариант, только то, что он доступен и работает. ¯_ (ツ) _ / ¯
йо

Нет, не бред.
йо

Я был очень удивлен, что dotPeek не позволил мне искать во всей Ассамблее строку, которая, как я знал, была там. ildasm может быть не очень красивым, но, по крайней мере, у него есть опция dump, которая помогла мне найти класс, содержащий строку, которую я искал.
Гейб Хэлсмер

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.