mirror of
https://gitlab.com/niansa/PolicyToolLib.git
synced 2025-03-06 20:48:27 +01:00
Minor improvements
This commit is contained in:
parent
a7fdb5ca58
commit
f07479fa36
2 changed files with 38 additions and 3 deletions
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
|
#include "../wine_winternl.h"
|
||||||
|
#include <ntstatus.h>
|
||||||
#include <detours.h>
|
#include <detours.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +12,8 @@
|
||||||
class AdminImpersonate : public ModuleBase {
|
class AdminImpersonate : public ModuleBase {
|
||||||
inline static decltype(&IsUserAnAdmin) TrueIsUserAnAdmin;
|
inline static decltype(&IsUserAnAdmin) TrueIsUserAnAdmin;
|
||||||
inline static decltype(&CheckTokenMembership) TrueCheckTokenMembership;
|
inline static decltype(&CheckTokenMembership) TrueCheckTokenMembership;
|
||||||
|
inline static decltype(&NtOpenFile) TrueNtOpenFile;
|
||||||
|
inline static decltype(&NtCreateFile) TrueNtCreateFile;
|
||||||
|
|
||||||
static
|
static
|
||||||
BOOL __stdcall DetourIsUserAnAdmin() {
|
BOOL __stdcall DetourIsUserAnAdmin() {
|
||||||
|
@ -38,15 +42,49 @@ class AdminImpersonate : public ModuleBase {
|
||||||
return bRealResult;
|
return bRealResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NTSTATUS NTAPI DetourNtOpenFile(OUT PHANDLE FileHandle,
|
||||||
|
IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||||
|
IN ULONG ShareAccess, IN ULONG OpenOptions) {
|
||||||
|
DWORD iStatus = TrueNtOpenFile(FileHandle, DesiredAccess, ObjectAttributes,
|
||||||
|
IoStatusBlock, ShareAccess, OpenOptions);
|
||||||
|
|
||||||
|
if (iStatus == STATUS_SHARING_VIOLATION || iStatus == STATUS_ACCESS_DENIED) {
|
||||||
|
return STATUS_NO_SUCH_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NTSTATUS NTAPI DetourNtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess,
|
||||||
|
IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock,
|
||||||
|
IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess,
|
||||||
|
IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength) {
|
||||||
|
NTSTATUS iStatus = TrueNtCreateFile(FileHandle, DesiredAccess, ObjectAttributes, IoStatusBlock, AllocationSize,
|
||||||
|
FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer, EaLength);
|
||||||
|
|
||||||
|
if (iStatus == STATUS_SHARING_VIOLATION || iStatus == STATUS_ACCESS_DENIED) {
|
||||||
|
return STATUS_DISK_FULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iStatus;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AdminImpersonate() {
|
AdminImpersonate() {
|
||||||
TrueIsUserAnAdmin = IsUserAnAdmin;
|
TrueIsUserAnAdmin = IsUserAnAdmin;
|
||||||
TrueCheckTokenMembership = CheckTokenMembership;
|
TrueCheckTokenMembership = CheckTokenMembership;
|
||||||
|
TrueNtOpenFile = reinterpret_cast<decltype(&NtOpenFile)>(GetProcAddress(LoadLibraryW(L"ntdll.dll"), "NtOpenFile"));
|
||||||
|
TrueNtCreateFile = reinterpret_cast<decltype(&NtCreateFile)>(GetProcAddress(LoadLibraryW(L"ntdll.dll"), "NtCreateFile"));
|
||||||
|
DetourAttach(&reinterpret_cast<PVOID&>(TrueNtOpenFile), reinterpret_cast<void*>(DetourNtOpenFile));
|
||||||
|
DetourAttach(&reinterpret_cast<PVOID&>(TrueNtCreateFile), reinterpret_cast<void*>(DetourNtCreateFile));
|
||||||
DetourAttach(&reinterpret_cast<PVOID&>(TrueIsUserAnAdmin), reinterpret_cast<void*>(IsUserAnAdmin));
|
DetourAttach(&reinterpret_cast<PVOID&>(TrueIsUserAnAdmin), reinterpret_cast<void*>(IsUserAnAdmin));
|
||||||
DetourAttach(&reinterpret_cast<PVOID&>(TrueCheckTokenMembership), reinterpret_cast<void*>(CheckTokenMembership));
|
DetourAttach(&reinterpret_cast<PVOID&>(TrueCheckTokenMembership), reinterpret_cast<void*>(CheckTokenMembership));
|
||||||
}
|
}
|
||||||
~AdminImpersonate() {
|
~AdminImpersonate() {
|
||||||
|
DetourDetach(&reinterpret_cast<PVOID&>(TrueNtOpenFile), reinterpret_cast<void*>(DetourNtOpenFile));
|
||||||
|
DetourDetach(&reinterpret_cast<PVOID&>(TrueNtCreateFile), reinterpret_cast<void*>(DetourNtCreateFile));
|
||||||
DetourDetach(&reinterpret_cast<PVOID&>(TrueIsUserAnAdmin), reinterpret_cast<void*>(IsUserAnAdmin));
|
DetourDetach(&reinterpret_cast<PVOID&>(TrueIsUserAnAdmin), reinterpret_cast<void*>(IsUserAnAdmin));
|
||||||
DetourDetach(&reinterpret_cast<PVOID&>(TrueCheckTokenMembership), reinterpret_cast<void*>(CheckTokenMembership));
|
DetourDetach(&reinterpret_cast<PVOID&>(TrueCheckTokenMembership), reinterpret_cast<void*>(CheckTokenMembership));
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
#include "../wine_winternl.h"
|
#include "../wine_winternl.h"
|
||||||
#include <detours.h>
|
#include <detours.h>
|
||||||
|
|
||||||
#define STATUS_SHARING_VIOLATION 0xC0000043
|
|
||||||
#define STATUS_ACCESS_DENIED 0xC0000022
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RemoteLockBreak : public ModuleBase {
|
class RemoteLockBreak : public ModuleBase {
|
||||||
|
|
Loading…
Add table
Reference in a new issue