ส่วนที่ 2 วิศวกรรมย้อนกลับเดลฟี
ปัจจุบัน Borland ไม่มีผลิตภัณฑ์ใดๆ สำหรับการถอดรหัสไฟล์ปฏิบัติการ (.exe) หรือ "ไฟล์ที่คอมไพล์ Delphi" (.dcu) ให้เป็นโค้ดโปรแกรมดิบ (.pas)
หน่วยที่คอมไพล์ Delphi: DCU ( หน่วยที่คอมไพล์ Delphi: DCU )
เมื่อคอมไพล์หรือรันโปรเจ็กต์ Delphi ไฟล์หน่วยการคอมไพล์ (.dcu) จะถูกสร้างขึ้น ตามค่าเริ่มต้น เวอร์ชันที่คอมไพล์แล้วของแต่ละยูนิตจะถูกจัดเก็บไว้ในไฟล์ไบนารี่แยกต่างหาก ชื่อไฟล์ของไฟล์จะเหมือนกับไฟล์ยูนิต และมีนามสกุลเป็น .DCU ตัวอย่างเช่น: ไฟล์ unit1.dcu มีโค้ดและข้อมูลที่ประกาศในไฟล์ unit1.pas
ซึ่งหมายความว่า หากคุณมีทรัพยากรบางอย่าง เช่น คอมโพเนนต์ที่คอมไพล์แล้ว สิ่งที่คุณต้องทำคือแยกคอมไพล์มันและรับซอร์สโค้ด ผิด รูปแบบไฟล์ DCU ไม่มีเอกสาร (รูปแบบของเจ้าของ) และสามารถเปลี่ยนจากเวอร์ชันหนึ่งไปอีกเวอร์ชันหนึ่งได้
หลังจากคอมไพเลอร์: Delphi Reverse Engineering
หากคุณกำลังพยายามถอดรหัสไฟล์ปฏิบัติการ Delphi มีบางสิ่งที่คุณควรรู้:
ไฟล์โปรแกรมต้นฉบับ Delphi มักจะถูกจัดเก็บไว้ในไฟล์สองประเภท: ไฟล์รหัส ASCII (.pas, .dPR) และไฟล์ทรัพยากร (.res, .rc, .dfm, .dcr) ไฟล์ Dfm มีรายละเอียด (คุณสมบัติ) ของออบเจ็กต์ที่มีอยู่ในแบบฟอร์ม เมื่อสร้างไฟล์ปฏิบัติการ Delphi จะคัดลอกข้อมูลในไฟล์ .dfm ไปยังไฟล์โค้ด .exe ที่เสร็จสมบูรณ์ ไฟล์ฟอร์มจะอธิบายแต่ละส่วนประกอบในแบบฟอร์ม รวมถึงค่าคุณสมบัติที่เสถียรทั้งหมด เมื่อใดก็ตามที่เราเปลี่ยนตำแหน่งของแบบฟอร์ม ชื่อเรื่องของปุ่ม หรือกำหนดขั้นตอนเหตุการณ์ให้กับส่วนประกอบ Delphi จะบันทึกการเปลี่ยนแปลงเหล่านี้ในไฟล์ DFM (ไม่ใช่รหัสสำหรับขั้นตอนกิจกรรม แต่จะจัดเก็บไว้ในไฟล์ pas/dcu) . เพื่อที่จะรับ 'dfm' จากไฟล์ปฏิบัติการ เราต้องเข้าใจว่าทรัพยากรประเภทใดที่เก็บอยู่ในไฟล์ปฏิบัติการ Win32
โปรแกรมทั้งหมดที่คอมไพล์โดย Delphi มีส่วนต่างๆ ดังต่อไปนี้: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc จากมุมมองของการแยกคอมไพล์ ส่วนที่สำคัญที่สุดคือ: CODE, .rsrc ในบทความ "การเพิ่มฟังก์ชันการทำงานให้กับโปรแกรม Delphi" ("การเพิ่มฟังก์ชันการทำงานให้กับโปรแกรม Delphi") (การเพิ่มของนักแปล: ทีละรายการ) มีการกล่าวถึงสิ่งที่น่าสนใจเกี่ยวกับรูปแบบปฏิบัติการ Delphi ข้อมูลคลาสและทรัพยากร DFM: วิธีมอบหมายกิจกรรม ให้กับตัวจัดการเหตุการณ์อื่น ๆ ที่กำหนดไว้ในรูปแบบเดียวกัน วิธีเพิ่มตัวจัดการเหตุการณ์ของคุณเองเพื่อเพิ่มโค้ดลงในไฟล์ปฏิบัติการเพื่อเปลี่ยนชื่อของปุ่ม
ในบรรดาทรัพยากรประเภทต่างๆ ที่จัดเก็บไว้ในไฟล์ .exe นั้น RT_RCDATA หรือทรัพยากรที่กำหนดโดยแอปพลิเคชัน (ข้อมูลดิบ) จะมีข้อมูลอยู่ในไฟล์ DFM ก่อนการคอมไพล์ ในการเลือกข้อมูล DFM จากไฟล์ .exe เราสามารถเรียกใช้ฟังก์ชัน EnumResourceNames API... สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเลือกข้อมูล DFM จากไฟล์ .exe โปรดดูที่: "การเขียนโค้ด Delphi DFM explorer" ("การเขียน เครื่องตรวจจับ Delphi DFM") (เพิ่มผู้แปล: แปลทีละอัน)