
रनटाइम पर वेक्टरेड एक्सेप्शन हैंडलर और हैश्ड लुकअप का उपयोग करके Windows APIs को रिज़ॉल्व करता है, ताकि इम्पोर्ट छिपाए जा सकें और आक्रामक पेलोड के रिवर्स इंजीनियरिंग को धीमा किया जा सके।
Dridex लोडर के 32-बिट API अस्पष्टीकरण से प्रेरित।
हम एक अपवाद हैंडलर सेट करते हैं।
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
फिर हम इस पते का उपयोग कर सकते हैं।
संभवतः रिवर्स इंजीनियर का जीवन कठिन बना देता है, जो हमेशा अच्छा है।