Як декомпілювати .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.