Làm cách nào để dịch ngược .NET EXE thành mã nguồn C # có thể đọc được?


259

Tôi đã viết một ứng dụng C # cho một khách hàng vài năm trước, nhưng tôi không còn có mã nguồn nữa. Tất cả những gì tôi có là EXE mà tôi đã triển khai trên PC của khách hàng. Có cách nào để tôi có thể tạo mã nguồn C # từ EXE không?


2
Đồng ý. Nhìn đây ... Teleriks JustDecompile thực decompiled của Red Gates Reflector hoàn toàn screwed up ... đã có rất nhiều vấn đề với Reflector ... JustDecompile ... hoàn hảo cho đến nay ... DLL
Marc Johnston

1
Tôi đã sử dụng JustDecompile trong một thời gian khá dài và nó thực sự tốt trong việc dịch ngược và đóng gói các tệp nguồn dưới dạng sẵn sàng để biên dịch csproject. Nó thực sự tích cực trong phát triển và dường như không có vấn đề mở nào trong repo của họ github.com/telerik/JustDecompileEngine
David Chelliah

Câu trả lời:


194

Reflector và bổ trợ FileDisassembler của nó .

Reflector sẽ cho phép xem mã nguồn. FileDisassembler sẽ cho phép bạn chuyển đổi nó thành một giải pháp VS.


4
Bản sao Reflector của tôi có tùy chọn "Xuất ..." và tôi chưa cài đặt trình cắm. Nó tạo ra một dự án VS với tất cả các mã nguồn và tài nguyên. Vậy tại sao mọi người lại gợi ý FileDisassembler? Tốt hơn là?
Lucas

Lucas: Ra khỏi hộp, tôi chưa thấy gương phản xạ có thể làm điều này. FileDisassembler luôn là cách duy nhất. Điều này có thể đã thay đổi trong lịch sử gần đây mặc dù tôi đoán. Tôi sẽ kiểm tra nó.
GEOCHET

CUỘC SỐNG KHÔNG BAO GIỜ! TFS ass ngu ngốc đã xóa dự án của tôi. Mặc dù tôi đã nói với TFS để tự xóa nhưng tôi không hy vọng nó sẽ xóa dự án khỏi hệ thống tệp cục bộ. cảm ơn vì tất cả. x
Christo

FileDisassembler ở đâu? : /
Tom Stickel

Nó chỉ hoạt động cho khung .Net. có công cụ nào hoạt động cho exNet core 3.0 không?
Somnath Kadam

144

Khi Red Gate nói rằng sẽ không còn là một phiên bản miễn phí của Net Reflector, tôi bắt đầu sử dụng ILSpy và Telerik của JustDecompile . Tôi đã tìm thấy ILSpy để dịch ngược chính xác hơn JustDecompile (vẫn còn trong bản Beta). Red Gate đã thay đổi quyết định của họ và vẫn có phiên bản .Net Reflector miễn phí, nhưng bây giờ tôi thích ILSpy.

Từ trang web ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

ILSpy là trình duyệt và dịch ngược biên dịch mã nguồn mở .NET.

Tính năng ILSpy

  • Duyệt hội
  • Tháo gỡ IL
  • Dịch ngược sang C #
  • Hỗ trợ lambdas và 'lợi nhuận'
  • Hiển thị tài liệu XML
  • Tiết kiệm tài nguyên
  • Tìm kiếm các loại / phương thức / thuộc tính (chuỗi con)
  • Điều hướng thuộc tính / phương thức / thuộc tính siêu liên kết
  • Điều hướng loại cơ sở / phái sinh
  • Lịch sử điều hướng
  • Trình dịch ngược BAML sang XAML
  • Lưu hội như dự án C #
  • Tìm cách sử dụng trường / phương thức
  • Mở rộng thông qua các plugin (MEF)

Cập nhật:

Ngày 15 tháng 4 năm 2012, ILSpy 2.0 đã được phát hành. Các tính năng mới so với phiên bản 1.0:

  • Danh sách hội
  • Hỗ trợ dịch ngược cây Biểu hiện
  • Hỗ trợ cho các toán tử nâng trên nullables
  • Dịch ngược sang Visual Basic
  • Tìm kiếm nhiều chuỗi được phân tách bằng dấu cách (tìm kiếm "Trình quản lý hội" trong ILSpy.exe sẽ tìm thấy AssociationListManager)
  • Nhấp vào một biến cục bộ sẽ làm nổi bật tất cả các lần xuất hiện khác của biến đó
  • Ctrl + F có thể được sử dụng để tìm kiếm trong chế độ xem mã dịch ngược

Cập nhật:

  • ILSpy 2.1 hỗ trợ async / đang chờ dịch ngược

1
Tôi đang sử dụng 2.2 và nó hỗ trợ dịch ngược sang IL, VB.NET và C #. Tôi thấy điều này rất hữu ích.
VoteCoffee

1
Có vẻ như Telerik quan tâm đến việc thu thập thông tin nghi vấn từ máy tính chạy trên đó và ILSpy không thể được biên dịch từ các nguồn. Ngoài ra nhị phân ILSpy trộn lẫn các tên biến và đặt một số ký tự lạ trong mã nguồn.
AaA

1
Lưu ý rằng ILSpy bao gồm bổ trợ Visual Studio. Đối với ILSpy 2.4, tôi đã thêm khả năng điều hướng từ mã nguồn Visual Studio trực tiếp đến đầu ra được dịch ngược. Thật không may, có một số bản sửa lỗi bị phá vỡ hiện đã được hợp nhất với dòng chính ILSpy nhưng không thực hiện bản phát hành 2.4.
yoyo

Xuất sắc! Có một công ty phần mềm tính phí cho mọi người 100 bảng một lần để họ sử dụng công cụ "đặc biệt" trên máy chủ của bạn để khắc phục sự cố. Quản lý để có được một bản sao của công cụ họ đã sử dụng trong khi kết nối và sau đó quản lý để sử dụng ILSpy rất dễ dàng để lấy mật khẩu mở khóa công cụ. Không còn xé toạc khách hàng!
dùng2924019

ILSpy là người giỏi nhất
Pritam

65

Reflector nói chung không còn miễn phí nữa, nhưng họ cung cấp miễn phí cho các nhà phát triển nguồn mở: http://reflectorblog.red-gate.com/2013/07/open-source/

Nhưng một vài công ty như DevExtras và JetBrains đã tạo ra các lựa chọn thay thế miễn phí:

DevExtras CodeReflect

JetBrains DotPeek


5
Phản xạ giống như 35 $. Phá vỡ ngân hàng tôi biết, nhưng giá trị của nó gấp 10 lần.
StingyJack

7
Thật đáng để thêm Telerik JustDecompile vào danh sách các trình dịch ngược lắp ráp .NET miễn phí. telerik.com/justdecompile
Todd

3
@StingyJack: Tuyệt vời, có vẻ như họ đã nghe thấy bạn! Bây giờ thực sự là 10 mức giá $ 368 nếu bạn muốn trình phân tách VS2012. : /
DeepSpace101

1
Tôi không chống lại họ để kiếm tiền, nhưng ILSpy (được đề cập) trong câu trả lời của @ Daniel là những gì tôi đang sử dụng.
StingyJack

1
Hiện tại nó có giá 100 đô la cho phiên bản tiêu chuẩn và 200 đô la cho phiên bản tích hợp với Visual Studios. Đó là một tỷ lệ lạm phát. Mặc dù họ làm lời đề nghị thứ miễn phí cho các nhà phát triển mã nguồn mở: reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee

35

Reflector và add-in File Disassembler từ Denis Bauer. Nó thực sự tạo ra các dự án nguồn từ các hội đồng, trong đó Reflector tự nó chỉ hiển thị nguồn được tháo rời.

THÊM: Yêu thích mới nhất của tôi là dotPeek của JetBrains .


Tôi thích rằng dotPeek cho phép làm việc với toàn bộ thư mục một cách dễ dàng, nhưng cho đến ngày nay, chúng chỉ dịch ngược thành c #. Hầu hết các trình dịch ngược khác cũng làm vb và IL. Nó cũng chỉ hỗ trợ tối đa Net 4.5 trong khi Telerik hỗ trợ 4.5.1
VoteCoffee

vì vậy dotPeek hoàn toàn miễn phí hoặc họ có những hạn chế đối với phiên bản trả phí?. tôi không thể thấy bất kỳ thông tin nào trên trang web jetbrains liên quan đến nó.
batmaci

29

Telerik JustDecompile là miễn phí và có một tính năng để tạo các dự án từ các hội đồng .NET.


Telerik cung cấp khả năng dịch ngược sang VB.NET, IL hoặc C # .NET mà tôi thấy hữu ích. Nó cũng tự động chọn khung và có sẵn một trình cắm để khử rung. Ngoài ra, nó hỗ trợ .NET 4.5.1. Có vẻ khá tốt.
VoteCoffee

1
Tôi đã thử tất cả các giải pháp ở đây trong bài đăng này và JustDecompile là giải pháp duy nhất phù hợp với tôi.
Alvaro Pereira

24

Tôi ngạc nhiên không ai nhắc đến ildasm của Microsoft . Nó có thể không đẹp như ILSpy hoặc Reflector, nhưng nó đi kèm với Visual Studio nên nhiều nhà phát triển đã có nó.

Để chạy nó (giả sử VS 2013, phải giống với các phiên bản khác):

  1. Chọn Bắt đầu> Tất cả chương trình> Visual Studio 2013> Công cụ Visual Studio.
  2. Nhấp đúp vào Dấu nhắc lệnh dành cho nhà phát triển cho VS2013.
  3. Chạy "ildasm" từ dấu nhắc lệnh kết quả.
  4. Trong công cụ, chọn Tệp> Mở và mở tệp thực thi hoặc DLL của bạn.

Bây giờ bạn có thể điều hướng cấu trúc DLL. Nhấp đúp chuột vào các thành viên trong lớp để xem IL. Sử dụng Tệp> Kết xuất để xuất IL thành tệp.


Tôi thấy IL DASM hơi dã man. Nó cho thấy cây, nhưng khi nhấp chuột phải không làm gì tôi thấy điên rồ. Cộng với kết xuất của tệp xuất thành tệp về cơ bản là rác. Nhìn vào nó, làm thế nào mà thậm chí từ xa hữu ích?
Tom Stickel

4
Tôi chưa bao giờ tuyên bố ildasm là lựa chọn tốt nhất ngoài kia, chỉ có điều nó có sẵn và nó hoạt động. _ (ツ) _ / ¯
yoyo

Không, 'không sợ.
yoyo

Tôi thực sự ngạc nhiên khi dotPeek sẽ không cho phép tôi tìm kiếm toàn bộ hội cho một chuỗi mà tôi biết là ở đó. ildasm có thể không đẹp nhưng ít nhất nó có một tùy chọn kết xuất giúp tôi xác định vị trí lớp chứa chuỗi mà tôi đang tìm kiếm.
Gabe Halsmer

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.