Jak dekompilować plik .NET EXE do czytelnego kodu źródłowego w języku C #?


259

Kilka lat temu napisałem aplikację C # dla klienta, ale nie mam już kodu źródłowego. Wszystko, co mam, to plik EXE, który wdrożyłem na komputerze klienta. Czy istnieje sposób na wygenerowanie kodu źródłowego C # z EXE?


2
Dobrze. Spójrz tutaj ... Teleriks JustDecompile faktycznie zdekompilował biblioteki DLL, które Red Gates Reflector kompletnie spieprzył ... było wiele problemów z Reflector ... JustDecompile ... jak dotąd bezbłędny ...
— Marc Johnston

1
Używam JustDecompile od dłuższego czasu i jest naprawdę dobry w dekompilacji i pakowaniu plików źródłowych jako gotowy do kompilacji csproject. Jest bardzo aktywny w rozwoju i wydaje się, że nie ma żadnych otwartych problemów w ich repozytorium github.com/telerik/JustDecompileEngine
— David Chelliah

Odpowiedzi:


194

Odbłyśnik i jego dodatek FileDisassembler .

Odbłyśnik pozwoli zobaczyć kod źródłowy. FileDisassembler pozwoli ci przekonwertować go na rozwiązanie VS.


4
Moja kopia Odbłyśnika ma opcję „Eksportuj ...” i nie mam zainstalowanych wtyczek. Tworzy projekt VS z całym kodem źródłowym i zasobami. Dlaczego więc wszyscy sugerują FileDisassembler? To jest lepsze?
— Lucas,

Lucas: Po wyjęciu z pudełka nie widziałem, żeby reflektor mógł to zrobić. FileDisassembler zawsze był jedynym sposobem. To chyba mogło się zmienić w najnowszej historii. Sprawdzę to.
— GEOCHET

OSZCZĘDNOŚĆ ŻYCIA! głupi tyłek TFS usunął mój projekt. Chociaż powiedziałem TFS, aby sam się usunął, ale nie spodziewałem się, że usunie projekt z lokalnego systemu plików. dziękuję mimo wszystko. x
— Christo

Gdzie jest FileDisassembler? : /
— Tom Stickel,

Działa tylko w środowisku .Net. jakieś narzędzie, które działa dla .Net core 3.0 exe?
— Somnath Kadam

144

Gdy Red Gate powiedział, że nie będzie już darmowa wersja .NET Reflector, zacząłem używać ILSpy i Telerik za JustDecompile . Znalazłem, że ILSpy dekompiluje dokładniej niż JustDecompile (który wciąż jest w wersji Beta). Red Gate zmienił swoją decyzję i nadal ma darmową wersję .Net Reflector, ale teraz lubię ILSpy.

Ze strony internetowej ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

ILSpy to przeglądarka i dekompilator zestawu .NET typu open source.

Funkcje ILSpy

  • Przeglądanie zestawu
  • Demontaż IL
  • Dekompilacja do C #
  • Obsługuje lambdas i „zwrot z zysku”
  • Pokazuje dokumentację XML
  • Oszczędzanie zasobów
  • Wyszukaj typy / metody / właściwości (podciąg)
  • Nawigacja typu / metody / właściwości na podstawie hiperłącza
  • Nawigacja typów bazowych / pochodnych
  • Historia nawigacji
  • Dekompilator BAML na XAML
  • Zapisz zespół jako projekt C #
  • Znajdź użycie pola / metody
  • Rozszerzalne za pomocą wtyczek (MEF)

Aktualizacja:

15 kwietnia 2012, ILSpy 2.0 został wydany. Nowe funkcje w porównaniu z wersją 1.0:

  • Listy zgromadzeń
  • Obsługa dekompilacji drzew wyrażeń
  • Wsparcie dla podniesionych operatów na zerowach
  • Dekompiluj do Visual Basic
  • Wyszukaj wiele ciągów znaków oddzielonych spacją (wyszukanie „Menedżera składania” w ILSpy.exe spowoduje odnalezienie AssemblyListManager)
  • Kliknięcie zmiennej lokalnej podświetli wszystkie pozostałe wystąpienia tej zmiennej
  • Ctrl + F może być używany do wyszukiwania w zdekompilowanym widoku kodu

Aktualizacja:

  • ILSpy 2.1 obsługuje dekompilację asynchroniczną / oczekującą

1
Używam 2.2 i obsługuje dekompilację do IL, VB.NET i C #. Uważam to za bardzo przydatne.
— VoteCoffee

1
Wygląda na to, że Telerik jest zainteresowany gromadzeniem wątpliwych informacji z komputera na nim uruchomionego, a ILSpy nie można skompilować ze źródeł. Również binarny ILSpy miesza nazwy zmiennych i umieszcza dziwne znaki w kodzie źródłowym.
— AaA

1
Pamiętaj, że ILSpy zawiera dodatek Visual Studio. W przypadku ILSpy 2.4 dodałem możliwość nawigowania z kodu źródłowego Visual Studio bezpośrednio do zdekompilowanego wyjścia. Niestety pojawiły się najnowsze poprawki, które są teraz połączone z linią główną ILSpy, ale nie wydały wersji 2.4.
— yoyo

Znakomity! Istnieje firma zajmująca się oprogramowaniem, która pobiera od osób 100 funtów za czas, aby korzystały z „specjalnego” narzędzia na serwerze w celu rozwiązania problemów. Udało się uzyskać kopię narzędzia, z którego korzystali podczas połączenia, a następnie bardzo łatwo skorzystało z ILSpy, aby uzyskać hasło odblokowujące narzędzie. Nigdy więcej odrywania klientów!
— user2924019,

ILSpy jest najlepszy
— Pritam

65

Reflector nie jest już ogólnie darmowy, ale oferuje go bezpłatnie programistom open source: http://reflectorblog.red-gate.com/2013/07/open-source/

Ale kilka firm, takich jak DevExtras i JetBrains, stworzyło bezpłatne alternatywy:

DevExtras CodeReflect

JetBrains DotPeek


5
Odbłyśnik kosztuje 35 $. Rozbijam bank, wiem, ale jego wartość jest 10 razy większa.
— StingyJack,

7
Warto dodać Telerik JustDecompile do listy darmowych dekompilatorów zestawów .NET. telerik.com/justdecompile
— Todd

3
@StingyJack: Świetnie, wygląda na to, że cię słyszeli! Teraz jest 10 w cenie 368 USD, jeśli chcesz deasembler VS2012. : /
— DeepSpace101

1
Nie przeciwstawiam się im za zarabianie pieniędzy, ale ILSpy (wspomniany) w odpowiedzi @ Daniela jest tym, czego teraz używam.
— StingyJack,

1
Teraz kosztuje 100 USD za wersję standardową i 200 USD za wersję zintegrowaną z Visual Studios. To cholera stopy inflacji. Chociaż oferują rzeczy za darmo dla programistów open source: reflectorblog.red-gate.com/2013/07/open-source
— VoteCoffee

35

Reflector i dodatek File Disassembler od Denisa Bauera. W rzeczywistości tworzy projekty źródłowe ze złożeń, w których sam Reflector wyświetla tylko zdemontowane źródło.

DODANO: Moim najnowszym faworytem jest dotPeek JetBrains .


Podoba mi się, że dotPeek pozwala na łatwą pracę z całym folderem, ale na dzień dzisiejszy dekompilują się tylko do c #. Większość innych dekompilatorów wykonuje także vb i IL. Obsługuje również tylko do Net 4.5, podczas gdy Telerik obsługuje 4.5.1
— VoteCoffee

więc dotPeek jest całkowicie darmowy lub mają ograniczenia dotyczące wersji płatnej ?. nie widziałem żadnych informacji na ten temat na stronie Jetbrains.
— batmaci

29

Telerik JustDecompile jest bezpłatny i ma funkcję tworzenia projektów z zespołów .NET.


Telerik oferuje możliwość dekompilacji do VB.NET, IL lub C # .NET, które uważam za przydatne. Automatycznie wybiera też szkielet i ma wtyczkę dostępną do usuwania z pamięci. Obsługuje również .NET 4.5.1. Wydaje się całkiem nieźle.
— VoteCoffee

1
Wypróbowałem wszystkie rozwiązania tutaj w tym poście i JustDecompile był jedynym, który działa dla mnie idealnie.
— Alvaro Pereira

24

Dziwi mnie, że nikt nie wspominał o dziwactwie Microsoftu . Może nie jest tak ładny jak ILSpy lub Reflector, ale jest dostarczany z Visual Studio, więc wielu programistów już go ma.

Aby go uruchomić (zakładając, że VS 2013 powinien być podobny dla innych wersji):

  1. Wybierz Start> Wszystkie programy> Visual Studio 2013> Visual Studio Tools.
  2. Kliknij dwukrotnie Wiersz polecenia programisty dla VS2013.
  3. Uruchom „ildasm” z wynikowego wiersza polecenia.
  4. W narzędziu wybierz Plik> Otwórz i otwórz plik wykonywalny lub DLL.

Teraz możesz poruszać się po strukturze DLL. Kliknij dwukrotnie członków klasy, aby zobaczyć IL. Użyj polecenia Plik> Zrzut, aby wyeksportować IL do pliku.


Uważam, że IL DASM jest trochę barbarzyński. Pokazuje drzewo, ale kiedy kliknięcie prawym przyciskiem nic nie robi, jestem szalony. Plus zrzut eksportu do pliku to w zasadzie śmieci. Spójrz na to, jak to nawet zdalnie pomocne?
— Tom Stickel,

4
Nigdy nie twierdziłem, że ildasm jest najlepszą opcją, tylko że jest dostępny i działa. ¯_ (ツ) _ / ¯
— yoyo

Nie, „nie daj się nabrać”.
— yoyo

Byłem naprawdę zaskoczony, że dotPeek nie pozwala mi przeszukać całego Zgromadzenia w poszukiwaniu łańcucha, o którym wiedziałem, że tam jest. ildasm może nie być ładny, ale przynajmniej ma opcję zrzutu, która pomogła mi zlokalizować klasę zawierającą szukany ciąg.
— Gabe Halsmer

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.