
يشوّش على كود التجميع x86-64 من خلال حقن التعليمات، والكود الزائد، وتشويش الثوابت، وفك التشفير أثناء وقت التشغيل، لإعاقة الهندسة العكسية ومكافحة التحليل.
مُعقِّد متقدم لأكواد تجميع x86-64.
تُعد أداة تعقيد أكواد التجميع (Assembly Code Obfuscator) أداة قوية ومتعددة الاستخدامات صُممت لتعزيز أمان أكواد تجميع x86-64 لديك. وهي تحمي مشاريعك من الهندسة العكسية والتحليل من خلال توظيف مجموعة واسعة من تقنيات التعقيد وإجراءات مكافحة التحليل.
حقن التعليمات: يحقن تسلسلات بايتات مخصصة قبل كل تعليمة تجميع لإرباك أدوات التفكيك.
العشوائية: يُدخل العشوائية في بنية الكود، مما يجعله أقل قابلية للتنبؤ.
كشف المصححات: يكتشف وجود المصححات أثناء تنفيذ الكود ويوظف إجراءات مضادة للتصحيح.
تقنيات مكافحة التحليل: يربك أدوات التحليل الديناميكي باستخدام التفرعات الشرطية وفحوصات التوقيت.
فك التشفير الديناميكي: يشفر أقسام الكود ويفك تشفيرها ديناميكيًا في وقت التشغيل، مما يزيد من التعقيد.
فك الضغط الديناميكي: يضغط أقسام الكود ويفك ضغطها ديناميكيًا، مما يخفي الطبيعة الحقيقية للكود.
تعقيد الثوابت: يعقّد الثوابت وقيم البيانات باستخدام تقنيات مثل XOR والتلاعب بالبتات.
إعادة تسمية المتغيرات: يعيد تسمية المتغيرات والسجلات، مما يجعل الكود أقل قابلية للقراءة البشرية.
إدراج الكود غير المرغوب: يُدرج أجزاءً من الكود غير المرغوب لزيادة تعقيد قاعدة الكود.
يتمثل جوهر عملية التعقيد في حقن تسلسلات بايتات مخصصة قبل كل تعليمة تجميع في ملف الكود. صُممت هذه التسلسلات البايتية بشكل استراتيجي لإرباك أدوات التفكيك والمحللين على حدٍّ سواء. دعنا نفحص هذه العملية بالتفصيل:
4005d2: 55 push rbp
في الذاكرة (hex):
0x55
400665: eb 01 jmp 400668 <main+0x3>
400667: b0 55 mov al,0x55
400669: eb 01 jmp 40066c <main+0x7>
في الذاكرة (hex):
0xEB, 0x01, 0xB0, 0x55
فيما يلي تفصيل للتحويل:
تتجمّع التعليمة الأصلية PUSH RBP إلى 0x55. يقوم المعقِّد بإدراج البايتات 0xEB, 0x01, 0xB0 قبلها.
النتيجة هي سلسلة تعليمات قد تبدو، عند تفكيكها، مختلفة تمامًا عن الكود الأصلي. وهذا يجعل من الصعب على الهندسة العكسية فهم الغرض الحقيقي للكود.
يُدخل عناصر عشوائية في الكود. ويتضمن ذلك تقنيات مثل تبديل ترتيب التعليمات، ومبادلة المعاملات، واستبدال رموز العمليات (opcodes).
يدمج آليات لكشف وجود المصححات أثناء تنفيذ الكود. ويتضمن فحوصات في وقت التشغيل لتحديد الآثار المرتبطة بالمصححات وتفعيل إجراءات مكافحة التحليل.
يدمج عدة إجراءات لمكافحة التحليل، مثل التفرعات الشرطية وفحوصات التوقيت. على سبيل المثال، قد يُدرج قفزات شرطية وحلقات تأخير لإبطاء عملية التحليل.
يوظف تقنيات فك تشفير ديناميكية. فهو يشفر أقسامًا معينة من الكود ويفك تشفيرها في وقت التشغيل باستخدام مفتاح سري. وتحدث عملية فك التشفير هذه ديناميكيًا أثناء تنفيذ الكود.
يضغط أقسامًا محددة من الكود ويفك ضغطها أثناء التنفيذ مباشرةً.
يستخدم تقنيات مثل XOR والتلاعب بالبتات والعمليات الحسابية لتعقيد الثوابت. وهذا يضمن عدم سهولة التعرف على قيم الثوابت.
تعيد الأداة تسمية المتغيرات والسجلات، مما يجعل الكود أقل قابلية للقراءة. وتتضمن العملية استبدال أسماء المتغيرات بسلاسل مولّدة عشوائيًا أو معرفات رقمية.
لمزيد من إخفاء الكود، يُدرج المعقِّد أجزاءً من الكود غير المرغوب في مواقع استراتيجية. يتكون هذا الكود غير المرغوب من تعليمات غير ذات صلة لا تؤثر على منطق البرنامج ولكنها تهدف إلى تشويش قاعدة الكود.
; Original Code
mov eax, 1
; After Junk Code Insertion
mov ebx, 2
sub ecx, ecx
add edx, edx
في الذاكرة (hex):
0x89, 0xD8, 0x31, 0xC9, 0x01, 0xD2
صُمم الكود غير المرغوب المُدرج لتحويل الانتباه وجعل الكود يبدو أكثر تشابكًا.
تتضمن أيضًا ميزة لكشف ترويسات UPX المزيفة. فهي تفحص الكود بحثًا عن علامات العبث بترويسات UPX، مما يضمن سلامة الملف التنفيذي.
قبل التحويل (الكود الأصلي):
section .text
global _start
_start:
; Calculate the sum of the first 10 natural numbers
mov ecx, 10 ; Initialize loop counter
mov eax, 0 ; Initialize sum to 0
loop_start:
add eax, ecx ; Add current value of ECX to EAX (sum)
loop loop_start ; Decrement ECX and loop if not zero
; Exit program
mov eax, 1 ; SYS_exit
int 0x80 ; Invoke syscall
التمثيل السداسي العشري (الكود الأصلي):
31 C9 xor ecx,ecx
B8 00 00 00 00 mov eax,0x0
EB 0E jmp 0x1c
01 C8 add eax,ecx
E2 FB loop 0x11
B8 01 00 00 00 mov eax,0x1
CD 80 int 0x80
بعد التحويل (الكود المعقَّد):
section .text
global _start
_start:
; Calculate the sum of the first 10 natural numbers
mov eax, 0x1
add eax, 0x2
add eax, 0x3
add eax, 0x4
add eax, 0x5
add eax, 0x6
add eax, 0x7
add eax, 0x8
add eax, 0x9
add eax, 0xa
; Exit program
mov eax, 0x1
int 0x80
التمثيل السداسي العشري (الكود المعقَّد):
B8 01 00 00 00 mov eax,0x1
83 C0 02 add eax,0x2
83 C0 03 add eax,0x3
83 C0 04 add eax,0x4
83 C0 05 add eax,0x5
83 C0 06 add eax,0x6
83 C0 07 add eax,0x7
83 C0 08 add eax,0x8
83 C0 09 add eax,0x9
83 C0 0A add eax,0xa
B8 01 00 00 00 mov eax,0x1
CD 80 int 0x80
في الكود المعقَّد، جعلنا منطق البرنامج الأصلي أقل وضوحًا بإضافة تعليمات ADD زائدة واستخدام قيم سداسية عشرية كمعاملات مباشرة.
هذا المشروع مرخّص بموجب رخصة MIT. راجع ملف LICENSE للحصول على التفاصيل.
المساهمات مرحب بها!.
للمشكلات أو طلبات الميزات أو الاستفسارات العامة، يرجى إنشاء مشكلة.
هذه الأداة مخصصة للأغراض التعليمية والأخلاقية.