ฉันจะถอดรหัส. 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.