2015-03-28 12:00:29 +00:00
|
|
|
/*******************************************************************************
|
|
|
|
*
|
2019-03-19 08:47:16 +00:00
|
|
|
* (C) COPYRIGHT AUTHORS, 2014 - 2019
|
2015-03-28 12:00:29 +00:00
|
|
|
*
|
|
|
|
* TITLE: GLOBAL.H
|
|
|
|
*
|
2019-03-19 08:47:16 +00:00
|
|
|
* VERSION: 3.17
|
2015-03-28 12:00:29 +00:00
|
|
|
*
|
2019-03-19 08:47:16 +00:00
|
|
|
* DATE: 18 Mar 2019
|
2015-03-28 12:00:29 +00:00
|
|
|
*
|
|
|
|
* Common header file for the program support routines.
|
|
|
|
*
|
|
|
|
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
|
|
* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
|
|
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
|
|
* PARTICULAR PURPOSE.
|
|
|
|
*
|
|
|
|
*******************************************************************************/
|
2015-11-16 15:22:39 +00:00
|
|
|
#pragma once
|
|
|
|
|
2016-04-16 03:46:41 +00:00
|
|
|
#if !defined UNICODE
|
|
|
|
#error ANSI build is not supported
|
|
|
|
#endif
|
|
|
|
|
2018-10-11 08:42:35 +00:00
|
|
|
#include "shared\libinc.h"
|
2016-04-16 03:46:41 +00:00
|
|
|
|
2015-03-28 12:00:29 +00:00
|
|
|
//disable nonmeaningful warnings.
|
|
|
|
#pragma warning(disable: 4005) // macro redefinition
|
|
|
|
#pragma warning(disable: 4055) // %s : from data pointer %s to function pointer %s
|
|
|
|
#pragma warning(disable: 4152) // nonstandard extension, function/data pointer conversion in expression
|
|
|
|
#pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
|
|
|
|
#pragma warning(disable: 6102) // Using %s from failed function call at line %u
|
2017-06-22 07:17:35 +00:00
|
|
|
#pragma warning(disable: 6258) // Using TerminateThread does not allow proper thread clean up
|
2016-04-16 03:46:41 +00:00
|
|
|
#pragma warning(disable: 6320) // exception-filter expression is the constant EXCEPTION_EXECUTE_HANDLER
|
2018-12-12 07:44:47 +00:00
|
|
|
#pragma warning(disable: 6255 6263) // alloca
|
2015-03-28 12:00:29 +00:00
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
#define PAYLOAD_ID_NONE MAXDWORD
|
2018-09-02 07:28:59 +00:00
|
|
|
#define KONGOU_IDR 0xFFFFFFFE
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2015-11-16 15:22:39 +00:00
|
|
|
#ifdef _WIN64
|
2016-04-16 03:46:41 +00:00
|
|
|
#include "bin64res.h"
|
|
|
|
#define FUBUKI_ID IDR_FUBUKI64
|
|
|
|
#define HIBIKI_ID IDR_HIBIKI64
|
2016-07-07 14:16:12 +00:00
|
|
|
#define IKAZUCHI_ID IDR_IKAZUCHI64
|
2017-03-25 12:39:31 +00:00
|
|
|
#define AKATSUKI_ID IDR_AKATSUKI64
|
2017-07-13 13:12:55 +00:00
|
|
|
#define KAMIKAZE_ID IDR_KAMIKAZE
|
2018-05-25 08:27:20 +00:00
|
|
|
#define FUJINAMI_ID IDR_FUJINAMI
|
2018-09-02 07:28:59 +00:00
|
|
|
#define CHIYODA_ID IDR_CHIYODA
|
|
|
|
#define KONGOU_ID KONGOU_IDR
|
2015-11-16 15:22:39 +00:00
|
|
|
#else
|
2016-04-16 03:46:41 +00:00
|
|
|
#include "bin32res.h"
|
|
|
|
#define FUBUKI_ID IDR_FUBUKI32
|
|
|
|
#define HIBIKI_ID IDR_HIBIKI32
|
2016-07-07 14:16:12 +00:00
|
|
|
#define IKAZUCHI_ID IDR_IKAZUCHI32
|
2017-03-25 12:39:31 +00:00
|
|
|
#define AKATSUKI_ID PAYLOAD_ID_NONE //this module unavailable for 32 bit
|
2018-09-02 07:28:59 +00:00
|
|
|
#define KAMIKAZE_ID PAYLOAD_ID_NONE //this module unavailable for 32 bit
|
2018-05-25 08:27:20 +00:00
|
|
|
#define FUJINAMI_ID IDR_FUJINAMI //this module is dotnet x86 for any supported platform
|
2018-09-02 07:28:59 +00:00
|
|
|
#define CHIYODA_ID PAYLOAD_ID_NONE //this module unavailable for 32 bit
|
|
|
|
#define KONGOU_ID KONGOU_IDR
|
2015-11-16 15:22:39 +00:00
|
|
|
#endif
|
|
|
|
|
2015-03-28 12:00:29 +00:00
|
|
|
#include <Windows.h>
|
|
|
|
#include <ntstatus.h>
|
2016-07-07 14:16:12 +00:00
|
|
|
#include <CommCtrl.h>
|
|
|
|
#include <shlobj.h>
|
2018-09-02 07:28:59 +00:00
|
|
|
#include <AccCtrl.h>
|
2017-03-25 12:39:31 +00:00
|
|
|
#include "shared\ntos.h"
|
|
|
|
#include "shared\minirtl.h"
|
|
|
|
#include "shared\cmdline.h"
|
|
|
|
#include "shared\_filename.h"
|
2017-06-22 07:17:35 +00:00
|
|
|
#include "shared\ldr.h"
|
2018-06-15 11:44:01 +00:00
|
|
|
#include "shared\windefend.h"
|
2018-11-13 09:58:29 +00:00
|
|
|
#include "shared\consts.h"
|
2015-03-28 12:00:29 +00:00
|
|
|
#include "sup.h"
|
2018-09-02 07:28:59 +00:00
|
|
|
#include "compress.h"
|
2017-07-13 13:12:55 +00:00
|
|
|
#include "aic.h"
|
2017-03-25 12:39:31 +00:00
|
|
|
#include "methods\methods.h"
|
2015-11-16 15:22:39 +00:00
|
|
|
|
2018-01-15 10:53:43 +00:00
|
|
|
//
|
|
|
|
// enable for test
|
|
|
|
//#pragma comment(lib, "libucrt.lib")
|
|
|
|
//#include <strsafe.h>
|
|
|
|
//
|
2016-07-07 14:16:12 +00:00
|
|
|
//default execution flow
|
2017-09-08 12:20:05 +00:00
|
|
|
#define AKAGI_FLAG_KILO 1
|
2016-07-07 14:16:12 +00:00
|
|
|
|
|
|
|
//suppress all additional output
|
2017-09-08 12:20:05 +00:00
|
|
|
#define AKAGI_FLAG_TANGO 2
|
2016-07-07 14:16:12 +00:00
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
typedef struct _UACME_SHARED_CONTEXT {
|
|
|
|
HANDLE hIsolatedNamespace;
|
|
|
|
HANDLE hSharedSection;
|
|
|
|
HANDLE hCompletionEvent;
|
|
|
|
} UACME_SHARED_CONTEXT, *PUACME_SHARED_CONTEXT;
|
|
|
|
|
2015-11-16 15:22:39 +00:00
|
|
|
typedef struct _UACME_CONTEXT {
|
2017-03-25 12:39:31 +00:00
|
|
|
BOOL IsWow64;
|
2018-12-12 07:44:47 +00:00
|
|
|
BOOL OutputToDebugger;
|
2018-09-02 07:28:59 +00:00
|
|
|
ULONG Cookie;
|
2017-03-25 12:39:31 +00:00
|
|
|
PVOID ucmHeap;
|
2018-09-02 07:28:59 +00:00
|
|
|
pfnDecompressPayload DecompressRoutine;
|
|
|
|
HINSTANCE hNtdll;
|
2017-03-25 12:39:31 +00:00
|
|
|
HINSTANCE hKernel32;
|
|
|
|
HINSTANCE hShell32;
|
2018-09-02 07:28:59 +00:00
|
|
|
HINSTANCE hMpClient;
|
2018-11-13 09:58:29 +00:00
|
|
|
UACME_SHARED_CONTEXT SharedContext;
|
2018-07-14 17:15:02 +00:00
|
|
|
UCM_METHOD_EXECUTE_TYPE MethodExecuteType;
|
2017-03-25 12:39:31 +00:00
|
|
|
ULONG dwBuildNumber;
|
|
|
|
ULONG AkagiFlag;
|
|
|
|
ULONG IFileOperationFlags;
|
2017-06-22 07:17:35 +00:00
|
|
|
ULONG OptionalParameterLength; //count of characters
|
2017-12-17 03:58:48 +00:00
|
|
|
WCHAR szSystemRoot[MAX_PATH + 1]; //with end slash
|
2017-03-25 12:39:31 +00:00
|
|
|
WCHAR szSystemDirectory[MAX_PATH + 1];//with end slash
|
|
|
|
WCHAR szTempDirectory[MAX_PATH + 1]; //with end slash
|
|
|
|
WCHAR szOptionalParameter[MAX_PATH + 1]; //limited to MAX_PATH
|
2017-12-17 03:58:48 +00:00
|
|
|
WCHAR szDefaultPayload[MAX_PATH + 1]; //limited to MAX_PATH
|
2015-11-16 15:22:39 +00:00
|
|
|
} UACMECONTEXT, *PUACMECONTEXT;
|
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
typedef struct _UACME_PARAM_BLOCK {
|
|
|
|
ULONG Crc32;
|
|
|
|
ULONG SessionId;
|
|
|
|
ULONG AkagiFlag;
|
|
|
|
WCHAR szParameter[MAX_PATH + 1];
|
|
|
|
WCHAR szDesktop[MAX_PATH + 1];
|
|
|
|
WCHAR szWinstation[MAX_PATH + 1];
|
|
|
|
WCHAR szSignalObject[MAX_PATH + 1];
|
|
|
|
} UACME_PARAM_BLOCK, *PUACME_PARAM_BLOCK;
|
|
|
|
|
2018-12-12 07:44:47 +00:00
|
|
|
typedef UINT(WINAPI *pfnEntryPoint)(
|
|
|
|
_In_opt_ UCM_METHOD Method,
|
|
|
|
_In_reads_or_z_opt_(OptionalParameterLength) LPWSTR OptionalParameter,
|
|
|
|
_In_opt_ ULONG OptionalParameterLength,
|
|
|
|
_In_ BOOL OutputToDebugger
|
|
|
|
);
|
2017-02-07 17:37:31 +00:00
|
|
|
|
|
|
|
typedef struct _UACME_THREAD_CONTEXT {
|
|
|
|
TEB_ACTIVE_FRAME Frame;
|
|
|
|
pfnEntryPoint ucmMain;
|
2019-03-19 08:47:16 +00:00
|
|
|
NTSTATUS ReturnedResult;
|
2018-12-12 07:44:47 +00:00
|
|
|
ULONG OptionalParameterLength;
|
|
|
|
LPWSTR OptionalParameter;
|
2017-02-07 17:37:31 +00:00
|
|
|
} UACME_THREAD_CONTEXT, *PUACME_THREAD_CONTEXT;
|
|
|
|
|
2018-12-12 07:44:47 +00:00
|
|
|
extern PUACMECONTEXT g_ctx;
|
|
|
|
extern HINSTANCE g_hInstance;
|