
هذه الطريقة الجديدة لاستخدام NtQueueApcThreadEx من خلال إساءة استخدام معاملات ApcRoutine و SystemArgument[0-3] عبر تمرير أداة pop r32; ret عشوائية، يمكن استخدامها لحقن كود خفي.
تُعد هذه الطريقة المبتكرة لاستخدام NtQueueApcThreadEx عبر إساءة استغلال مُعاملات ApcRoutine وSystemArgument[0-3] بتمرير أداة pop r32; ret عشوائية، وسيلةً يمكن استخدامها لحقن الكود بشكل خفي. في هذا الإثبات (PoC)، يتم اختيار الأداة في هذه الحالة عشوائيًا من منطقة ذاكرة ntdll.dll التي تطابق نمطًا معينًا. وهذا يعني أن الأداة تعيد مجرى التنفيذ إلى الـ shellcode.
IMAGE_SCN_CNT_CODE وIMAGE_SCN_MEM_EXECUTE داخل ntdll.dll في الذاكرة.NtQueueApcThreadEx، بحيث يكون ApcRoutine = عنوان الأداة المختار عشوائيًا، وSystemArgument = مؤشر إلى الـ shellcode.NtQueueApcThreadEx مؤشر التعليمات (IP) على الانتقال إلى الأداة ntdll.dll!<random pop r32; ret>، ثم العودة إلى SystemArgument1.هناك مئات الأدوات التي يمكن استخدامها داخل ntdll.dll (من إصدار البناء الخاص بي على الأقل) - مما يجعل اكتشاف هذا الأمر صعبًا.
عند فحص الاستدعاء، وخلافًا لحقن APC التقليدي، سيشير ApcRoutine ببساطة إلى عنوان شرعي داخل ntdll.dll.

من المرجح أن يكون اكتشاف هذا الأمر صعبًا بعض الشيء. عند فحص الاستدعاءات إلى NtQueueApcThreadEx، تحقق مما إذا كانت أي من الوسائط تشير إلى ذاكرة قابلة للتنفيذ. هناك مسار آخر محتمل للكشف وهو التحقق مما إذا كان ApcRoutine يشير إلى عنوان داخل ntdll - ولكن من المرجح أن يؤدي هذا إلى إطلاق الكثير من النتائج الإيجابية الخاطئة.
تم توثيق هذه التقنية في الأصل بالتفصيل في تقرير Avast عن Raspberry Robin هنا.