أساسيات تجميع x86/x64 لمحللي البرمجيات العكسية
اقرأ MOV وCMP وJNE وCALL وRET، وتتبّع تدفق البيانات عبر السجلات والمكدس.
أساسيات تجميع x86/x64 لمحللي البرمجيات العكسية درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
لماذا يحتاج محللو الهندسة العكسية إلى لغة التجميع؟
مزيل الترجمة في Ghidra مفيد لكنه غير مثالي — فقد يفوّت بعض البنى، ويستنتج الأنواع بشكل خاطئ، ولا يستطيع إزالة ترجمة الشيفرة المموهة. توفر قراءة لغة التجميع مباشرة الحقيقة المرجعية. يحتاج محلل الهندسة العكسية إلى قراءة لغة التجميع، لا إلى كتابتها.
السجلات
السجلات الأساسية في x86-64:
- RAX — المجمّع وقيم الإرجاع
- RBX, RCX, RDX — للاستخدام العام
- RSI, RDI — فهرسا المصدر والوجهة، والوسيطان الأول والثاني للدالة
- RSP — مؤشّر المكدس
- RBP — المؤشّر الأساسي (إطار المكدس)
- RIP — مؤشّر التعليمات
اتفاقية استدعاء الدوال (x64 Linux)
تُمرّر الوسائط في السجلات (System V AMD64 ABI):
- RDI
- RSI
- RDX
- RCX
- R8
- R9
تُحفظ قيمة الإرجاع في RAX. وتُدفَع الوسائط الإضافية إلى المكدس.
التعليمات الأساسية
التعليمات الأساسية التي يجب التعرّف عليها:
mov rax, rbx ; copy rbx to rax
push rax ; push rax onto stack
pop rbx ; pop top of stack into rbx
add rax, 8 ; rax = rax + 8
sub rsp, 0x20 ; allocate 32 bytes on stack
call 0x401234 ; call function at address
ret ; return to caller
lea rax, [rbp-0x10] ; load address of local varالقفزات الشرطية
المقارنات والتفرعات:
cmp rax, 0 ; set flags based on rax - 0
test rax, rax ; test rax & rax (check if zero)
jz 0x401234 ; jump if zero
jnz 0x401234 ; jump if not zero
jl 0x401234 ; jump if less (signed)
jge 0x401234 ; jump if >= (signed)
je 0x401234 ; jump if equalقراءة دالة بسيطة
التعرّف على الأنماط الشائعة:
; if (x == 0) return 1;
mov eax, [rbp-4] ; load x
test eax, eax ; x == 0?
jnz .notZero ; if not zero, skip
mov eax, 1 ; return value = 1
ret
.notZero:
...التعرّف على عمليات السلاسل النصية
عمليات السلاسل النصية والذاكرة الشائعة:
; memcpy(dest, src, n):
; rdi=dest, rsi=src, rdx=n
rep movsb ; copy RCX bytes from RSI to RDI
; strlen-like loop:
.loop:
cmp byte [rsi], 0 ; check for null terminator
je .done
inc rsi
jmp .loopإعداد إطار المكدس وإنهاؤه
تبدأ كل دالة وتنتهي بما يلي:
; Prologue:
push rbp ; save caller frame
mov rbp, rsp ; set up new frame
sub rsp, 0x30 ; allocate local vars
; Epilogue:
leave ; mov rsp, rbp; pop rbp
retالتعرّف على الحلقات
الحلقات في التفكيك البرمجي:
- يشير القفز إلى عنوان خلفي (عنوان أقل) إلى وجود حلقة
- يُخفَّض العداد الموجود في سجل باستخدام
dec/sub - تُخفّض تعليمة
loopقيمة RCX وتقفز إذا لم تكن صفرًا
قراءة عبارات Switch
غالبًا ما تُترجم عبارات Switch إلى جداول قفز:
; Jump table pattern:
cmp eax, 5 ; check if case > max
ja .default ; jump to default
lea rcx, [jump_table]
mov rax, [rcx + rax*8] ; index into table
jmp rax ; jump to case handlerثوابت SIMD والتشفير
ابحث عن الثوابت الرقمية التي تحدد الخوارزميات:
- S-box الخاصة بـ AES: البايتات الأولى
63 7C 77 7B... - قيمة التجزئة الأولية لـ SHA-256:
0x6a09e667, 0xbb67ae85... - MD5:
0xd76aa478
يحدد التعرّف على هذه الثوابت الدوال التشفيرية فورًا.
تحقق سريع: لغة التجميع x64
في x86-64 System V ABI، أي سجل يحتوي على الوسيط الأول لاستدعاء دالة؟
مراجعة الدرس
تتطلب الهندسة العكسية لـ x86-64 معرفة السجلات الأساسية (RAX و RDI و RSI و RSP و RIP)، واتفاقيات استدعاء الدوال (الوسائط في RDI/RSI/RDX...)، والأنماط الشائعة (المقدمات والحلقات والمقارنات وجداول القفز). لا تحتاج إلى كتابة لغة التجميع — يكفي أن تقرأها. وتحدد ثوابت التشفير الموجودة في الشيفرة الخوارزميات من دون تشغيل الملف الثنائي.
تعلم Cyber Security Academy مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 76
- الدروس
- 303
الأسئلة الشائعة
هل درس «أساسيات تجميع x86/x64 لمحللي البرمجيات العكسية» مجاني؟
نعم — نص درس «أساسيات تجميع x86/x64 لمحللي البرمجيات العكسية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات تجميع x86/x64 لمحللي البرمجيات العكسية»؟
اقرأ MOV وCMP وJNE وCALL وRET، وتتبّع تدفق البيانات عبر السجلات والمكدس. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟
لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «أساسيات تجميع x86/x64 لمحللي البرمجيات العكسية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟
نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Ghidra: التنقل في الملفات الثنائية وإضافة التعليقات التوضيحية
- أساسيات تجميع x86/x64 لمحللي البرمجيات العكسية
- التحليل الديناميكي باستخدام GDB وpwndbg
- إزالة التعمية وحيل مكافحة التحليل