ฉันจะถอดรหัส. NET EXE ให้เป็นซอร์สโค้ด C # ที่อ่านได้ได้อย่างไร


259

ฉันเขียนแอปพลิเคชัน C # สำหรับลูกค้าเมื่อสองสามปีก่อน แต่ฉันไม่มีซอร์สโค้ดอีกต่อไป ทั้งหมดที่ฉันมีคือ EXE ที่ฉันปรับใช้บนพีซีของลูกค้า มีวิธีที่ฉันสามารถสร้างซอร์สโค้ด C # จาก EXE หรือไม่


2
ตกลง. ดูที่นี่ ... Teleriks JustDecompile แยกส่วน DLL จริง ๆ ที่ Red Gates Reflector ทำผิดพลาดอย่างสมบูรณ์ ... มีปัญหามากมายเกี่ยวกับ Reflector ... JustDecompile ... ไร้ที่ติจนถึง ...
Marc Johnston

1
ฉันใช้ JustDecompile มานานแล้วและมันก็ดีในการถอดรหัสและจัดทำซอร์สไฟล์ให้พร้อมที่จะคอมไพล์ csproject มันใช้งานได้จริงในการพัฒนาและดูเหมือนจะไม่มีปัญหาที่เปิดอยู่ใน repo github.com/telerik/JustDecompileEngine
David Chelliah

คำตอบ:


194

Reflectorและ Add-in ของFileDisassembler FileDisassembler

ตัวสะท้อนแสงจะอนุญาตให้เห็นซอร์สโค้ด FileDisassembler จะช่วยให้คุณแปลงเป็นโซลูชัน VS


4
สำเนาของตัวสะท้อนสัญญาณของฉันมีตัวเลือก "ส่งออก ... " และฉันไม่ได้ติดตั้งปลั๊กอิน มันสร้างโครงการ VS ที่มีซอร์สโค้ดและทรัพยากรทั้งหมด เหตุใดทุกคนจึงแนะนำ FileDisassembler มันจะดีกว่า
ลูคัส

Lucas: ฉันไม่เห็นตัวสะท้อนแสงสามารถทำสิ่งนี้ได้นอกกรอบ FileDisassembler เป็นหนทางเดียวเสมอ สิ่งนี้อาจมีการเปลี่ยนแปลงในประวัติศาสตร์ที่ผ่านมาแม้ว่าฉันเดา ฉันจะตรวจสอบมันออกมา.
GEOCHET

ประหยัดชีวิต! dumb ass TFS ลบโครงการของฉัน แม้ว่าฉันจะบอกให้ TFS ลบตัวเอง แต่ไม่ได้คาดหวังให้ลบโครงการออกจากระบบไฟล์โลคัล ขอบคุณเหมือนกันทั้งหมด x
Christo

FileDisassembler อยู่ที่ไหน : /
Tom Stickel

มันทำงานได้กับ. Net framework เท่านั้น เครื่องมือใดที่ใช้งานกับ. Net core 3.0 exe
Somnath Kadam

144

เมื่อ Red Gate กล่าวว่าจะไม่มี. Net Reflector รุ่นฟรีอีกต่อไปฉันเริ่มใช้ILSpyและJustDecompileของ Telerik JustDecompileฉันพบ ILSpy ที่จะแปลความถูกต้องมากกว่า JustDecompile (ซึ่งยังอยู่ในรุ่นเบต้า) Red Gate เปลี่ยนการตัดสินใจของพวกเขาและยังมี. Net Reflector รุ่นฟรี แต่ตอนนี้ฉันชอบ ILSpy

จากเว็บไซต์ ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

ILSpyเป็นเบราว์เซอร์ชุดประกอบ. NET แบบโอเพนซอร์สและตัวถอดรหัส

คุณสมบัติของ ILSpy

  • การเรียกดูการชุมนุม
  • การถอดชิ้นส่วน IL
  • การแยกส่วนเป็น C #
  • รองรับ lambdas และ 'return return'
  • แสดงเอกสาร XML
  • การประหยัดทรัพยากร
  • ค้นหาประเภท / วิธี / คุณสมบัติ (ซับสตริง)
  • การนำทางประเภท / วิธี / คุณสมบัติตามไฮเปอร์ลิงก์
  • การนำทางประเภทฐาน / ที่ได้รับ
  • ประวัติการนำทาง
  • BAML ถึง XAML decompiler
  • บันทึกแอสเซมบลีเป็นโครงการ C #
  • ค้นหาการใช้งานของฟิลด์ / วิธี
  • สามารถขยายได้ผ่านทางปลั๊กอิน (MEF)

ปรับปรุง:

15 เมษายน 2012, ILSpy 2.0 เปิดตัว คุณสมบัติใหม่เมื่อเทียบกับรุ่น 1.0:

  • รายการประกอบ
  • สนับสนุนการแยกต้นไม้ Expression
  • การสนับสนุนสำหรับผู้ประกอบการยกใน nullables
  • ถอดรหัสเป็น Visual Basic
  • ค้นหาสตริงจำนวนมากคั่นด้วยช่องว่าง (ค้นหา "Assembly manager" ใน ILSpy.exe จะค้นหา AssemblyListManager)
  • คลิกที่ตัวแปรท้องถิ่นจะเน้นที่เกิดขึ้นอื่น ๆ ของตัวแปรนั้น
  • Ctrl + F สามารถใช้เพื่อค้นหาภายในมุมมองโค้ดที่ถอดรหัสแล้ว

ปรับปรุง:

  • ILSpy 2.1 รองรับ async / กำลังรอการถอดรหัส

1
ฉันใช้ 2.2 และสนับสนุนการถอดรหัสเป็น IL, VB.NET และ C # ฉันพบว่ามันมีประโยชน์มาก
VoteCoffee

1
ดูเหมือนว่า Telerik สนใจที่จะรวบรวมข้อมูลที่น่าสงสัยจากคอมพิวเตอร์ที่ใช้งานอยู่และ ILSpy ไม่สามารถรวบรวมจากแหล่งที่มาได้ นอกจากนี้ ILSpy ไบนารีผสมชื่อตัวแปรและทำให้ตัวละครแปลก ๆ ในซอร์สโค้ด
AaA

1
โปรดทราบว่า ILSpy มี Add-in ของ Visual Studio สำหรับ ILSpy 2.4 ฉันเพิ่มความสามารถในการนำทางจากซอร์สโค้ด Visual Studio ของคุณโดยตรงไปยังเอาต์พุตที่ถอดรหัสแล้ว น่าเสียดายที่มีการแก้ไขล่าสุดที่รวมกับการฉีด ILSpy แต่ไม่ได้ทำการเผยแพร่ 2.4
yoyo

ยอดเยี่ยม! มี บริษัท ซอฟต์แวร์ที่เรียกเก็บเงินจากผู้ใช้£ 100 ต่อครั้งเพื่อให้พวกเขาใช้เครื่องมือ "พิเศษ" ในเซิร์ฟเวอร์ของคุณเพื่อแก้ไขปัญหา จัดการเพื่อรับสำเนาของเครื่องมือที่ใช้ขณะเชื่อมต่อจากนั้นจัดการใช้ ILSpy ได้อย่างง่ายดายเพื่อรับรหัสปลดล็อคเครื่องมือ ไม่มีการริปลูกค้าอีกต่อไป!
user2924019

ILSpy ดีที่สุด
Pritam

65

Reflector นั้นไม่มีให้บริการฟรีอีกต่อไป แต่พวกเขาให้บริการฟรีสำหรับนักพัฒนาโอเพ่นซอร์ส: http://reflectorblog.red-gate.com/2013/07/open-source/

แต่ บริษัท บางแห่งเช่น DevExtras และ JetBrains ได้สร้างทางเลือกฟรี:

DevExtras CodeReflect

JetBrains DotPeek


5
Reflector นั้นมีราคา 35 $ ฉันรู้ว่าธนาคารแตก แต่มันมีค่า 10 เท่า
StingyJack

7
มันคุ้มค่าที่จะเพิ่ม Telerik JustDecompile ให้กับรายการของแอสเซมบลีตัวถอดรหัส. NET ฟรี telerik.com/justdecompile
ทอดด์

3
@StingyJack: เยี่ยมมากดูเหมือนพวกเขาจะได้ยินคุณ! ตอนนี้เป็นจริงราคา 10 $ 368 ถ้าคุณต้องการถอดแยกชิ้นส่วน VS2012 : /
DeepSpace101

1
ฉันไม่จับพวกเขาเพื่อทำเงิน แต่ ILSpy (พูดถึง) ในคำตอบของ @ Daniel คือสิ่งที่ฉันใช้อยู่ตอนนี้
StingyJack

1
ตอนนี้มีค่าใช้จ่าย $ 100 สำหรับรุ่นมาตรฐานและ $ 200 สำหรับรุ่นที่รวมเข้ากับ Visual Studios นั่นคืออัตราเงินเฟ้อที่สูงขึ้น แม้ว่าพวกเขาจะนำเสนอสิ่งต่าง ๆ สำหรับนักพัฒนาซอฟต์แวร์โอเพนซอร์สฟรี: reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee

35

ตัวสะท้อนสัญญาณและAdd-in ตัวแยกส่วนไฟล์จาก Denis Bauer มันผลิตโครงการต้นฉบับจากชุดประกอบที่ตัวสะท้อนแสงของตัวเองแสดงเฉพาะแหล่งที่แยกส่วน

เพิ่ม: ชื่นชอบล่าสุดของฉันคือ JetBrains' dotPeek


ฉันชอบ dotPeek ที่อนุญาตให้ทำงานกับโฟลเดอร์ทั้งหมดได้อย่างง่ายดาย แต่ ณ วันนี้พวกเขาเพียงถอดรหัสให้เป็น c # decompilers อื่น ๆ ส่วนใหญ่ก็ทำ vb และ IL นอกจากนี้ยังรองรับ Net ได้สูงสุด 4.5 ในขณะที่ Telerik รองรับ 4.5.1
VoteCoffee

ดังนั้น dotPeek นั้นให้บริการฟรีหรือมีข้อ จำกัด สำหรับรุ่นที่ต้องชำระเงิน ฉันไม่สามารถดูข้อมูลใด ๆ ในเว็บไซต์ของ jetbrains เกี่ยวกับมัน
batmaci

29

Telerik JustDecompile ให้บริการฟรีและมีคุณสมบัติในการสร้างโครงการจากชุดประกอบ. NET


Telerik นำเสนอความสามารถในการถอดรหัสเพื่อ VB.NET, IL หรือ C # .NET ซึ่งฉันพบว่ามีประโยชน์ นอกจากนี้ยังเลือกเฟรมเวิร์กโดยอัตโนมัติและมีปลั๊กอินสำหรับ deobfuscicating นอกจากนี้ยังรองรับ. NET 4.5.1 ดูเหมือนว่าค่อนข้างดี
VoteCoffee

1
ฉันลองวิธีแก้ปัญหาทั้งหมดที่นี่ในโพสต์นี้และ JustDecompile เป็นหนึ่งเดียวที่ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน
Alvaro Pereira

24

ฉันประหลาดใจที่ไม่มีใครพูดถึงildasmของ Microsoft ildasmมันอาจจะไม่สวยเท่า ILSpy หรือ Reflector แต่มันมาพร้อมกับ Visual Studio นักพัฒนาจำนวนมากมีอยู่แล้ว

หากต้องการเรียกใช้ (สมมติว่า VS 2013 ควรคล้ายกับเวอร์ชันอื่น):

  1. เลือกเริ่ม> โปรแกรมทั้งหมด> Visual Studio 2013> เครื่องมือ Visual Studio
  2. ดับเบิลคลิกที่พร้อมรับคำสั่งสำหรับนักพัฒนาซอฟต์แวร์สำหรับ VS2013
  3. เรียกใช้ "ildasm" จากพรอมต์คำสั่งที่ได้
  4. ในเครื่องมือเลือกไฟล์> เปิดและเปิดไฟล์ปฏิบัติการหรือ DLL ของคุณ

ตอนนี้คุณสามารถนำทางโครงสร้าง DLL ดับเบิลคลิกที่สมาชิกชั้นเรียนเพื่อดู IL ใช้ไฟล์> Dump เพื่อส่งออก IL เป็นไฟล์


ฉันพบว่า IL DASM เป็นป่าเถื่อนเล็กน้อย มันแสดงให้เห็นต้นไม้ แต่เมื่อคลิกขวาจะไม่ทำอะไรเลยที่ฉันพบว่าบ้า บวกกับการถ่ายโอนข้อมูลการส่งออกไปยังไฟล์เป็นขยะโดยทั่วไป ดูสิว่ามันมีประโยชน์จากระยะไกลอย่างไร?
Tom Stickel

4
ฉันไม่เคยอ้างว่า ildasm เป็นตัวเลือกที่ดีที่สุดที่นั่นมีให้ใช้งานได้เท่านั้น ¯_ (ツ) _ / ¯
yoyo

ไม่กลัวเลย
yoyo

ฉันประหลาดใจจริงๆที่ dotPeek จะไม่ให้ฉันค้นหาสายทั้งหมดที่ฉันรู้ว่าอยู่ในนั้น ildasm อาจไม่สวย แต่อย่างน้อยก็มีตัวเลือกการถ่ายโอนข้อมูลที่ช่วยให้ฉันค้นหาคลาสที่มีสตริงที่ฉันกำลังมองหา
Gabe Halsmer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.