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.