
การแก้ไขรหัสแอสเซมบลีเพื่อเปลี่ยนพฤติกรรมของโปรแกรมที่มีอยู่ไม่ใช่เรื่องแปลกในการวิเคราะห์มัลแวร์วิศวกรรมย้อนกลับซอฟต์แวร์และโดเมนที่กว้างขึ้นของการวิจัยความปลอดภัย โครงการนี้ขยาย Disassembler ของ IDA Pro ยอดนิยมเพื่อสร้างเวิร์กโฟลว์การติดตั้งไบนารีแบบโต้ตอบที่แข็งแกร่งยิ่งขึ้นซึ่งออกแบบมาสำหรับการทำซ้ำอย่างรวดเร็ว
โครงการนี้ใช้พลังงานจากส้อมผู้เยาว์ของเครื่องยนต์ Keystone ที่แพร่หลายซึ่งรองรับ X86/X64 และ ARM/ARM64 Patching พร้อมแผนการที่จะเปิดใช้งานสถาปัตยกรรม Keystone ที่เหลืออยู่ในอนาคต
ขอขอบคุณเป็นพิเศษสำหรับ HEX-rays สำหรับการสนับสนุนการพัฒนาปลั๊กอินนี้
ปลั๊กอินนี้ต้องใช้ IDA 7.6 และ Python 3 รองรับ Windows, Linux และ MacOS
โปรดทราบว่า IDA รุ่นเก่า (8.2 และต่ำกว่า) ไม่เข้ากันได้กับ Python 3.11 ขึ้นไป
เรียกใช้บรรทัดต่อไปนี้ในคอนโซล IDA เพื่อติดตั้งปลั๊กอินโดยอัตโนมัติ:
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())อีกวิธีหนึ่งคือปลั๊กอินสามารถติดตั้งด้วยตนเองได้โดยการดาวน์โหลดแพ็คเกจปลั๊กอินแบบกระจายได้สำหรับแพลตฟอร์มที่เกี่ยวข้องจากหน้ารีลีสและคลายซิปลงในโฟลเดอร์ปลั๊กอินของคุณ
ขอแนะนำ อย่างยิ่ง ให้คุณติดตั้งปลั๊กอินนี้ลงในไดเรกทอรีปลั๊กอินผู้ใช้ของ IDA:
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))ปลั๊กอินแพทช์จะโหลดโดยอัตโนมัติสำหรับสถาปัตยกรรมที่รองรับ (x86/x64/arm/arm64) และฉีดการดำเนินการแก้ไขที่เกี่ยวข้องลงในเมนูบริบทคลิกขวาของมุมมองการถอดชิ้นส่วน IDA:

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

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

ในที่สุดปุ่มลูกศร UP และ DOWN สามารถใช้งานได้ในขณะที่ยังคงมุ่งเน้นไปที่ฟิลด์ข้อความประกอบที่แก้ไขได้เพื่อเลื่อนเคอร์เซอร์ขึ้นและลงมุมมองการถอดชิ้นส่วนโดยไม่ต้องใช้เมาส์
การดำเนินการแก้ไขที่พบบ่อยที่สุดคือการออกคำแนะนำอย่างน้อยหนึ่งคำแนะนำ ด้วยเหตุนี้การกระทำของ NOP จะปรากฏในเมนูคลิกขวาเพื่อการเข้าถึงอย่างรวดเร็ว

คำแนะนำของแต่ละบุคคลสามารถ nop'ed รวมถึงช่วงของคำแนะนำที่เลือก
การบังคับให้กระโดดแบบมีเงื่อนไขเพื่อดำเนินการเส้นทาง 'ดี' เป็นอีกหนึ่งการกระทำการแก้ไขทั่วไป ปลั๊กอินจะแสดงการกระทำนี้เมื่อคลิกขวาที่คำแนะนำการกระโดดแบบมีเงื่อนไข

หากคุณ ไม่ ต้องการให้มีการกระโดดแบบมีเงื่อนไขคุณสามารถทำได้แทน!
แพตช์สามารถบันทึก (นำไปใช้) ไปยังการเรียกใช้งานที่เลือกผ่านเมนูย่อยแพทช์ได้ตลอดเวลา การกระทำที่รวดเร็วทำให้การบันทึกแพตช์ที่ตามมาโดยใช้การตั้งค่าเดียวกันนั้นเร็วขึ้น

ปลั๊กอินจะใช้ความพยายามอย่างแข็งขันในการเก็บข้อมูลสำรอง ( .bak ) ของการปฏิบัติการดั้งเดิมซึ่งใช้ในการ 'ทำความสะอาด' ใช้ชุดแพตช์ฐานข้อมูลปัจจุบันในระหว่างการบันทึกแต่ละครั้ง
ในที่สุดหากคุณไม่มีความสุขกับแพตช์คุณสามารถคลิกขวาที่บล็อกคำแนะนำ (สีเหลือง) เพื่อเปลี่ยนกลับเป็นค่าดั้งเดิมของพวกเขา

ในขณะที่มัน 'ง่าย' ที่จะย้อนกลับไบต์กลับไปเป็นค่าดั้งเดิมของพวกเขา แต่มันอาจ 'ยาก' ที่จะคืนค่าการวิเคราะห์กลับสู่สถานะก่อนหน้า การคืนค่าแพตช์อาจต้องใช้การแก้ไขของมนุษย์เพิ่มเติม เป็นครั้งคราว
เวลาและแรงจูงใจที่อนุญาตการทำงานในอนาคตอาจรวมถึง:
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
ฉันยินดีต้อนรับการมีส่วนร่วมภายนอกปัญหาและคำขอคุณลักษณะ โปรดส่งคำขอดึงไปยังสาขา develop ของที่เก็บนี้หากคุณต้องการให้พวกเขาได้รับการพิจารณาสำหรับการเปิดตัวในอนาคต