mirror of
https://github.com/pygrum/gimmick
synced 2026-06-06 16:34:34 +00:00
use inbuilt status values
This commit is contained in:
+2
-2
@@ -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 };
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
Reference in New Issue
Block a user