UnhookMe - An Universal Windows API Resolver And Unhooker Addressing Problem Of Invoking Unmonitored System Calls From Within Of Your Red Teams Malware
http://www.kitploit.com/2021/08/unhookme-universal-windows-api-resolver.html
___________________________
@hacking_Attack
@Hacking_Video
http://www.kitploit.com/2021/08/unhookme-universal-windows-api-resolver.html
___________________________
@hacking_Attack
@Hacking_Video
KitPloit - PenTest & Hacking Tools
UnhookMe - An Universal Windows API Resolver And Unhooker Addressing Problem Of Invoking Unmonitored System Calls From Within Of…
In the era of intrusive AVs and EDRs that introduce hot-patches to the running processes for their enhanced optics requirements, modern adversaries must have a robust tool to slide through these watchguards. The propsed implementation of dynamic (https://www.kitploit.com/search/label/Dynamic) imports resolver that would be capable of unhooking used functions in-the-fly is yet another step towards strengthening adversary resilience efforts. The solution I'm proposing here is to switch from using linker-resolved WinAPI imports, staying visibile in compiled executable's PE headers (Import Address Table specifically) to favor fully-dynamic approach insisting on resolving imports only in a dynamic fashion. Such dynamical resolver can be equipped with unhooking logic happening in the background, without any sort of guidance from the operator's side.
Showcase
___________________________
@hacking_Attack
@Hacking_Video
Showcase
___________________________
@hacking_Attack
@Hacking_Video
KitPloit - PenTest & Hacking Tools
Leading source of security tools, hacking tools, cybersecurity and network security. Learn about new tools and updates in one place.
Here's how UnhookMe example works: It presents us with the first MessageBoxW that is not subject for hooking Then we hook MessageBoxW prologue ourselves to make it always return 0 without displaying it's message Finally, we resolve MessageBoxW dynamically using the UnhookingImportResolver resolver, which will detect applied prologue patches and restore original bytes, effectively unhooking MessageBoxW functionality. In the meantime of popping message boxes, these are the loglines printed to console's stdout: [~] Resolved symbol kernel32.dll!CreateFileA
[~] Resolved symbol kernel32.dll!ReadProcessMemory
[~] Resolved symbol kernel32.dll!MapViewOfFile
[~] Resolved symbol kernel32.dll!VirtualProtectEx
[#] Found trampoline hook in symbol: MessageBoxW . Restored original bytes from file.
[~] Resolved symbol user32.dll!MessageBoxW
How to use it?
There are in total 5 C++ source code/header files that your solution need to include. However your main program file needs to include only two required headers, as detailed below. resolver.h - header containing most of the UnhookingImportResolver implementation and handy macrodefinitions resolver.cpp - source code with global options defined usings.h - a one big and nasty header file containing tens of using type definitions for commonly used WinAPIs PE.cpp - custom PE parser source code file PE.h - custom PE parser header file
Required headers
Your program will require only two headers being included: #include "usings.h"
#include "resolver.h"
Global options
There are couple of global options that can be changed affecting the way in which Resolver (https://www.kitploit.com/search/label/Resolver) works or reports it's activity. These are defined in the very beginning of resolver.cpp file: Resolver global options: globalQuietOption - set to true if you don't want to have any sort of output globalVerboseOption - set to true if you want to have detailed verbose output globalAntiSplicingOption - unhook resolved functions if they're hooked. globalLogFilePath - where to redirect output log lines. If empty, pick stdout. bool globalQuietOption = false;
bool globalVerboseOption = true;
bool globalAntiSplicingOption = true;
wchar_t globalLogFilePath[MAX_PATH] = L"";
Custom API type specification
In order to use Resolver a function pointer type must be first declared with using statement of strict form: using fn_FunctionName = ReturnType WINAPI (
ParamType1 paramName1,
...,
ParamTypeN paramNameN,
); This repository comes with usings.h header file containing predefined using types for tens of popular Windows APIs. The FunctionName will correspond to the WinAPI that we want to have ImportResolver resolve and that function pointer must be marked as having WINAPI call convention ( __stdcall on x86 and __fastcall on x64). The ReturnType must precede WINAPI type modifier.
Function resolution and usage
Having function pointer type defined like specified above, we will be able to use it in the following manner: RESOLVE(libraryName, FunctionName);
ReturnType output = _FunctionName(param1, ..., paramN); The macro RESOLVE takes care of instantiating ImportResolver templated object and adjust specifed library's name. Resolver introduces several more Macrodefinitions offering easy to use (https://www.kitploit.com/search/label/Easy%20To%20Use) in various circumstances constructor invocation: #define RESOLVE(mod, func) RESOLVE_PARAMETERIZED(mod, func, ::globalVerboseOption, ::globalAntiSplicingOption)
#define RESOLVE_NO_UNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, ::globalVerboseOption, false)
#define RESOLVE_VERBOSE_UNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, true, true)
#define RESOLVE_VERBOSE_NOUNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, true, false)
___________________________
@hacking_Attack
@Hacking_Video
[~] Resolved symbol kernel32.dll!ReadProcessMemory
[~] Resolved symbol kernel32.dll!MapViewOfFile
[~] Resolved symbol kernel32.dll!VirtualProtectEx
[#] Found trampoline hook in symbol: MessageBoxW . Restored original bytes from file.
[~] Resolved symbol user32.dll!MessageBoxW
How to use it?
There are in total 5 C++ source code/header files that your solution need to include. However your main program file needs to include only two required headers, as detailed below. resolver.h - header containing most of the UnhookingImportResolver implementation and handy macrodefinitions resolver.cpp - source code with global options defined usings.h - a one big and nasty header file containing tens of using type definitions for commonly used WinAPIs PE.cpp - custom PE parser source code file PE.h - custom PE parser header file
Required headers
Your program will require only two headers being included: #include "usings.h"
#include "resolver.h"
Global options
There are couple of global options that can be changed affecting the way in which Resolver (https://www.kitploit.com/search/label/Resolver) works or reports it's activity. These are defined in the very beginning of resolver.cpp file: Resolver global options: globalQuietOption - set to true if you don't want to have any sort of output globalVerboseOption - set to true if you want to have detailed verbose output globalAntiSplicingOption - unhook resolved functions if they're hooked. globalLogFilePath - where to redirect output log lines. If empty, pick stdout. bool globalQuietOption = false;
bool globalVerboseOption = true;
bool globalAntiSplicingOption = true;
wchar_t globalLogFilePath[MAX_PATH] = L"";
Custom API type specification
In order to use Resolver a function pointer type must be first declared with using statement of strict form: using fn_FunctionName = ReturnType WINAPI (
ParamType1 paramName1,
...,
ParamTypeN paramNameN,
); This repository comes with usings.h header file containing predefined using types for tens of popular Windows APIs. The FunctionName will correspond to the WinAPI that we want to have ImportResolver resolve and that function pointer must be marked as having WINAPI call convention ( __stdcall on x86 and __fastcall on x64). The ReturnType must precede WINAPI type modifier.
Function resolution and usage
Having function pointer type defined like specified above, we will be able to use it in the following manner: RESOLVE(libraryName, FunctionName);
ReturnType output = _FunctionName(param1, ..., paramN); The macro RESOLVE takes care of instantiating ImportResolver templated object and adjust specifed library's name. Resolver introduces several more Macrodefinitions offering easy to use (https://www.kitploit.com/search/label/Easy%20To%20Use) in various circumstances constructor invocation: #define RESOLVE(mod, func) RESOLVE_PARAMETERIZED(mod, func, ::globalVerboseOption, ::globalAntiSplicingOption)
#define RESOLVE_NO_UNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, ::globalVerboseOption, false)
#define RESOLVE_VERBOSE_UNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, true, true)
#define RESOLVE_VERBOSE_NOUNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, true, false)
___________________________
@hacking_Attack
@Hacking_Video
KitPloit - PenTest & Hacking Tools
Leading source of security tools, hacking tools, cybersecurity and network security. Learn about new tools and updates in one place.
#define RESOLVE_NOVERBOSE_UNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, false, true)
#define RESOLVE_NOVERBOSE_NOUNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, false, false) Resolver's constructor: ImportResolver( std::string dllName, std::string funcName, bool _verbose = false, bool _unhook = false, bool *_wasItHooked = nullptr ) "> template
ImportResolver(
std::string dllName,
std::string funcName,
bool _verbose = false,
bool _unhook = false,
bool *_wasItHooked = nullptr
)
How does it work?
The underlaying resolver leverages custom PE headers parser, that processes every referenced DLL module to map their exports and verify that module's PE headers integrity as well as integrity of referenced function's stub bytes. The idea is following: Firstly we issue LoadLibrary to load referenced by the user library (the one specified as first parameter for RESOLVE macro) if it could not be reached through GetModuleHandle. Then we process loaded/referenced library's PE headers, map its exports, retrieve array of exports addresses as well as compute these addresses ourselves for cross-verification. If address of a routine defined in DLL's Export Address Table doesn't correspond to what we would expect, the export is considered EAT hooked. The same goes if our Executable Import Address Table (IAT) entry for that function was altered and no longer points to the correct spot in DLL's code section - then the function is considered to be IAT hooked. Assuming no hooks were found so far, we fetch first N bytes of the function's prologue and compare them to what's in DLL's file stored in disk. If there is miscrepancy between bytes fetched from memory and from file - we consider function was inline patched (hot-patched). If the function was considered hooked - we return original export's address (the one we computed ourselves) and/or unhook the entry. If there were patch bytes in place, we'll restore them. Finally, in order to optimize resolver's performance (https://www.kitploit.com/search/label/Performance) impact - we cache all of the loaded modules imagebases and resolved functions addresses and return them from a cache (being std::map ) during subsequent hits. Among the problems such dynamically-unhooking resolver faced are the issues with traversing forwarded APIs (a DLL may contain Export thunk saying that this function is not implemented in this module, but it is in another one) - which although this implementation has support for, sometimes it brokes its traversal logic.
Author
Mariusz Banach / mgeeky (@mariuszbit)
Download UnhookMe (https://github.com/mgeeky/UnhookMe)
___________________________
@hacking_Attack
@Hacking_Video
#define RESOLVE_NOVERBOSE_NOUNHOOK(mod, func) RESOLVE_PARAMETERIZED(mod, func, false, false) Resolver's constructor: ImportResolver( std::string dllName, std::string funcName, bool _verbose = false, bool _unhook = false, bool *_wasItHooked = nullptr ) "> template
ImportResolver(
std::string dllName,
std::string funcName,
bool _verbose = false,
bool _unhook = false,
bool *_wasItHooked = nullptr
)
How does it work?
The underlaying resolver leverages custom PE headers parser, that processes every referenced DLL module to map their exports and verify that module's PE headers integrity as well as integrity of referenced function's stub bytes. The idea is following: Firstly we issue LoadLibrary to load referenced by the user library (the one specified as first parameter for RESOLVE macro) if it could not be reached through GetModuleHandle. Then we process loaded/referenced library's PE headers, map its exports, retrieve array of exports addresses as well as compute these addresses ourselves for cross-verification. If address of a routine defined in DLL's Export Address Table doesn't correspond to what we would expect, the export is considered EAT hooked. The same goes if our Executable Import Address Table (IAT) entry for that function was altered and no longer points to the correct spot in DLL's code section - then the function is considered to be IAT hooked. Assuming no hooks were found so far, we fetch first N bytes of the function's prologue and compare them to what's in DLL's file stored in disk. If there is miscrepancy between bytes fetched from memory and from file - we consider function was inline patched (hot-patched). If the function was considered hooked - we return original export's address (the one we computed ourselves) and/or unhook the entry. If there were patch bytes in place, we'll restore them. Finally, in order to optimize resolver's performance (https://www.kitploit.com/search/label/Performance) impact - we cache all of the loaded modules imagebases and resolved functions addresses and return them from a cache (being std::map ) during subsequent hits. Among the problems such dynamically-unhooking resolver faced are the issues with traversing forwarded APIs (a DLL may contain Export thunk saying that this function is not implemented in this module, but it is in another one) - which although this implementation has support for, sometimes it brokes its traversal logic.
Author
Mariusz Banach / mgeeky (@mariuszbit)
Download UnhookMe (https://github.com/mgeeky/UnhookMe)
___________________________
@hacking_Attack
@Hacking_Video
Kitploit
Kitploit – Maintenance in Progress
Kitploit is temporarily under maintenance. We’ll be back shortly with improvements.
KitPloit - PenTest Tools!
UnhookMe - An Universal Windows API Resolver And Unhooker Addressing Problem Of Invoking Unmonitored System Calls From Within Of Your Red Teams Malware
___________________________
@hacking_Attack
@Hacking_Video
UnhookMe - An Universal Windows API Resolver And Unhooker Addressing Problem Of Invoking Unmonitored System Calls From Within Of Your Red Teams Malware
___________________________
@hacking_Attack
@Hacking_Video
KitPloit - PenTest & Hacking Tools
UnhookMe - An Universal Windows API Resolver And Unhooker Addressing Problem Of Invoking Unmonitored System Calls From Within Of…
Hacking Articles Tips Tricks Videos Tutorials
Photo
Hacking on Medium
Cyber Security Due Diligence in M&A
https://cdn-images-1.medium.com/max/1024/1*47YmtlEgfBnM0l4aciTvTQ.jpeg
The mid and long-term effects of the pandemic on M&A
Continue reading on Medium »
___________________________
@hacking_Attack
@Hacking_Video
Cyber Security Due Diligence in M&A
https://cdn-images-1.medium.com/max/1024/1*47YmtlEgfBnM0l4aciTvTQ.jpeg
The mid and long-term effects of the pandemic on M&A
Continue reading on Medium »
___________________________
@hacking_Attack
@Hacking_Video
Medium
Cyber Security Due Diligence in M&A
The mid and long-term effects of the pandemic on M&A
Hacking Articles Tips Tricks Videos Tutorials
Photo
Hacking on Medium
Hub Weekly Digest: US Labor Dept.,
https://cdn-images-1.medium.com/max/2600/1*YECeOxlko9KoOJNw8RNm3A.jpeg
HUB Security’s weekly digest covers top stories happening around the world related to cyber attacks, threats and global cybersecurity news.
Continue reading on HUB Security »
___________________________
@hacking_Attack
@Hacking_Video
Hub Weekly Digest: US Labor Dept.,
https://cdn-images-1.medium.com/max/2600/1*YECeOxlko9KoOJNw8RNm3A.jpeg
HUB Security’s weekly digest covers top stories happening around the world related to cyber attacks, threats and global cybersecurity news.
Continue reading on HUB Security »
___________________________
@hacking_Attack
@Hacking_Video
Medium
Hub Weekly Digest: US Labor Dept., Enterprise Security, Supply Chain Security, Kaseya Ransomware and Healthcare Attacks
HUB Security’s weekly digest covers top stories happening around the world related to cyber attacks, threats and global cybersecurity news.
Hacking Articles Tips Tricks Videos Tutorials
Photo
Hacking on Medium
HAWK — HackTheBox WriteUp
https://cdn-images-1.medium.com/max/725/1*urGTEQeRWqTiaMGPShf7Ig.png
This box is a part of TJnull’s list of boxes. I am doing these boxes as a part of my preparation for OSCP. I will be sharing the writeups…
Continue reading on Medium »
___________________________
@hacking_Attack
@Hacking_Video
HAWK — HackTheBox WriteUp
https://cdn-images-1.medium.com/max/725/1*urGTEQeRWqTiaMGPShf7Ig.png
This box is a part of TJnull’s list of boxes. I am doing these boxes as a part of my preparation for OSCP. I will be sharing the writeups…
Continue reading on Medium »
___________________________
@hacking_Attack
@Hacking_Video
Medium
HAWK — HackTheBox WriteUp
This box is a part of TJnull’s list of boxes. I am doing these boxes as a part of my preparation for OSCP. I will be sharing the writeups…
Hacking Articles Tips Tricks Videos Tutorials
Photo
Hacking on Medium
HackTheBox - SecNotes
https://cdn-images-1.medium.com/max/1190/0*lO8cU6k14uCS_nUI.png
Bu, OSCP için HackTheBox adında yayınlayacağım emekliye ayrılmış HTB makinelerinden oluşacak olan bir dizi blogun 3. blogu. TJ_Null…
Continue reading on Medium »
___________________________
@hacking_Attack
@Hacking_Video
HackTheBox - SecNotes
https://cdn-images-1.medium.com/max/1190/0*lO8cU6k14uCS_nUI.png
Bu, OSCP için HackTheBox adında yayınlayacağım emekliye ayrılmış HTB makinelerinden oluşacak olan bir dizi blogun 3. blogu. TJ_Null…
Continue reading on Medium »
___________________________
@hacking_Attack
@Hacking_Video
Medium
HackTheBox - SecNotes
Bu, OSCP için HackTheBox adında yayınlayacağım emekliye ayrılmış HTB makinelerinden oluşacak olan bir dizi blogun 3. blogu. TJ_Null…
Apron Network Supports Polkadot Ecosystem With Node Service
https://apron-network.medium.com/apron-network-supports-polkadot-ecosystem-with-node-service-9a4eb9823b5b?source=rss------bug_bounty-5
___________________________
@hacking_Attack
@Hacking_Video
https://apron-network.medium.com/apron-network-supports-polkadot-ecosystem-with-node-service-9a4eb9823b5b?source=rss------bug_bounty-5
___________________________
@hacking_Attack
@Hacking_Video
Medium
Apron Network Supports Polkadot Ecosystem With Node Service
As of Q2 2021, we have more than 400 projects built on the Polkadot ecosystem, this was to occur with progress in the development of the…
As of Q2 2021, we have more than 400 projects built on the Polkadot ecosystem, this was to occur with progress in the development of the…Continue reading on Medium » (https://apron-network.medium.com/apron-network-supports-polkadot-ecosystem-with-node-service-9a4eb9823b5b?source=rss------bug_bounty-5)
___________________________
@hacking_Attack
@Hacking_Video
___________________________
@hacking_Attack
@Hacking_Video
Medium
Apron Network Supports Polkadot Ecosystem With Node Service
As of Q2 2021, we have more than 400 projects built on the Polkadot ecosystem, this was to occur with progress in the development of the…
hacking: security in practice
Where can I find the HDD-drive Conti leak?
( Catch-up: a disgrunteled affiliate of the Conti ransomware gang leaked some training materials)
Does anyone know the forum or the exact files? Is there a torrent for them? I am positivley DYING to see them and I am planning on translating them from russian to english with a buddy of mine. I have scoured the entire web for them, looked at so many forums, but I still cant find them.
submitted by /u/StillPackage4369
[link] [comments]
___________________________
@hacking_Attack
@Hacking_Video
Where can I find the HDD-drive Conti leak?
( Catch-up: a disgrunteled affiliate of the Conti ransomware gang leaked some training materials)
Does anyone know the forum or the exact files? Is there a torrent for them? I am positivley DYING to see them and I am planning on translating them from russian to english with a buddy of mine. I have scoured the entire web for them, looked at so many forums, but I still cant find them.
submitted by /u/StillPackage4369
[link] [comments]
___________________________
@hacking_Attack
@Hacking_Video
reddit
Where can I find the HDD-drive Conti leak?
( Catch-up: a disgrunteled affiliate of the Conti ransomware gang leaked some training materials) Does anyone know the forum or the exact files?...