ปลั๊กอินเครื่องกำเนิดไฟฟ้าลายเซ็น IDA Pro
คัดลอก IDA_SigMaker32.dLL และ IDA_SigMaker64.dLL ไปยังไดเรกทอรี plugins IDA ของคุณ
คีย์ฮอต IDA เริ่มต้นคือ "Ctrl-alt-s" แต่สามารถตั้งค่าไปยังอีกคีย์โดยใช้คีย์ IDA "plugins.cfg" ของคุณ ตั้งแต่ "Ctrl-alt-s" ตอนนี้คอมโบขัดแย้งกับค่าเริ่มต้นของ IDA เพื่อหลีกเลี่ยงการได้รับข้อความเตือนแก้ไข "idagui.cfg" ของคุณและสร้างรายการ "stacktrace" เช่น: "StackTrace" = 0 // "Ctrl-Alt-S" // open stack trace window
ต้องใช้ IDA Pro เวอร์ชัน 7.6'ish
เรียกใช้ปลั๊กอินผ่านฮอตคีย์หรือผ่านเมนู IDA Edit/Plugin

มีการดำเนินการสร้างลายเซ็นสามครั้ง:
ฟังก์ชั่น : ใช้เพื่อสร้างจุดเข้าใช้งานฟังก์ชันที่ไม่ซ้ำกันลายเซ็นฟังก์ชั่นน้อยที่สุดพร้อมออฟเซ็ตหรือลายเซ็นทั้งร่างกายขึ้นอยู่กับ ตัวเลือก การกำหนดค่า (ดูด้านล่าง)
ก่อนอื่นเลือกที่อยู่ใด ๆ ภายในฟังก์ชั่นเป้าหมาย หากฟังก์ชั่นที่เลือกไม่ซ้ำกัน (สำหรับจุดเริ่มต้นหรือตัวเลือกน้อยที่สุด) จะพยายามสแกนฟังก์ชั่นที่ไม่ซ้ำกันข้ามการอ้างอิง
กรณีการใช้งานทั่วไป: ลายเซ็นเพื่อค้นหาฟังก์ชั่น ณ เวลาทำงานในหน่วยความจำเป้าหมายเพื่อค้นหาฟังก์ชั่นใน IDA หลังจากการอัปเดตที่เรียกใช้งานได้หรือเพื่อช่วยค้นหาไลบรารีที่รู้จักโดยลายเซ็น ฯลฯ
ตัวอย่างเอาต์พุตลายเซ็น: 
ผลลัพธ์ลายเซ็นถูกส่งไปยังคลิปบอร์ด Windows เพื่อให้ง่าย CTRL+V วางลงในซอร์สโค้ด ฯลฯ

รูปแบบเอาท์พุท: IDA : รูปแบบการค้นหาไบนารี hex เริ่มต้นที่ IDA และเครื่องมืออื่น ๆ รองรับโดยใช้ hex bytes และ "??" ไวด์การ์ด ตัวอย่าง: C1 6C E8 ?? ?? ?? ?? 8B 50 08 รูปแบบรหัส : Escape รหัส Hex String และ String หน้ากากแยกต่างหากที่ 'X' เป็น Bytes ผู้รักษาและ '?' เป็นไบต์ไวด์การ์ด ตัวอย่าง: " "xC1x6CxE8xCCxCCxCCxCCx8Bx50x08", "xxx????xxx" ตัวอย่าง: {0xC1,0x6C,0xE8,0xAE,0xAE,0xAE,0xAE,0x8B,0x50,0x08}; ใช้กล่อง "Mask Byte" แก้ไขเพื่อเปลี่ยนค่าเริ่มต้น "BYTE BYTE" BYTE BYTE Byte หน้ากากเริ่มต้นคือ 0xAE หนึ่งในไบต์ที่ใช้น้อยที่สุด (ดู "Mask Byte ในอุดมคติ" ด้านล่าง)
เกณฑ์สำหรับการสร้างลายเซ็น "ฟังก์ชั่น" จุดเข้า : จะพยายามสร้างลายเซ็นจุดเริ่มต้นของฟังก์ชันไบต์น้อยที่สุดเมื่อเป็นไปได้ ขนาดไบต์น้อยที่สุด : จะพยายามสร้างน้อยที่สุดโดยมีจำนวนไวด์การ์ดน้อยที่สุดขนาดไบต์ (ห้านั้นยิ่งใหญ่กว่า) การจัดเรียงลายเซ็นจัดตำแหน่งภายในของฟังก์ชั่นที่เลือก Full Function Body : จะพยายามสร้างลายเซ็นร่างกายที่ไม่ซ้ำกัน
สำหรับตัวเลือกใด ๆ ทั้งสามนี้หากฟังก์ชั่นนั้นไม่ซ้ำกันความพยายามจะทำเพื่อค้นหาลายเซ็นอ้างอิงข้ามที่เล็กที่สุดที่เล็กที่สุดแทน หากคุณต้องการสร้างลายเซ็นฟังก์ชั่นเต็มรูปแบบหรือบางส่วนสำหรับฟังก์ชั่นที่ไม่ใช่ Unique ให้ใช้ตัวเลือก "จากช่วงที่อยู่" แทน
ระดับข้อความ : ตั้งค่าเป็น "verbose" สำหรับเอาต์พุตข้อความการสร้างลายเซ็นภายในไปยังหน้าต่างบันทึก IDA
ฟังก์ชั่นแม็กซ์สแกนอ้างอิง : จำกัด จำนวนฟังก์ชั่นการอ้างอิงข้ามเพื่อค้นหาเมื่อไม่พบลายเซ็น "ฟังก์ชั่น" โดยตรง โดยปกติแล้วสิ่งนี้ควรเป็น '0' สำหรับการค้นหาไม่ จำกัด แต่สำหรับกรณีปัญหาที่มีการอ้างอิงจำนวนมากที่ทำให้เกิดการชะลอตัวนี้สามารถตั้งค่าเป็นขีด จำกัด ที่สมเหตุสมผลเช่น 16 หรือ 100 เพื่อเพิ่มความเร็วในการสแกน
สำหรับกรณีที่ค่อนข้างหายากของฟังก์ชั่นที่มีชิ้นส่วนของพวกเขาแพร่กระจายไปตามช่วงที่อยู่หลายช่วงเครื่องมือจะพยายามใช้เพียงชิ้นแรก หากต้องการสร้างลายเซ็นในหนึ่งในชิ้นส่วนที่แยกจากกันให้ลองใช้วิธี "ที่อยู่" หากทุกอย่างล้มเหลวให้ลอง "จากช่วงที่อยู่" SIG (ซึ่งอาจใช้การค้นหาด้วยตนเองเพื่อเป็นเอกลักษณ์)
จุดเริ่มต้นของฟังก์ชั่นจุดเริ่มต้นของฟังก์ชันไบต์ : เมื่อใช้ตัวเลือก "ฟังก์ชั่น" และเกณฑ์ "จุดเริ่มต้น" จะถูกกำหนดค่าให้ จำกัด ขนาดไบต์จุดเริ่มต้นสูงสุด ค่าเริ่มต้นคือ '0' สำหรับไม่ จำกัด (ซึ่งสามารถขึ้นอยู่กับขนาดไบต์ฟังก์ชั่นที่เลือกทั้งหมด) หากเกินขีด จำกัด นี้ลายเซ็นอ้างอิงข้ามจะถูกค้นหาแทน
ตั้งค่าเป็นขีด จำกัด ในทางปฏิบัติเช่น '16' หรือ '32' สำหรับลายเซ็น XREF ที่มีขนาดเล็กกว่าโดยทั่วไปแล้วอาจมีลายเซ็นจุดเริ่มต้นที่มีขนาดใหญ่มาก
Sigmakerex ("Ex") โดยรวมสร้างลายเซ็นฟังก์ชั่นขนาดเล็กและเข้มงวดขึ้นโดยใช้การวิเคราะห์คำสั่งที่ดีขึ้น ตัวอย่าง: Sigmaker ("SM") Wildcards The Operand bytes ของคำสั่ง sub esp, 90h 81 EC 90 00 00 00 AS "81 EC ?? ?? ?? ??
EX มุ่งเน้นไปที่กรณีการใช้งานของร่างกายฟังก์ชั่นเชิงบรรทัดฐาน สำหรับ SM มีตัวเลือกที่ควบคุมได้เพียงตัวเดียว มันจะพยายามสร้างลายเซ็นที่ไม่ซ้ำกันที่ที่อยู่ที่คุณเลือกในฟังก์ชั่น หากไม่พบที่นั่นมันจะมองหา SIG อ้างอิงข้ามที่ไม่ซ้ำกันแทนเท่านั้น สำหรับ EX เนื่องจากกรณีการใช้งานทั่วไปที่ระบุคือการค้นหาจุดเข้าใช้งานฟังก์ชั่นลายเซ็นจุดเริ่มต้นที่เล็กที่สุดจะถูกสร้างขึ้นเมื่อมีการกำหนดค่าเกณฑ์ "จุดเริ่มต้น" สำหรับเมื่อเลือกตัวเลือก "ขนาดไบต์น้อยที่สุด" มันจะมองหาลายเซ็นที่เล็กที่สุดและน้อยที่สุดจำนวนน้อยที่สุด (ของขั้นต่ำห้าไบต์) ภายในร่างกายฟังก์ชั่นทั้งหมด
SM มีเกณฑ์การควบคุมการควบคุมมากกว่า BYTE เทียบกับจำนวน Wildcard ฯลฯ ในกล่องโต้ตอบตัวเลือก EX สมมติว่าคุณต้องการสิ่งที่ดีที่สุดของทั้งสอง (น้อยที่สุดไวด์การ์ดและขนาดไบต์ที่เล็กที่สุด)
Ex ละเว้นฟังก์ชัน "การแปลง" และฟังก์ชั่น "การค้นหา" ของแต่ละบุคคลที่ SM มีมากกว่าการตั้งค่าสำหรับ UI ที่เรียบง่ายและรกน้อยกว่า
สำหรับการค้นหาเนื่องจาก EX ปล่อยเอาท์พุทรูปแบบ IDA นอกเหนือจากลายเซ็นรูปแบบเอาต์พุตที่เลือกใช้ตัวเลือก IDA Binary Search "Hex" ด้วย ida sig string
EX โดยทั่วไปเร็วกว่าเมื่อทำการค้นหาที่กว้างขวางมากขึ้นเนื่องจากเทคนิคการโคลนนิ่ง IDB เป็น RAM และใช้สแกนเนอร์รูปแบบ AVX2 ที่ปรับให้เหมาะสมเทียบกับฟังก์ชั่น IDA ที่ช้าสำหรับการสแกน
ในโครงการของฉันเองสำหรับการค้นหารูปแบบแบบไดนามิกฉันชอบ "อินไลน์ไบต์" (สำหรับการขาดชื่อที่ดีกว่า) มันง่ายที่สุดกะทัดรัดมากที่สุดและไม่จำเป็นต้องมีการแปลงรันไทม์จากสตริง ASCII Hex ฉันใช้รูปแบบนี้สำหรับหลายโครงการและยังไม่พบปัญหาการชนที่เป็นลายเซ็นหรือปัญหาการจับคู่ซ้ำซ้อน
เพื่อลดปัญหาความซ้ำซ้อนที่อาจเกิดขึ้นได้อย่างรอบคอบที่จะใช้หนึ่งในค่ารหัสไบต์ที่ใช้น้อยที่สุดสำหรับไวด์การ์ด/มาสก์ไบต์ ในการค้นหาผู้สมัครในอุดมคติฉันได้รวบรวมความถี่รหัสไบต์จากสามส่วนขนาดใหญ่ 32 บิตและ 64 บิตแต่ละส่วนจากนั้นจัดตารางและจัดเรียงผลลัพธ์ สคริปต์ "ida_get_byte_frequency.py" ida ใช้พจนานุกรมรวบรวมความถี่ไบต์และบันทึกลงใน DB JSON สคริปต์ "byte_frequency_tabulate.py" ตารางและเรียงลำดับในการสั่งซื้อชุดของ JSON DBS ที่บันทึกไว้เหล่านี้ เห็นได้ชัดว่าความถี่ไบต์สำหรับ 32 บิตนั้นไม่เหมือนกับ 64 บิตและตารางอย่างอิสระ ดู "32bit.txt" และ "64bit.txt" ในความสัมพันธ์ทางสายตาของทั้งสอง 0xa2 เป็นตัวหารร่วมน้อยที่สุดจากนั้นตามด้วย 0xae 0xae ได้รับเลือกมากกว่า 0xa2 เป็น Byte หน้ากากเริ่มต้นเนื่องจากง่ายต่อการเลือกที่จะเลือกใน hex ด้วยสายตา
สร้างขึ้นโดยใช้ Visual Studio 2019 บน Windows 10 โดยการพึ่งพาเพียงอย่างเดียวคือ IDA Pro C/C ++ SDK อย่างเป็นทางการ การตั้งค่าในไฟล์โครงการจะมองหาตัวแปรสภาพแวดล้อม _IDADIR ซึ่งคาดว่าจะค้นหาโฟลเดอร์ "IDASDK/INCLUDE" และโฟลเดอร์ "IDASDK/LIB" ซึ่งอยู่ที่ IDA SDK ไม่ได้ใช้ IDADIR เนื่องจาก IDA มองหามันเองและอาจทำให้เกิดความขัดแย้งหากคุณพยายามใช้เวอร์ชัน IDA ที่ติดตั้งมากกว่าหนึ่งเวอร์ชัน
Python 3.7'ish หรือดีกว่าที่จะเรียกใช้สคริปต์ "byte_frequency_tabulate.py"
ต้องขอบคุณผู้สร้างเครื่องมือ Sigmaker ดั้งเดิมกลับมาจาก Gamedeception.net วันจนถึงปัจจุบัน C/C ++ และ Python ผู้เขียนซ้ำ: P4TR! CK, Bobbysing, Xero | Hawk, Ajkhoury และ Zoomgod et al ขอบคุณ Wojciech Mula สำหรับทรัพยากรการเขียนโปรแกรม SIMD ของเขา
เปิดตัวภายใต้ MIT © 2022 โดย Kevin Weatherman