Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
VehApiResolve — Resolves Windows APIs at runtime using vectored exception handlers and hashed lookups to hide imports and slow reverse engineering of offensive payloads. | Kitploit
Tools/GitHubGitHub/rad9800/vehapiresolve
Red TeamingPayload DevelopmentAdversarial Attack
GitHubrad9800/vehapiresolve

VehApiResolve

Resolves Windows APIs at runtime using vectored exception handlers and hashed lookups to hide imports and slow reverse engineering of offensive payloads.

View Repository
1182444 years agoReviewed by Kitploit

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

VehApiResolve

Inspired by Dridex Loader's 32 bit API obfuscation.

How does this work?

We setup an exception handler.

root@kitploit:~
AddVectoredExceptionHandler( CALL_FIRST, ApiResolverHandler );

This exception handler will only handle exception's thrown as EXCEPTION_BREAKPOINT. When it is thrown by us, we're able to capture the CONTEXT. We can get the arguments passed. RDX and R8 will hold our function and module hash. We can then dynamically resolve them with GetProcAddrExH as seen

root@kitploit:~
ExceptionInfo->ContextRecord->Rax = (ULONG_PTR)GetProcAddrExH( ExceptionInfo->ContextRecord->Rdx, ExceptionInfo->ContextRecord->R8 );

The RAX is often used to return values. When we return, if the address was resolved, it'll be returned.

root@kitploit:~
LazyRet proc
	int 3	; raise an exception 
	ret		; rax will hold address
LazyRet endp
  1. Raise an exception.
  • Handle this exception.
  • Resolve the required function.
  • Store it in RAX.
  • Return.
  • We can then use this address.

    Why?

    Probably makes a reverse engineers life harder, which is always good.

    Download Tool