Як декомпілювати .NET EXE у читаний вихідний код C #?


259

Я написав заявку на C # для клієнта пару років тому, але у мене більше немає вихідного коду. Все, що у мене є, це EXE, який я розгорнув на комп'ютері клієнта. Чи є спосіб я згенерувати вихідний код C # з EXE?


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

1
Я використовую JustDecompile досить давно, і це дуже добре, щоб декомпілювати і упакувати вихідні файли як готовий до компіляції csproject. Він дійсно активний у розвитку, і, схоже, немає відкритих питань у їхньому репо github.com/telerik/JustDecompileEngine
— David Chelliah

Відповіді:


194

Рефлектор та його надбудова FileDisassembler .

Рефлектор дозволить побачити вихідний код. FileDisassembler дозволить вам перетворити його у рішення VS.


4
У моїй копії Reflector є опція "Експорт ...", і у мене не встановлені додатки. Він створює проект VS з усіма вихідними кодами та ресурсами. То чому всі пропонують FileDisassembler? Так краще?
— Лукас

Лукас: Поза я не бачив рефлектора, здатного це зробити. FileDisassembler завжди був єдиним способом. Це, можливо, змінилося в недавній історії, хоча я думаю. Я це перевірю.
— GEOCHET

ЖИТТЯ Збережемо! тупа попка TFS видалила мій проект. Хоча я і сказав TFS видалити себе, але не сподівався, що він видалить проект із локальної файлової системи. дякую все одно. x
— Крісто

Де 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

  • Перегляд складання
  • Розбирання ІЛ
  • Декомпіляція на 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 #. Я вважаю це дуже корисним.
— VoteCoffee

1
Здається, Telerik зацікавлений у зборі сумнівної інформації з комп'ютера, на якому працює, і ILSpy неможливо зібрати з джерел. Також двійковий код ILSpy змішує імена змінних та додає у вихідний код деякі дивні символи.
— AaA

1
Зауважте, що ILSpy містить надбудову Visual Studio. Для ILSpy 2.4 я додав можливість переміщатися з вашого вихідного коду Visual Studio безпосередньо до декомпільованого виводу. На жаль, були деякі виправні виправлення, які тепер об'єднані в основну лінію ILSpy, але не зробили версію 2.4.
— yoyo

Блискуче! Існує програмна компанія, яка стягує з людей 100 фунтів стерлінгів на час, щоб вони використали "спеціальний" інструмент для вашого вирішення, щоб вирішити проблеми. Вдалося отримати копію інструменту, який вони використовували під час підключення, а потім вдалося дуже просто використовувати ILSpy, щоб отримати пароль для розблокування інструменту. Більше не відірвати клієнтів!
— користувач2924019

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 ціна в $ 368, якщо ви хочете розбирач VS2012. : /
— DeepSpace101

1
Я не тримаю проти них за те, щоб заробляти гроші, але ILSpy (згаданий) у відповіді @ Даніеля - те, що я зараз використовую.
— StingyJack

1
Зараз він коштує 100 доларів для стандартної версії та 200 доларів за версію, яка інтегрується з Visual Studios. Це чорт інфляції. Хоча вони пропонують речі безкоштовно для розробників з відкритим кодом: reflectorblog.red-gate.com/2013/07/open-source
— VoteCoffee

35

Рефлектор та надбудова розбірника файлів від Дениса Бауера. Він фактично виробляє вихідні проекти з збірок, де Reflector самостійно відображає лише розібране джерело.

ДОБАВЛЕНО: Мій останній улюблений - dotPeek JetBrains .


Мені подобається, що dotPeek дозволяє легко працювати з цілою папкою, але на сьогоднішній день вони декомпілюються лише на c #. Більшість інших декомпіляторів також мають vb та IL. Він також підтримує лише до
— версії

тож dotPeek абсолютно безкоштовний або у них є обмеження на платну версію ?. Я не міг побачити будь-яку інформацію на сайті jetbrains щодо цього.
— batmaci

29

Telerik JustDecompile безкоштовний і має можливість створювати проекти з .NET збірок.


Telerik пропонує можливість декомпілювати на VB.NET, IL або C # .NET, які я вважаю корисними. Він також автоматично вибирає рамки і має доступний плагін для деобфускування. Крім того, він підтримує .NET 4.5.1. Здається, досить добре.
— VoteCoffee

1
Я спробував усі рішення тут, на цій посаді, і JustDecompile був єдиним, який ідеально працює для мене.
— Альваро Перейра

24

Я здивований, що ніхто не згадав ілдазм Microsoft . Це може бути не так красиво, як ILSpy або Reflector, але він поставляється з Visual Studio, тому багато розробників вже мають його.

Для його запуску (припустимо, VS 2013 має бути подібним для інших версій):

  1. Виберіть Пуск> Усі програми> Visual Studio 2013> Інструменти Visual Studio.
  2. Двічі клацніть командний рядок для розробника для VS2013.
  3. Запустіть "ildasm" з отриманого командного рядка.
  4. У інструменті виберіть «Файл»> «Відкрити» та відкрийте свій виконуваний файл або DLL.

Тепер ви можете орієнтуватися в структурі DLL. Двічі клацніть на членах класу, щоб побачити ІЛ. Використовуйте Файл> Дамп, щоб експортувати IL у файл.


Я вважаю IL DASM трохи варварською. Він показує дерево, але коли клацання правою кнопкою миші нічого не робить, я вважаю це безумним. Плюс дамп експорту в файл - це в основному сміття. Подивіться на це, як це навіть віддалено корисно?
— Том Стікель

4
Я ніколи не стверджував, що ілдазм був найкращим варіантом там, тільки що він доступний і він працює. ¯_ (ツ) _ / ¯
— yoyo

Ні, 'шахрай ні.
— yoyo

Я був дуже здивований, що dotPeek не дозволить мені шукати всю Асамблею за рядком, про який я знав, що знаходиться там. ildasm може бути не дуже, але принаймні, він має варіант демпінгу, який допоміг мені знайти клас, який містив рядок, який я шукав.
— Гейб Халсмер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.