วิธีการทำ Decompiler หรือ Disassembler จาก .NET EXE เป็น Source Code

วันนี้เรามาเรียนรู้วิธีการ Decompiler หรือการ Disassembler .NET EXE ไปเป็น Source code กันครับ ก่อนอื่นเลยต้องบอกก่อนเลยนะครับว่าบทความนี้ทำขึ้นเพื่อการเรียนรู้และทำความเข้าใจการทำงานของ .NET Framework เท่านั่นนะครับไม่ได้มีเจตนาทางด้านมืดแต่อย่างใด :-)

ก่อนอื่นเลยเราต้องมาเรียนรู้การทำงานตั้งแต่การ Compile source code ไปเป็น MSIL (Microsoft Intermediate Language) และเป็น Native Code ในที่สุดก่อนนะครับ เรามาเริ่มกันเลยครับ


โดยปกติแล้วเวลาเราเขียนโปรแกรมแล้วทำการ Compile นั่นตัว Compiler จะทำการ Compile ไฟล์ .cs ของเราไปเป็น MSIL Code หรือภาษากลางที่ตัว .NET Framework เข้าใจก่อนครับไม่ใช่ทำเป็น EXE โดยตรงเลยอย่างภาษา C\C++ นะครับ

เมื่อเราได้ MSIL มาแล้วเราถึงจะเอาตัว MSIL ที่เราได้ไปรันโดยผ่านตัว CLR (Common Language Runtime) หรือว่า .NET Framework นั่นเองโดยตัว CLR จะทำหน้าที่ในการแปลงตัว MSIL ไปเป็น Native Code หรือว่าภาษาเครื่องนั่นเองครับ โปรแกรมแกรมของเราจึงจะทำงานได้หรือพูดง่ายๆ ก็จะได้ประมาณนี้นะครับ

C# Code -> Compiler -> MSIL Code -> CLR -> Native Code

เอาละครับเรารู้หลักการทำงานเบื้องต้นกันไปแล้วทีนี้เรามาดูวิธีการ Decompiler กันดีกว่าครับ เริ่่มแรกเลยเราต้องสร้างโปรแกรมเพื่อให้ได้ EXE ที่เราจะเอามาทดสอบก่อนเลยครับ

ตัวอย่างแรกผมจะใช้โปรแกรม Hello world ในการทดสอบนะครับ

จากนั่นทำการ Compile โปรแกรมของเรานะครับเพื่อให้ได้ EXE มาโปนแกรม EXE เราจะอยู่ใน HelloWorld\bin\Debug นะครับ

เมื่อเราได้ EXE มาเละทีนี้เราก็มาดาวโหลดโปรแกรมที่เราจะมาใช้ในการทำ Decompiler ก่อนนะครับที่นี้ http://ilspy.net/ โปรแกรมชื่อว่า ILSpy เมื่อดาวโหลดมาเสร็จก็แตกซิปแล้วจะมีไฟล์ ILSpy.exe ให้รันโปรแกรมเลยครับ



จากนั่นให้ทำการ File -> Open แล้วไปที่ EXE ของเราเลยนะครับ จากนั่นให้เราคลิก Main ฟังก์ชั่นที่เราได้เขียนโปรแกรมมานะครับ


ทางด้านขวามือเราก็จะเห็น Source code ของ EXE ตัวนั่นแล้วละครับ ทีนี้เราจะมาลองยากขึ้นนะครับโดยการลอง Decompiler โปรแกรมที่มีความซับซ้อนเพิ่มมากขึ้นตามนี้


เมื่อเราใช้โปรแกรม ILSpy จะได้ดังนี้


เห็นมั้ยครับเพียงเท่านี้เราก็สามารถจะทำการ Decompiler หรือ Disassembler ได้แล้วละครับ