commit
f0c8a80be6
@ -0,0 +1,101 @@
|
|||||||
|
AccessModifierOffset: -4
|
||||||
|
AlignAfterOpenBracket: AlwaysBreak
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: DontAlign
|
||||||
|
AlignOperands: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
|
AllowShortBlocksOnASingleLine: false
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: Inline
|
||||||
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AlwaysBreakAfterReturnType: TopLevel
|
||||||
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: true
|
||||||
|
BinPackArguments: false
|
||||||
|
BinPackParameters: false
|
||||||
|
BraceWrapping:
|
||||||
|
AfterClass: true
|
||||||
|
AfterControlStatement: true
|
||||||
|
AfterEnum: true
|
||||||
|
AfterFunction: true
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterStruct: true
|
||||||
|
AfterUnion: true
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: true
|
||||||
|
BeforeElse: true
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializers: AfterColon
|
||||||
|
BreakStringLiterals: false
|
||||||
|
ColumnLimit: 120
|
||||||
|
CommentPragmas: '^begin_wpp|^end_wpp|^FUNC |^USESUFFIX |^USESUFFIX '
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DerivePointerAlignment: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
IndentCaseLabels: false
|
||||||
|
IndentPPDirectives: AfterHash
|
||||||
|
IndentWidth: 4
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
Language: Cpp
|
||||||
|
MacroBlockBegin: '^BEGIN_MODULE$|^BEGIN_TEST_CLASS$|^BEGIN_TEST_METHOD$'
|
||||||
|
MacroBlockEnd: '^END_MODULE$|^END_TEST_CLASS$|^END_TEST_METHOD$'
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
PointerAlignment: Right
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: false
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
Standard: Cpp11
|
||||||
|
StatementMacros: [
|
||||||
|
'EXTERN_C',
|
||||||
|
'PAGED',
|
||||||
|
'PAGEDX',
|
||||||
|
'NONPAGED',
|
||||||
|
'PNPCODE',
|
||||||
|
'INITCODE',
|
||||||
|
'_At_',
|
||||||
|
'_When_',
|
||||||
|
'_Success_',
|
||||||
|
'_Check_return_',
|
||||||
|
'_Must_inspect_result_',
|
||||||
|
'_IRQL_requires_',
|
||||||
|
'_IRQL_requires_max_',
|
||||||
|
'_IRQL_requires_min_',
|
||||||
|
'_IRQL_saves_',
|
||||||
|
'_IRQL_restores_',
|
||||||
|
'_IRQL_saves_global_',
|
||||||
|
'_IRQL_restores_global_',
|
||||||
|
'_IRQL_raises_',
|
||||||
|
'_IRQL_lowers_',
|
||||||
|
'_Acquires_lock_',
|
||||||
|
'_Releases_lock_',
|
||||||
|
'_Acquires_exclusive_lock_',
|
||||||
|
'_Releases_exclusive_lock_',
|
||||||
|
'_Acquires_shared_lock_',
|
||||||
|
'_Releases_shared_lock_',
|
||||||
|
'_Requires_lock_held_',
|
||||||
|
'_Use_decl_annotations_',
|
||||||
|
'_Guarded_by_',
|
||||||
|
'__drv_preferredFunction',
|
||||||
|
'__drv_allocatesMem',
|
||||||
|
'__drv_freesMem',
|
||||||
|
]
|
||||||
|
TabWidth: '4'
|
||||||
|
UseTab: Never
|
@ -0,0 +1,91 @@
|
|||||||
|
#include "Common.h"
|
||||||
|
#include <ntimage.h>
|
||||||
|
|
||||||
|
EXTERN_C
|
||||||
|
__int64 __fastcall fnMmLoadSystemImage(
|
||||||
|
struct _UNICODE_STRING *DrvName,
|
||||||
|
const UNICODE_STRING *a2,
|
||||||
|
UNICODE_STRING *a3,
|
||||||
|
unsigned int a4_win32k_status,
|
||||||
|
ULONG64 *SectionPointer,
|
||||||
|
ULONG64 *BaseAddress);
|
||||||
|
|
||||||
|
EXTERN_C
|
||||||
|
PIMAGE_NT_HEADERS
|
||||||
|
NTAPI
|
||||||
|
RtlImageNtHeader(PVOID Base);
|
||||||
|
|
||||||
|
__declspec(
|
||||||
|
noinline) long CallMeWin32kDriver(wchar_t *DriverPath, unsigned long DriverPathLength, bool NeedPrefix /*= true*/)
|
||||||
|
{
|
||||||
|
long lStatus = -1;
|
||||||
|
|
||||||
|
unsigned long uDriverPathAllLength = DriverPathLength;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (!DriverPath || !DriverPathLength)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
wchar_t wszDriverPath[MAX_PATH + 1];
|
||||||
|
RtlSecureZeroMemory(wszDriverPath, sizeof(wszDriverPath));
|
||||||
|
|
||||||
|
if (NeedPrefix)
|
||||||
|
{
|
||||||
|
strcat_w(wszDriverPath, (L"\\??\\"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DriverPathLength < MAX_PATH * sizeof(wchar_t))
|
||||||
|
{
|
||||||
|
strcat_w(wszDriverPath, DriverPath);
|
||||||
|
if (NeedPrefix)
|
||||||
|
{
|
||||||
|
uDriverPathAllLength += 4 * sizeof(wchar_t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UNICODE_STRING usDriverName;
|
||||||
|
usDriverName.Buffer = wszDriverPath;
|
||||||
|
usDriverName.Length = (USHORT)uDriverPathAllLength;
|
||||||
|
usDriverName.MaximumLength = MAX_PATH * sizeof(wchar_t);
|
||||||
|
|
||||||
|
UNICODE_STRING usMmLoadSystemImage;
|
||||||
|
RtlInitUnicodeString(&usMmLoadSystemImage, L"MmLoadSystemImage");
|
||||||
|
|
||||||
|
auto pMmLoadSystemImage = (decltype(&fnMmLoadSystemImage))(MmGetSystemRoutineAddress(&usMmLoadSystemImage));
|
||||||
|
if (pMmLoadSystemImage)
|
||||||
|
{
|
||||||
|
ULONG64 uSectionPointer = 0, uBaseAddress = 0;
|
||||||
|
lStatus = pMmLoadSystemImage(&usDriverName, 0, 0, 1, &uSectionPointer, &uBaseAddress);
|
||||||
|
if (NT_SUCCESS(lStatus) && uBaseAddress)
|
||||||
|
{
|
||||||
|
auto pImageNtHeader = RtlImageNtHeader((void *)uBaseAddress);
|
||||||
|
if (pImageNtHeader)
|
||||||
|
{
|
||||||
|
// Fake Driver Object
|
||||||
|
auto pNewDrvObj = (PDRIVER_OBJECT)ExAllocatePool(NonPagedPool, 0x1000);
|
||||||
|
if (!pNewDrvObj)
|
||||||
|
{
|
||||||
|
__asm {int 3 }
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlSecureZeroMemory(pNewDrvObj, 0x1000);
|
||||||
|
pNewDrvObj->DriverStart = (PVOID)uBaseAddress;
|
||||||
|
|
||||||
|
// Call OEP
|
||||||
|
auto pOEP = (PDRIVER_INITIALIZE)(uBaseAddress + pImageNtHeader->OptionalHeader.AddressOfEntryPoint);
|
||||||
|
lStatus = pOEP(pNewDrvObj, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lStatus = STATUS_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
return lStatus;
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="Source.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="CallMeWWWWWWin32k.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="Common.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <fltKernel.h>
|
||||||
|
|
||||||
|
#define MAX_PATH 260
|
||||||
|
|
||||||
|
#define dprintf(...) DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, __VA_ARGS__)
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
wchar_t *
|
||||||
|
strcat_w(wchar_t *dest, const wchar_t *src)
|
||||||
|
{
|
||||||
|
if ((dest == 0) || (src == 0))
|
||||||
|
return dest;
|
||||||
|
|
||||||
|
while (*dest != 0)
|
||||||
|
dest++;
|
||||||
|
|
||||||
|
while (*src != 0)
|
||||||
|
{
|
||||||
|
*dest = *src;
|
||||||
|
dest++;
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
|
||||||
|
*dest = 0;
|
||||||
|
return dest;
|
||||||
|
}
|
@ -0,0 +1,50 @@
|
|||||||
|
#include "Common.h"
|
||||||
|
|
||||||
|
EXTERN_C
|
||||||
|
PCCHAR
|
||||||
|
NTAPI
|
||||||
|
PsGetProcessImageFileName(IN PEPROCESS Process);
|
||||||
|
|
||||||
|
__declspec(
|
||||||
|
noinline) long CallMeWin32kDriver(wchar_t *DriverPath, unsigned long DriverPathLength, bool NeedPrefix = true);
|
||||||
|
|
||||||
|
EXTERN_C
|
||||||
|
NTSTATUS
|
||||||
|
DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath)
|
||||||
|
{
|
||||||
|
dprintf("new world!\n");
|
||||||
|
|
||||||
|
PEPROCESS pEpLsass = nullptr;
|
||||||
|
for (ULONG i = 0; i < 0x5000; i += 4)
|
||||||
|
{
|
||||||
|
PEPROCESS pEp = nullptr;
|
||||||
|
auto lStatus = PsLookupProcessByProcessId((HANDLE)i, &pEp);
|
||||||
|
if (!NT_SUCCESS(lStatus) || !pEp)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto pName = PsGetProcessImageFileName(pEp);
|
||||||
|
// A more casual code
|
||||||
|
if (pName && strstr(pName, "lsass"))
|
||||||
|
{
|
||||||
|
pEpLsass = pEp;
|
||||||
|
}
|
||||||
|
ObDereferenceObject(pEp);
|
||||||
|
|
||||||
|
if (pEpLsass)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pEpLsass)
|
||||||
|
{
|
||||||
|
KAPC_STATE ks;
|
||||||
|
KeStackAttachProcess(pEpLsass, &ks);
|
||||||
|
CallMeWin32kDriver(L"C:\\win32kbro.sys", wcslen(L"C:\\win32kbro.sys") * 2);
|
||||||
|
KeUnstackDetachProcess(&ks);
|
||||||
|
}
|
||||||
|
|
||||||
|
return STATUS_VIRUS_DELETED;
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
# CallMeWin32kDriver
|
||||||
|
Load your driver like win32k.sys
|
||||||
|
|
||||||
|
![Q`NXJ7G@89G@K)6~5H8JA@6](https://user-images.githubusercontent.com/13917777/184930976-1ee5dd35-04a0-4d98-85a4-1f51074b9784.png)
|
||||||
|
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
This feature was analyzed from a certain PUBG cheat driver.
|
||||||
|
|
||||||
|
|
||||||
|
## Compile
|
||||||
|
- Visual Studio 2022 & WDK10
|
||||||
|
- llvm-msvc [[link]](https://github.com/NewWorldComingSoon/llvm-msvc-build)
|
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2022 gmh5225
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
#include <fltKernel.h>
|
||||||
|
|
||||||
|
#define dprintf(...) DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, __VA_ARGS__)
|
||||||
|
|
||||||
|
EXTERN_C
|
||||||
|
NTSTATUS
|
||||||
|
DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath)
|
||||||
|
{
|
||||||
|
dprintf("end world!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="Source.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
Loading…
Reference in new issue