use inbuilt status values

This commit is contained in:
pygrum
2024-06-19 17:19:51 +01:00
parent ad10dd4c1e
commit fb0e5c2162
3 changed files with 19 additions and 21 deletions
+2 -2
View File
@@ -31,11 +31,11 @@ SEC( vmp0 ) DWORD __stdcall Message(PGK_CONTEXT Context, PVOID Args)
int main()
{
GKSTATUS Status = GK_SUCCESS;
NTSTATUS Status = STATUS_SUCCESS;
GK_CONTEXT Context = {};
DWORD ThreadId = 0;
UCHAR Key[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf};
if ((Status = GkInitContext(GkGetModuleHandle(0), &Context, Key)) != GK_SUCCESS) {
if ((Status = GkInitContext(GkGetModuleHandle(0), &Context, Key)) != STATUS_SUCCESS) {
return Status;
}
greet greetH = { .greeting = hello };
+12 -12
View File
@@ -4,7 +4,7 @@
#include <stdio.h>
#endif
GKSTATUS GkInitContext( LPVOID BaseAddress, PGK_CONTEXT Context, PUCHAR Key )
NTSTATUS GkInitContext( LPVOID BaseAddress, PGK_CONTEXT Context, PUCHAR Key )
{
PIMAGE_NT_HEADERS NtHeaders = NULL;
PIMAGE_FILE_HEADER FileHeader = NULL;
@@ -80,12 +80,12 @@ GKSTATUS GkInitContext( LPVOID BaseAddress, PGK_CONTEXT Context, PUCHAR Key )
// set to next section header
Section = (CHAR*)Section + sizeof(IMAGE_SECTION_HEADER);
}
return GK_SUCCESS;
return STATUS_SUCCESS;
}
GKSTATUS GkFreeSectionContext( PGK_CONTEXT Context )
NTSTATUS GkFreeSectionContext( PGK_CONTEXT Context )
{
DWORD status = GK_SUCCESS;
DWORD status = STATUS_SUCCESS;
PGK_SECTION_CONTEXT SectionContext = Context->SectionContexts;
do
{
@@ -97,7 +97,7 @@ GKSTATUS GkFreeSectionContext( PGK_CONTEXT Context )
return status;
}
GKSTATUS GkGet( PGK_CONTEXT Context, PVOID Data)
NTSTATUS GkGet( PGK_CONTEXT Context, PVOID Data)
{
// find section that data lives in
PGK_SECTION_CONTEXT SectionContext = NULL;
@@ -149,13 +149,13 @@ GKSTATUS GkGet( PGK_CONTEXT Context, PVOID Data)
// update before release so that encryptor knows that there's now an accessor
SectionContext->Accessors += 1;
Context->ReleaseMutex(SectionContext->Mutex);
return GK_SUCCESS;
return STATUS_SUCCESS;
}
}
return GK_ERROR_ADDRESS_SECTION_NOT_FOUND;
}
GKSTATUS GkRelease( PGK_CONTEXT Context, PVOID Data )
NTSTATUS GkRelease( PGK_CONTEXT Context, PVOID Data )
{
// find section that data lives in
PGK_SECTION_CONTEXT SectionContext = NULL;
@@ -203,7 +203,7 @@ GKSTATUS GkRelease( PGK_CONTEXT Context, PVOID Data )
#endif
// release after notify so that decryptor has the correct encryption bool
Context->ReleaseMutex(SectionContext->Mutex);
return GK_SUCCESS;
return STATUS_SUCCESS;
}
}
return GK_ERROR_ADDRESS_SECTION_NOT_FOUND;
@@ -215,14 +215,14 @@ DWORD WINAPI GkRunEx( LPVOID Args )
return GkRun(GkArgs->Context, GkArgs->Function, GkArgs->Args, &GkArgs->ReturnValue);
}
GKSTATUS GkRun( PGK_CONTEXT Context, LPGK_ROUTINE Function, LPVOID Args, PDWORD ReturnValue )
NTSTATUS GkRun( PGK_CONTEXT Context, LPGK_ROUTINE Function, LPVOID Args, PDWORD ReturnValue )
{
typedef struct {
PCHAR greeting;
} greet, *pgreet;
GKSTATUS Status = GK_SUCCESS;
if ((Status = GkGet(Context, Function)) != GK_SUCCESS)
NTSTATUS Status = STATUS_SUCCESS;
if ((Status = GkGet(Context, Function)) != STATUS_SUCCESS)
return Status;
#ifdef DEBUG
@@ -232,7 +232,7 @@ GKSTATUS GkRun( PGK_CONTEXT Context, LPGK_ROUTINE Function, LPVOID Args, PDWORD
#ifdef DEBUG
printf("[*][%p] -- exited with code 0x%.4x\n", Function, *ReturnValue);
#endif
if ((Status = GkRelease(Context, Function)) != GK_SUCCESS)
if ((Status = GkRelease(Context, Function)) != STATUS_SUCCESS)
return Status;
return Status;
}
+5 -7
View File
@@ -13,8 +13,6 @@
#define WIN_PROC( c, m, f, h ) c->f = (__typeof__(f)*)GkGetProcAddress(c, c->m, h)
typedef DWORD GKSTATUS;
#define GK_SUCCESS 0x0
#define GK_ERROR_BAD_NT_SIGNATURE 0x100
#define GK_ERROR_SECTION_CTX_ALLOC_FAILED 0x101
#define GK_ERROR_USTRING_ALLOC_FAILED 0x102
@@ -159,20 +157,20 @@ typedef DWORD (__stdcall *LPGK_ROUTINE) (
);
// Initialises Gimmick context
GKSTATUS GkInitContext( LPVOID BaseAddress, PGK_CONTEXT Context, PUCHAR Key );
NTSTATUS GkInitContext( LPVOID BaseAddress, PGK_CONTEXT Context, PUCHAR Key );
// Frees Gimmick section context that was allocated with GkInitContext
GKSTATUS GkFreeSectionContext( PGK_CONTEXT Context );
NTSTATUS GkFreeSectionContext( PGK_CONTEXT Context );
// Retrieve handle to a module from PEB loader data
HANDLE GkGetModuleHandle( DWORD Hash );
// Get process address from loaded module data
FARPROC GkGetProcAddress( PGK_CONTEXT Context, HANDLE hModule, DWORD Hash );
// Request data from an encrypted section. Gimmick ensures the section is protected while the data is being used
GKSTATUS GkGet( PGK_CONTEXT Context, PVOID Data );
NTSTATUS GkGet( PGK_CONTEXT Context, PVOID Data );
// Signal that data accessed by GkGet is no longer in use
GKSTATUS GkRelease( PGK_CONTEXT Context, HANDLE Data );
NTSTATUS GkRelease( PGK_CONTEXT Context, HANDLE Data );
// Runs the function with the provided arguments (e.g. a struct pointer) and returns its return value. decrypting the section
// it exists in if necesssary
GKSTATUS GkRun( PGK_CONTEXT Context, LPGK_ROUTINE Function, PVOID Args, OUT PDWORD ReturnValue );
NTSTATUS GkRun( PGK_CONTEXT Context, LPGK_ROUTINE Function, PVOID Args, OUT PDWORD ReturnValue );
// Thread routine to run a function asyncronously. Pass a pointer to the GK_ARGS struct
DWORD WINAPI GkRunEx( LPVOID Args );