
在运行时使用向量化异常处理程序和哈希查找来解析 Windows API,以隐藏导入并减缓对攻击性载荷的逆向工程。
灵感源自 Dridex Loader 的 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
然后我们就可以使用这个地址。
可能会让逆向工程师的生活更加艰难,这总是好事。