
يحلّ استدعاءات Windows API في وقت التشغيل باستخدام معالجات الاستثناءات الموجهة وعمليات بحث مُجزّأة، وذلك لإخفاء الاستيرادات وإبطاء الهندسة العكسية للحمولات الهجومية.
مستوحى من تعتيم واجهة برمجة التطبيقات 32 بت الخاص بـ Dridex Loader.
نقوم بإعداد معالج استثناءات.
AddVectoredExceptionHandler( CALL_FIRST, ApiResolverHandler );
سيتعامل معالج الاستثناءات هذا فقط مع الاستثناءات التي تُرمى كـ EXCEPTION_BREAKPOINT. عندما نرميه نحن، نتمكن من التقاط CONTEXT. يمكننا الحصول على الوسائط التي تم تمريرها.
سيحمل كل من RDX و R8 هاش الدالة وهاش الوحدة. يمكننا بعد ذلك حلهما ديناميكيًا باستخدام GetProcAddrExH كما هو موضح
ExceptionInfo->ContextRecord->Rax = (ULONG_PTR)GetProcAddrExH( ExceptionInfo->ContextRecord->Rdx, ExceptionInfo->ContextRecord->R8 );
غالبًا ما يُستخدم RAX لإرجاع القيم. عندما نعود، إذا تم حل العنوان، فسيتم إرجاعه.
LazyRet proc
int 3 ; raise an exception
ret ; rax will hold address
LazyRet endp
يمكننا بعد ذلك استخدام هذا العنوان.
من المحتمل أن يجعل حياة مهندس الهندسة العكسية أصعب، وهذا أمر جيد دائمًا.