แอปพลิเคชันที่ทําให้งงงวยที่สร้างขึ้นโดยใช้ dotfuscator (เวอร์ชัน Visaul Studio 2022)

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สรุป

แอปพลิเคชันที่ใช้ชุดเฟรมเวิร์ก .NET ถูกสร้างขึ้นในสิ่งที่เรียกว่าภาษากลางทั่วไป ดังนั้นจึงสามารถอ่านได้ในรูปแบบที่ใกล้เคียงกับซอร์สโค้ดต้นฉบับโดยใช้เครื่องมือถอดแยกชิ้นส่วนและสิ่งที่คล้ายกัน ส่วนนี้อธิบายวิธีการทําให้สับสนคลาสและชื่อเมธอดเป็นรูปแบบที่ไม่สามารถอ่านได้ง่ายโดยใช้ Dotfuscator รุ่นฟรี ซึ่งเป็นเครื่องมือสร้างความสับสนที่มาพร้อมกับ Visual Studio

มีการอธิบายโดยใช้ Visual Studio 2022 แต่ยังสามารถใช้ใน Dotfuscator เวอร์ชันอื่นได้

สภาพแวดล้อมการทํางาน

วิชวลสตูดิโอ
  • วิชวลสตูดิโอ 2022

เกี่ยวกับดอทฟัสเซเตอร์

Dotfuscator เป็นเครื่องมือที่ทําให้สับสนที่ทําให้ซอร์สโค้ดอ่านยากเมื่อถอดประกอบสําหรับแอปพลิเคชันที่เขียนด้วยเฟรมเวิร์กตระกูล .NET (ต่อไปนี้จะเรียกว่า .NET) Dotfuscator มาพร้อมกับ Visual Studio ฟรีและมีค่าธรรมเนียม

รุ่นฟรีจะไม่พร้อมใช้งานเว้นแต่คุณลักษณะหลายอย่างของบริษัทจะถูกจํากัด หรือ Visual Studio เริ่มทํางาน แต่ทุกคนสามารถใช้งานได้ตราบใดที่มีการติดตั้ง Visual Studio ไว้ เวอร์ชันที่ต้องชําระเงินมีคุณสมบัติการทําให้งวยที่ทรงพลังมากมายที่ไม่พบในเวอร์ชันฟรี แต่มีให้ในราคาที่ยากสําหรับประชาชนทั่วไปที่จะจ่ายได้

Dotfuscator มีคุณสมบัติราคาและรุ่นที่แตกต่างกันขึ้นอยู่กับรุ่นดังนั้นโปรดดูหน้าแรกต่อไปนี้สําหรับรายละเอียด

เกี่ยวกับการถอดชิ้นส่วน

ผมกล่าวถึงก่อนหน้านี้ว่าโปรแกรมที่เขียนในสุทธิ. NET ได้อย่างง่ายดายสามารถถอดแยกชิ้นส่วนและอ่านรหัสต้นฉบับ แต่สิ่งที่เกิดขึ้นจริงคือว่าถ้าคุณถอดแยกชิ้นส่วนไฟล์.exe (หรือไฟล์.dll) ดังที่แสดงในรูปต่อไปนี้คุณเกือบจะสามารถทําซ้ํารหัสต้นฉบับเช่น namespace, ชื่อชั้น, ชื่อวิธีการ, ฯลฯ

ประเภทของโปรแกรมที่ควรสับสน

ส่วนใหญ่จะใช้กับโปรแกรมที่แจกจ่ายและเรียกใช้ไปยังผู้ใช้ที่ไม่ระบุ ตัวอย่างเช่น แอปพลิเคชันเดสก์ท็อป ในทางกลับกันเว็บแอปพลิเคชันที่มีปัญหาในการเข้าถึงไฟล์โปรแกรมโดยตรงมีความสําคัญน้อยกว่าในการทําให้งวย

คราวนี้เรากําลังดูโครงการใน WPF ซึ่งเป็นแอปพลิเคชันเดสก์ท็อป

การติดตั้งดอทฟัสเซเตอร์

แอปพลิเคชันนี้มาพร้อมกับ Visual Studio 2022 แต่ไม่รวมอยู่ในการติดตั้งมาตรฐาน (ใน Visual Studios ที่ผ่านมาบางส่วน อาจถูกติดตั้งตั้งแต่เริ่มต้น)

ในการเพิ่ม Dotfuscator: เริ่ม Visaul Studio และเลือก รับเครื่องมือและฟีเจอร์จากเครื่องมือ

เลือก "ส่วนประกอบส่วนบุคคล" จากแท็บด้านบนตรวจสอบ "การป้องกันล่วงหน้า - Dotfuscator" ในกลุ่ม "เครื่องมือรหัส" และคลิกปุ่มติดตั้งที่มุมล่างขวา เมื่อทําเช่นนั้น ให้ปิดคอนโซล Visual Studio

ขั้นตอนการทําให้งวย

อธิบายขั้นตอนเพื่อทําให้ชื่อเหล่านี้สับสนและสับสน

สร้างโปรแกรมประยุกต์ใน Visual Studio สร้างแฟ้ม.exe และจากนั้น คลิกปุ่ม . สร้างไฟล์ dll จนถึงตอนนี้นี่ก็เหมือนกับการสร้างแอปพลิเคชันปกติ แอปที่คุณสร้างควรมีไว้สําหรับแอปที่สร้างขึ้นในบิลด์รีลีส (เนื่องจากคุณมักจะไม่เผยแพร่ใน Debug)

หลังจากที่คุณสร้าง.exeหรือ.dll เลือกเครื่องมือจากเมนู Visual Studio แล้วเลือก การป้องกันล่วงหน้า - ชุมชน Dotfuscator

หน้าจอการลงทะเบียนจะปรากฏขึ้น แต่ไม่จําเป็นต้องใช้ดังนั้นหากไม่จําเป็นให้คลิกปุ่มยกเลิกตามที่เป็นอยู่

ยังคงอยู่และคลิกที่ ตกลง ปุ่ม.

ดอทฟัสเซเตอร์เริ่มต้นขึ้น แอปพลิเคชันทํางานด้วยตัวเองดังนั้นคุณสามารถทําให้ไฟล์สับสนที่ไม่เกี่ยวข้องกับโครงการที่เปิดอยู่ในปัจจุบัน (ในกรณีของโปรแกรมประยุกต์รุ่นฟรีเอง จะถือว่า Studio Visual Studio จะเริ่มต้น) )

ในบทความนี้ฉันจะทําให้สับสนโครงการแอปพลิเคชัน. NET 6.0 WPF ที่สร้างขึ้นโดยมีค่าเริ่มต้นเป็นตัวอย่าง

เลือก "อินพุต" จากรายการทางด้านซ้ายแล้วคลิกปุ่ม "+"

เลือกไฟล์โปรแกรมที่คุณต้องการทําให้งวย โปรแกรมประยุกต์ที่เขียนใน .NET Framework มักทําให้.exeสับสน แต่ใน .NET และ .NET Core โปรแกรมมักจะ.dllเอนทิตี แอปพลิเคชัน NET WPF จะมีเอนทิตี.dllด้วยดังนั้นเลือก.dll

มันจะถูกเพิ่มลงในรายการ หากประกอบด้วย DLL หลายตัว ให้เพิ่มมากกว่าหนึ่งรายการ

หลังจากเพิ่มไฟล์เป้าหมายแล้วให้คลิกปุ่ม "สร้าง" จากแถบเครื่องมือ

คุณจะถูกถามว่าจะบันทึกไฟล์โครงการที่ทําให้งวยได้ที่ไหนดังนั้นให้ระบุ ตําแหน่งสามารถเป็นได้โดยพลการ แต่ก็สามารถเป็นตําแหน่งเอาต์พุตของโปรแกรมที่ทําให้งวย จะบันทึกการป้อนข้อมูลของคุณและจะเปิดไฟล์โครงการที่ทําให้งวยนี้หากคุณต้องการทําให้งวยอีกครั้ง ส่วนขยายคือ ". xml".

หากบิลด์ได้เริ่มต้นแล้วและ "Build completed" แสดงขึ้นในข้อความด้านล่าง แสดงว่าเสร็จสมบูรณ์แล้ว หน้าจอแสดงบันทึกการสร้างและรายการของคลาสและตัวแปรที่ทําให้งวย

เลือก "ผลลัพธ์" จากรายการทางด้านซ้ายเพื่อดูรายละเอียดว่าชื่อชั้นเรียนและเมธอดมีการเปลี่ยนแปลงอย่างไร

ชื่อคลาสและชื่อเมธอดในต้นไม้ทางด้านขวา เช่น "->" เป็นชื่อหลังการทําให้งวย ด้วยการเปลี่ยนชื่อคลาสหรือชื่อเมธอดเป็นชื่อที่ไม่มีความหมายเช่นนี้คุณสามารถทําให้เนื้อหาของซอร์สโค้ดอ่านยากแม้ว่าจะถอดประกอบแล้วก็ตาม

โปรแกรม Obfuscated จะถูกบันทึกไว้ในโฟลเดอร์ที่เรียกว่า "Dotfuscated" ในตําแหน่งที่คุณบันทึกไฟล์โครงการ

แผนที่.xml เป็นไฟล์ผลลัพธ์ที่ทําให้งวยดังนั้นคุณสามารถลบได้อย่างปลอดภัย

เนื่องจาก.NET 6.0 WPF ไม่สามารถเริ่มต้น โดย DLL เพียงอย่างเดียว ให้คัดลอก "XXXX.exe" และ "XXXX.runtimeconfig.json" ที่สร้างขึ้นในขณะที่สร้างเอาต์พุตไปยังโฟลเดอร์เดียวกันและเริ่มต้น หากคุณสามารถเริ่มต้นได้ตามปกติไม่มีปัญหาในขณะนี้ ถ้าคุณไม่สามารถเริ่มการทํางานได้ คุณอาจไม่มีแฟ้ม หรือคุณอาจกําลังสร้างโปรแกรมที่ไม่สอดคล้องกันเนื่องจากความสับสน

หากคุณวิเคราะห์โปรแกรมที่ทําให้งวยจริงๆ คุณจะเห็นร่องรอยของความสับสน แผ่นแรกของรูปด้านล่างคือก่อนการทําให้งวยและแผ่นที่สองคือหลังจากการทําให้งวย

โปรดสังเกตว่า ชื่อคลาสที่กําหนดไว้ในไลบรารี .NET จะไม่อยู่ภายใต้การเปลี่ยนชื่อเนื่องจากมีอยู่เป็นเฟรมเวิร์ก

คราวนี้ฉันสับสนกับโครงการเริ่มต้นที่สร้างขึ้นตามที่เป็นอยู่ดังนั้นฉันคิดว่ามีภาพที่เกือบจะไม่สับสน แต่ฉันคิดว่าผลของการทําให้งวยจะชัดเจนเพราะยิ่งโครงการมีขนาดใหญ่เท่าไหร่ชั้นเรียนที่มีเอกลักษณ์มากขึ้นก็จะเพิ่มขึ้น

นอกจากนี้แม้ว่าเราจะรวมขั้นตอนไว้ในเวอร์ชันฟรีในครั้งนี้ แต่เวอร์ชันที่ต้องชําระเงินจะช่วยให้เกิดความสับสนที่ซับซ้อนมากขึ้นและยังป้องกันการถอดแยกชิ้นส่วนเอง อย่างไรก็ตามการทําให้งวยมีผลกระทบต่าง ๆ และอาจจะเกิดขึ้นดังนั้นเมื่อดําเนินการ obfuscating มีความจําเป็นต้องทําให้มันในขณะที่พิจารณาว่ามันจะทํางานอย่างถูกต้องจากจุดเริ่มต้นของการออกแบบ

ไม่รวมความสับสน

หากคุณมีชื่อคลาสหรือชื่อพร็อพเพอร์ตี้ที่คุณไม่ต้องการทําให้งวย คุณสามารถยกเว้นชื่อเหล่านั้นได้

ขณะที่โหลดแอสเซมบลีให้เลือกเปลี่ยนชื่อ>แยกออกจากด้านซ้ายของหน้าจอ เนื่องจากเนื้อหาของการชุมนุมจะปรากฏขึ้นฉันจะตรวจสอบสิ่งที่ฉันไม่ต้องการทําให้งวย

เป็นไปได้ที่จะยกเว้นความสับสนในระดับที่ละเอียด แต่ฉันคิดว่ามันง่ายกว่าที่จะปรับมันบนพื้นฐานเนมสเปซ

โหมดห้องสมุด

เมื่อคุณเลือกชุดอินพุตคุณจะเห็นว่ามีการเลือก "โหมดไลบรารี"

"โหมดไลบรารี่" คือการแนบไปกับ DLL ที่โปรแกรมอื่นอาจเรียก หากตรวจสอบแล้วชั้นเรียนสาธารณะและคุณสมบัติที่เรียกโดยโปรแกรมอื่น ๆ จะถูกแยกออกจากการทําให้งวย

อย่างไรก็ตามโดยทั่วไปมันเป็นเรื่องยากที่จะเปิดเผยไลบรารีที่เรียกว่ากําเนิดจากโปรแกรมอื่น ๆ และฉันคิดว่ามันมักจะสับสนกับแอปพลิเคชันที่ทํางานเพียงอย่างเดียวดังนั้นจึงเป็นเรื่องปกติที่จะลบการตรวจสอบนี้ออกโดยทั่วไป

ความสับสนของ.exeไฟล์เดียว (ไม่ได้รับการยืนยัน)

การตรวจสอบรายการนี้ใน Visual Studio 2022 ยังไม่ได้รับการยืนยันในขณะนี้

มันอาจจะสับสนกับ MSBuild แต่ฉันวางไว้บนถือเพราะการขาดข้อมูลในขณะนี้