استغلال ICALL GADGET للتواصل
معلومات عامة: هذا في نواة ويندوز وسيسمح لنا بالتواصل في برنامج التشغيل الخاص بنا دون اكتشافه من قبل برامج مكافحة الغش
لذلك كنت أتصفح في IDA ووجدت هذا
image
بعد مزيد من الفحص يمكننا أن نرى أنه يستدعي دالة تسمى _guard_dispatch_icall_ptr. الـ icall في الأساس هو jmp إلى rax لذا إذا فكرت قليلاً يمكننا تعديل هذه الدالة بالكامل لتستدعي المعالج الخاص بنا باستخدام shellcode.
الـ Shellcode الخاص بنا
سنقوم بإنشاء shellcode يقوم بتعيين rax إلى مؤشر لدالة المعالج الخاصة بنا. بهذه الطريقة عندما يتم استدعاء الدالة ستنفذ الـ shellcode الخاص بنا وتستدعي المعالج الخاص بنا. نريد التأكد من أن الـ shellcode الذي نصنعه بنفس حجم البايتات بالضبط مثل الكود الذي نعدله. لذا إليك مثال على الـ shellcode الذي استخدمته في asm وستحتاج إلى تحويله إلى بايتات.
sub rsp,0x38
movabs rax,0xdeadbeef #placeholder for handler
movabs r10,0xab39cfee
inc rax
dec rax
call QWORD PTR [rip+0x720d4] # 0x720f8
jmp 0x29
الكود الخاص بنا
في cpp نحتاج فقط إلى الحصول على عنوان الدالة ثم تعيين الـ shellcode الخاص بنا فيها ولكن هنا يصبح الأمر صعباً إذا قمنا بذلك ببساطة كما هو سنفسد المكدس وسنحصل على شاشة زرقاء من وقت لآخر. لتجنب ذلك سنحتاج إلى إصلاح المكدس. لذا بدلاً من العودة داخل المعالج الخاص بنا يجب أن نقوم بنفس العمليات التي كانت الدالة ستقوم بها إذا لم نعدلها. سأترك هذا للقارئ ليقوم به بنفسه لأنني لا أريد أن أقدم طريقة مذهلة للتهرب من برامج مكافحة الغش ولكن تذكر أن تنظر إلى asm الأصلي للدالة وترى ما نعدله. ملاحظة جانبية: إذا أصلحت إفساد المكدس وقمت بما كانت الدالة تهدف إلى القيام به داخل المعالج الخاص بك سيبدو الأمر وكأن شيئاً لم يتم تعديله! :)
//getting address to function
FunctionAddress = module + 0xD70C;
BYTE shellcode[] = { 0x48, 0x83, 0xEC, 0x38, 0x48, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x49, 0xBA, 0xEE, 0xCF, 0x39, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x48, 0xFF, 0xC0, 0x48, 0xFF, 0xC8, 0xFF, 0x15, 0xD4, 0x20, 0x07, 0x00, 0xE9, 0x00, 0x00, 0x00, 0x00 };
memcpy(&shellcode[6], &hkfunction, 8);
DisableWriteProtection();
memcpy((PVOID)FunctionAddress, &shellcode, sizeof(shellcode));
EnableWriteProtection();
الخلاصة
آمل أنك استفدت شيئاً من هذا الشرح السريع فقط اعلم أنه يمكنك العثور على أدوات أخرى أيضاً التي ستفعل الكثير وكلما كانت أكثر تعقيداً كان ذلك أفضل.