หากเคยใช้เครื่องมือ อาทิเช่น PEiD, Exeinfo PE ซึ่งเป็นเครื่องมือที่สามารถตรวจสอบได้ว่า PE File ของเรานั้น compile ด้วยอะไร หรือถูก pack ด้วย packer อะไร อาจจะเคยสงสัยกันว่า "เฮ้ย มันรู้ได้ยังไงอะ"
วันนี้เราจะมาตอบข้อสงสัยนี้กัน โดยก่อนอื่นคงต้องกล่าวถึงกระบวนการทำงานของ exe file ซะก่อน เมื่อ exe file ถูกสั่งให้ทำงานโดย OS, exe file จะถูกโหลดลง memory จากนั้นก็จะเตรียมข้อมูลที่จำเป็นต่อการทำงาน ยกตัวอย่างเช่น พวก api ที่อยู่ใน dll ทั้งหลาย จากนั้นจึงกระโดดไปเริ่มต้นทำงานที่ AddressOfEntryPoint ซึ่งเป็นจุดเริ่มต้น code ของ exe file นั้นๆ อย่างแท้จริง
ในแต่ละ compiler หรือแต่ละ packer เมื่อมีการสร้างไฟล์ exe (ในตอน compile หรือตอน pack) จะมีรูปแบบการสร้าง machine code ต่างกัน เป็น patten ของใครของมันซึ่งจุดนี้ถือว่าเป็นเอกลักษณ์ หรือ signature ของ pe ไฟล์นั้น ที่สามารถทำให้นำไปแยกแยะได้ว่า exe นั้นๆ compile จากโปรแกรมอะไร หรือถูก pack ด้วยโปรแกรมอะไร
ยกตัวอย่างเช่น
[!EP (ExE Pack) V1.0] signature = 60 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? FF 10
จะมี signature ดัง code ด้านบน และมี "?" หมายถึงเป็นเลขฐาน 16 อะไรก็ได้ โดยเราจะเริ่มนับ signature จากตำแหน่งของ AddressOfEntryPoint
หากเิปิดไฟล์ที่ถูก pack ด้วย !EP 1.0 ด้วย OllyDbg จะเห็นดังนี้

เห็นรูปก็คงไม่ต้องอธิบายแล้วมั้ง ว่า pe signature มันทำงานยังไง (มันเล่นง่ายๆ แบบนี้แหละ เน้น database เก็บค่าเยอะๆ เป็นอันใช้ได้)
