添加项目文件。
This commit is contained in:
51
CowInject.sln
Normal file
51
CowInject.sln
Normal file
@@ -0,0 +1,51 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29613.14
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CowInject", "CowInject\CowInject.vcxproj", "{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|ARM = Debug|ARM
|
||||
Debug|ARM64 = Debug|ARM64
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|ARM = Release|ARM
|
||||
Release|ARM64 = Release|ARM64
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|ARM.Build.0 = Debug|ARM
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|x64.Build.0 = Debug|x64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|x64.Deploy.0 = Debug|x64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|x86.Build.0 = Debug|Win32
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Debug|x86.Deploy.0 = Debug|Win32
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|ARM.ActiveCfg = Release|ARM
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|ARM.Build.0 = Release|ARM
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|ARM.Deploy.0 = Release|ARM
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|ARM64.Build.0 = Release|ARM64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|x64.ActiveCfg = Release|x64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|x64.Build.0 = Release|x64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|x64.Deploy.0 = Release|x64
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|x86.ActiveCfg = Release|Win32
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|x86.Build.0 = Release|Win32
|
||||
{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}.Release|x86.Deploy.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8B54FB70-B3D2-4C49-87D4-AED93842E605}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
32
CowInject/CowInject.inf
Normal file
32
CowInject/CowInject.inf
Normal file
@@ -0,0 +1,32 @@
|
||||
;
|
||||
; CowInject.inf
|
||||
;
|
||||
|
||||
[Version]
|
||||
Signature="$WINDOWS NT$"
|
||||
Class=System
|
||||
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}
|
||||
Provider=%ManufacturerName%
|
||||
DriverVer=
|
||||
CatalogFile=CowInject.cat
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir = 12
|
||||
|
||||
|
||||
[SourceDisksNames]
|
||||
1 = %DiskName%,,,""
|
||||
|
||||
[SourceDisksFiles]
|
||||
|
||||
|
||||
[Manufacturer]
|
||||
%ManufacturerName%=Standard,NT$ARCH$
|
||||
|
||||
[Standard.NT$ARCH$]
|
||||
|
||||
|
||||
[Strings]
|
||||
ManufacturerName="<Your manufacturer name>" ;TODO: Replace with your manufacturer name
|
||||
ClassName=""
|
||||
DiskName="CowInject Source Disk"
|
||||
166
CowInject/CowInject.vcxproj
Normal file
166
CowInject/CowInject.vcxproj
Normal file
@@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{8E8EC6B8-E5C6-4B06-A8F2-9F0F5EA685BB}</ProjectGuid>
|
||||
<TemplateGuid>{dd38f7fc-d7bd-488b-9242-7d8754cde80d}</TemplateGuid>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
|
||||
<RootNamespace>CowInject</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows7</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
<SpectreMitigation>false</SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>WDM</DriverType>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
<EnableInf2cat>false</EnableInf2cat>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<Inf Include="CowInject.inf" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<FilesToPackage Include="$(TargetPath)" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="helper.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="shell_code_end.cpp" />
|
||||
<ClCompile Include="shell_code_start.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="head.h" />
|
||||
<ClInclude Include="main.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
54
CowInject/CowInject.vcxproj.filters
Normal file
54
CowInject/CowInject.vcxproj.filters
Normal file
@@ -0,0 +1,54 @@
|
||||
<?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>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Driver Files">
|
||||
<UniqueIdentifier>{8E41214B-6785-4CFE-B992-037D68949A14}</UniqueIdentifier>
|
||||
<Extensions>inf;inv;inx;mof;mc;</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\Shellcode">
|
||||
<UniqueIdentifier>{41db35f4-72e8-49d7-81ea-9a18fea3e160}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\ThirdParty">
|
||||
<UniqueIdentifier>{9e17b26d-f5cd-4288-962a-5943271da071}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Inf Include="CowInject.inf">
|
||||
<Filter>Driver Files</Filter>
|
||||
</Inf>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="head.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="main.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="shell_code_start.cpp">
|
||||
<Filter>Source Files\Shellcode</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="shell_code_end.cpp">
|
||||
<Filter>Source Files\Shellcode</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="helper.cpp">
|
||||
<Filter>Source Files\ThirdParty</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
232
CowInject/head.h
Normal file
232
CowInject/head.h
Normal file
@@ -0,0 +1,232 @@
|
||||
#pragma once
|
||||
#include <ntifs.h>
|
||||
#include <ntstrsafe.h>
|
||||
#include <ntimage.h>
|
||||
#include <WinDef.h>
|
||||
#include <intrin.h>
|
||||
#define DebugPrintA(...) DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,__VA_ARGS__)
|
||||
#define HUOJI_POOL_TAG 'huoJ'
|
||||
#define CALCSIZE(n,f) (ULONG_PTR)f - (ULONG_PTR)n
|
||||
#define PAGE_ALIGN(Va) ((PVOID)((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
|
||||
#define DEREF( name )*(UINT_PTR *)(name)
|
||||
#define DEREF_64( name )*(unsigned __int64 *)(name)
|
||||
#define DEREF_32( name )*(unsigned long *)(name)
|
||||
#define DEREF_16( name )*(unsigned short *)(name)
|
||||
#define DEREF_8( name )*(UCHAR *)(name)
|
||||
typedef HMODULE(WINAPI* LOADLIBRARYA)(LPCSTR);
|
||||
typedef FARPROC(WINAPI* GETPROCADDRESS)(HMODULE, LPCSTR);
|
||||
typedef LPVOID(WINAPI* VIRTUALALLOC)(LPVOID, SIZE_T, DWORD, DWORD);
|
||||
typedef DWORD(NTAPI* NTFLUSHINSTRUCTIONCACHE)(HANDLE, PVOID, ULONG);
|
||||
|
||||
typedef BOOL(WINAPI* ReadFileT)(HANDLE, LPVOID, DWORD, LPDWORD, PVOID);
|
||||
typedef DWORD(WINAPI* GetFileSizeT)(HANDLE, LPDWORD);
|
||||
typedef BOOL(WINAPI* CloseHandleT)(HANDLE);
|
||||
|
||||
#define KERNEL32DLL_HASH 0x6A4ABC5B
|
||||
#define NTDLLDLL_HASH 0x3CFA685D
|
||||
#define LOADLIBRARYA_HASH 0xEC0E4E8E
|
||||
#define GETPROCADDRESS_HASH 0x7C0DFCAA
|
||||
#define VIRTUALALLOC_HASH 0x91AFCA54
|
||||
#define NTFLUSHINSTRUCTIONCACHE_HASH 0x534C0AB8
|
||||
#define HASH_KEY 13
|
||||
#define DLL_PROCESS_ATTACH 1
|
||||
#define DLL_THREAD_ATTACH 2
|
||||
#define DLL_THREAD_DETACH 3
|
||||
#define DLL_PROCESS_DETACH 0
|
||||
|
||||
typedef enum _SYSTEM_INFORMATION_CLASS
|
||||
{
|
||||
SystemBasicInformation, // 0x00 SYSTEM_BASIC_INFORMATION
|
||||
SystemProcessorInformation, // 0x01 SYSTEM_PROCESSOR_INFORMATION
|
||||
SystemPerformanceInformation, // 0x02
|
||||
SystemTimeOfDayInformation, // 0x03
|
||||
SystemPathInformation, // 0x04
|
||||
SystemProcessInformation, // 0x05
|
||||
SystemCallCountInformation, // 0x06
|
||||
SystemDeviceInformation, // 0x07
|
||||
SystemProcessorPerformanceInformation, // 0x08
|
||||
SystemFlagsInformation, // 0x09
|
||||
SystemCallTimeInformation, // 0x0A
|
||||
SystemModuleInformation, // 0x0B SYSTEM_MODULE_INFORMATION
|
||||
SystemLocksInformation, // 0x0C
|
||||
SystemStackTraceInformation, // 0x0D
|
||||
SystemPagedPoolInformation, // 0x0E
|
||||
SystemNonPagedPoolInformation, // 0x0F
|
||||
SystemHandleInformation, // 0x10
|
||||
SystemObjectInformation, // 0x11
|
||||
SystemPageFileInformation, // 0x12
|
||||
SystemVdmInstemulInformation, // 0x13
|
||||
SystemVdmBopInformation, // 0x14
|
||||
SystemFileCacheInformation, // 0x15
|
||||
SystemPoolTagInformation, // 0x16
|
||||
SystemInterruptInformation, // 0x17
|
||||
SystemDpcBehaviorInformation, // 0x18
|
||||
SystemFullMemoryInformation, // 0x19
|
||||
SystemLoadGdiDriverInformation, // 0x1A
|
||||
SystemUnloadGdiDriverInformation, // 0x1B
|
||||
SystemTimeAdjustmentInformation, // 0x1C
|
||||
SystemSummaryMemoryInformation, // 0x1D
|
||||
SystemNextEventIdInformation, // 0x1E
|
||||
SystemEventIdsInformation, // 0x1F
|
||||
SystemCrashDumpInformation, // 0x20
|
||||
SystemExceptionInformation, // 0x21
|
||||
SystemCrashDumpStateInformation, // 0x22
|
||||
SystemKernelDebuggerInformation, // 0x23
|
||||
SystemContextSwitchInformation, // 0x24
|
||||
SystemRegistryQuotaInformation, // 0x25
|
||||
SystemExtendServiceTableInformation, // 0x26
|
||||
SystemPrioritySeperation, // 0x27
|
||||
SystemPlugPlayBusInformation, // 0x28
|
||||
SystemDockInformation, // 0x29
|
||||
//SystemPowerInformation, // 0x2A
|
||||
//SystemProcessorSpeedInformation, // 0x2B
|
||||
//SystemCurrentTimeZoneInformation, // 0x2C
|
||||
//SystemLookasideInformation // 0x2D
|
||||
|
||||
} SYSTEM_INFORMATION_CLASS, * PSYSTEM_INFORMATION_CLASS;
|
||||
|
||||
typedef BOOL(WINAPI* DLLMAIN)(HINSTANCE, DWORD, LPVOID);
|
||||
typedef struct _LDR_DATA_TABLE_ENTRY {
|
||||
LIST_ENTRY InLoadOrderLinks;
|
||||
LIST_ENTRY InMemoryOrderLinks;
|
||||
LIST_ENTRY InInitializationOrderLinks;
|
||||
PVOID DllBase;
|
||||
PVOID EntryPoint;
|
||||
ULONG SizeOfImages;
|
||||
UNICODE_STRING FullDllName;
|
||||
UNICODE_STRING BaseDllName;
|
||||
ULONG Flags;
|
||||
USHORT LoadCount;
|
||||
USHORT TlsIndex;
|
||||
union {
|
||||
LIST_ENTRY HashLinks;
|
||||
struct {
|
||||
PVOID SectionPointer;
|
||||
ULONG CheckSum;
|
||||
};
|
||||
};
|
||||
union {
|
||||
struct {
|
||||
ULONG TimeDateStamp;
|
||||
};
|
||||
struct {
|
||||
PVOID LoadedImports;
|
||||
};
|
||||
};
|
||||
}LDR_DATA_TABLE_ENTRY, * PLDR_DATA_TABLE_ENTRY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WORD offset : 12;
|
||||
WORD type : 4;
|
||||
} IMAGE_RELOC, * PIMAGE_RELOC;
|
||||
typedef struct _NT_PROC_THREAD_ATTRIBUTE_ENTRY
|
||||
{
|
||||
ULONG Attribute; // PROC_THREAD_ATTRIBUTE_XXX
|
||||
SIZE_T Size;
|
||||
ULONG_PTR Value;
|
||||
ULONG Unknown;
|
||||
} NT_PROC_THREAD_ATTRIBUTE_ENTRY, * NT_PPROC_THREAD_ATTRIBUTE_ENTRY;
|
||||
typedef struct _NT_PROC_THREAD_ATTRIBUTE_LIST
|
||||
{
|
||||
ULONG Length;
|
||||
NT_PROC_THREAD_ATTRIBUTE_ENTRY Entry[1];
|
||||
} NT_PROC_THREAD_ATTRIBUTE_LIST, * PNT_PROC_THREAD_ATTRIBUTE_LIST;
|
||||
|
||||
typedef struct _SECURITY_ATTRIBUTES {
|
||||
DWORD nLength;
|
||||
LPVOID lpSecurityDescriptor;
|
||||
BOOL bInheritHandle;
|
||||
} SECURITY_ATTRIBUTES, * PSECURITY_ATTRIBUTES, * LPSECURITY_ATTRIBUTES;
|
||||
typedef HANDLE(WINAPI* CreateFileWT)(
|
||||
_In_ LPCWSTR lpFileName,
|
||||
_In_ DWORD dwDesiredAccess,
|
||||
_In_ DWORD dwShareMode,
|
||||
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
_In_ DWORD dwCreationDisposition,
|
||||
_In_ DWORD dwFlagsAndAttributes,
|
||||
_In_opt_ HANDLE hTemplateFile
|
||||
);
|
||||
typedef DWORD(WINAPI* GetModuleFileNameWT)(HMODULE hModule, LPCWSTR lpFilename, DWORD nSize);
|
||||
typedef wchar_t* (WINAPI* wcsstrAt)(wchar_t const* _String1, wchar_t const* _String);
|
||||
typedef HMODULE(WINAPI* LoadLibraryWT)(_In_ LPCWSTR lpLibFileName);
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
#include <NTDDK.h>
|
||||
NTSYSAPI
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
ZwQuerySystemInformation(
|
||||
IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
|
||||
OUT PVOID SystemInformation,
|
||||
IN ULONG SystemInformationLength,
|
||||
OUT PULONG ReturnLength OPTIONAL
|
||||
);
|
||||
NTKERNELAPI
|
||||
NTSTATUS
|
||||
ObReferenceObjectByName(
|
||||
IN PUNICODE_STRING ObjectName,
|
||||
IN ULONG Attributes,
|
||||
IN PACCESS_STATE PassedAccessState,
|
||||
IN ACCESS_MASK DesiredAccess,
|
||||
IN POBJECT_TYPE ObjectType,
|
||||
IN KPROCESSOR_MODE AccessMode,
|
||||
IN OUT PVOID ParseContext,
|
||||
OUT PVOID* Object
|
||||
);
|
||||
extern POBJECT_TYPE* IoDriverObjectType;
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
KeCapturePersistentThreadState(
|
||||
IN PCONTEXT Context,
|
||||
IN PKTHREAD Thread,
|
||||
IN ULONG BugCheckCode,
|
||||
IN ULONG BugCheckParameter1,
|
||||
IN ULONG BugCheckParameter2,
|
||||
IN ULONG BugCheckParameter3,
|
||||
IN ULONG BugCheckParameter4,
|
||||
OUT PVOID VirtualAddress
|
||||
);
|
||||
NTSYSAPI
|
||||
PVOID
|
||||
NTAPI
|
||||
RtlImageDirectoryEntryToData(
|
||||
PVOID ImageBase,
|
||||
BOOLEAN MappedAsImage,
|
||||
USHORT DirectoryEntry,
|
||||
PULONG Size
|
||||
);
|
||||
NTKERNELAPI
|
||||
PPEB
|
||||
NTAPI
|
||||
PsGetProcessPeb(IN PEPROCESS Process);
|
||||
NTKERNELAPI PVOID NTAPI PsGetProcessWow64Process(IN PEPROCESS Process);
|
||||
NTSYSAPI
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
ZwProtectVirtualMemory(
|
||||
IN HANDLE ProcessHandle,
|
||||
IN OUT PVOID* BaseAddress,
|
||||
IN OUT SIZE_T* NumberOfBytesToProtect,
|
||||
IN ULONG NewAccessProtection,
|
||||
OUT PULONG OldAccessProtection
|
||||
);
|
||||
|
||||
NTSYSAPI
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
ZwQueryInformationThread(
|
||||
IN HANDLE ThreadHandle,
|
||||
IN THREADINFOCLASS ThreadInformationClass,
|
||||
OUT PVOID ThreadInformation,
|
||||
IN ULONG ThreadInformationLength,
|
||||
OUT PULONG ReturnLength OPTIONAL
|
||||
);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
143
CowInject/helper.cpp
Normal file
143
CowInject/helper.cpp
Normal file
@@ -0,0 +1,143 @@
|
||||
#include "head.h"
|
||||
/*
|
||||
from google
|
||||
*/
|
||||
ULONG_PTR GetProcAddressR(ULONG_PTR hModule, const char* lpProcName, BOOL x64Module)
|
||||
{
|
||||
UINT_PTR uiLibraryAddress = 0;
|
||||
ULONG_PTR fpResult = NULL;
|
||||
if (hModule == NULL)
|
||||
return NULL;
|
||||
// a module handle is really its base address
|
||||
uiLibraryAddress = (UINT_PTR)hModule;
|
||||
__try
|
||||
{
|
||||
UINT_PTR uiAddressArray = 0;
|
||||
UINT_PTR uiNameArray = 0;
|
||||
UINT_PTR uiNameOrdinals = 0;
|
||||
PIMAGE_NT_HEADERS32 pNtHeaders32 = NULL;
|
||||
PIMAGE_NT_HEADERS64 pNtHeaders64 = NULL;
|
||||
PIMAGE_DATA_DIRECTORY pDataDirectory = NULL;
|
||||
PIMAGE_EXPORT_DIRECTORY pExportDirectory = NULL;
|
||||
|
||||
// get the VA of the modules NT Header
|
||||
pNtHeaders32 = (PIMAGE_NT_HEADERS32)(uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew);
|
||||
pNtHeaders64 = (PIMAGE_NT_HEADERS64)(uiLibraryAddress + ((PIMAGE_DOS_HEADER)uiLibraryAddress)->e_lfanew);
|
||||
if (x64Module)
|
||||
{
|
||||
pDataDirectory = (PIMAGE_DATA_DIRECTORY)&pNtHeaders64->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
|
||||
}
|
||||
else
|
||||
{
|
||||
pDataDirectory = (PIMAGE_DATA_DIRECTORY)&pNtHeaders32->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
|
||||
}
|
||||
|
||||
|
||||
// get the VA of the export directory
|
||||
pExportDirectory = (PIMAGE_EXPORT_DIRECTORY)(uiLibraryAddress + pDataDirectory->VirtualAddress);
|
||||
|
||||
// get the VA for the array of addresses
|
||||
uiAddressArray = (uiLibraryAddress + pExportDirectory->AddressOfFunctions);
|
||||
|
||||
// get the VA for the array of name pointers
|
||||
uiNameArray = (uiLibraryAddress + pExportDirectory->AddressOfNames);
|
||||
|
||||
// get the VA for the array of name ordinals
|
||||
uiNameOrdinals = (uiLibraryAddress + pExportDirectory->AddressOfNameOrdinals);
|
||||
|
||||
// test if we are importing by name or by ordinal...
|
||||
if ((PtrToUlong(lpProcName) & 0xFFFF0000) == 0x00000000)
|
||||
{
|
||||
// import by ordinal...
|
||||
|
||||
// use the import ordinal (- export ordinal base) as an index into the array of addresses
|
||||
uiAddressArray += ((IMAGE_ORDINAL(PtrToUlong(lpProcName)) - pExportDirectory->Base) * sizeof(unsigned long));
|
||||
|
||||
// resolve the address for this imported function
|
||||
fpResult = (ULONG_PTR)(uiLibraryAddress + DEREF_32(uiAddressArray));
|
||||
}
|
||||
else
|
||||
{
|
||||
// import by name...
|
||||
unsigned long dwCounter = pExportDirectory->NumberOfNames;
|
||||
while (dwCounter--)
|
||||
{
|
||||
char* cpExportedFunctionName = (char*)(uiLibraryAddress + DEREF_32(uiNameArray));
|
||||
|
||||
// test if we have a match...
|
||||
if (strcmp(cpExportedFunctionName, lpProcName) == 0)
|
||||
{
|
||||
// use the functions name ordinal as an index into the array of name pointers
|
||||
uiAddressArray += (DEREF_16(uiNameOrdinals) * sizeof(unsigned long));
|
||||
|
||||
// calculate the virtual address for the function
|
||||
fpResult = (ULONG_PTR)(uiLibraryAddress + DEREF_32(uiAddressArray));
|
||||
|
||||
// finish...
|
||||
break;
|
||||
}
|
||||
|
||||
// get the next exported function name
|
||||
uiNameArray += sizeof(unsigned long);
|
||||
|
||||
// get the next exported function name ordinal
|
||||
uiNameOrdinals += sizeof(unsigned short);
|
||||
}
|
||||
}
|
||||
}
|
||||
__except (EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
fpResult = NULL;
|
||||
}
|
||||
return fpResult;
|
||||
}
|
||||
/*
|
||||
from blackbone
|
||||
*/
|
||||
LONG BlackBoneSafeSearchString(IN PUNICODE_STRING source, IN PUNICODE_STRING target, IN BOOLEAN CaseInSensitive)
|
||||
{
|
||||
ASSERT(source != NULL && target != NULL);
|
||||
if (source == NULL || target == NULL || source->Buffer == NULL || target->Buffer == NULL)
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
|
||||
// Size mismatch
|
||||
if (source->Length < target->Length)
|
||||
return -1;
|
||||
|
||||
USHORT diff = source->Length - target->Length;
|
||||
for (USHORT i = 0; i <= (diff / sizeof(WCHAR)); i++)
|
||||
{
|
||||
if (RtlCompareUnicodeStrings(
|
||||
source->Buffer + i,
|
||||
target->Length / sizeof(WCHAR),
|
||||
target->Buffer,
|
||||
target->Length / sizeof(WCHAR),
|
||||
CaseInSensitive
|
||||
) == 0)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
/*
|
||||
from windows explorer
|
||||
*/
|
||||
bool _memcpy(PVOID address, PVOID target_address, ULONG length)
|
||||
{
|
||||
bool result = false;
|
||||
PHYSICAL_ADDRESS physicial_address;
|
||||
physicial_address = MmGetPhysicalAddress(address);
|
||||
if (physicial_address.QuadPart)
|
||||
{
|
||||
PVOID maped_mem = MmMapIoSpace(physicial_address, length, MmNonCached);
|
||||
if (maped_mem)
|
||||
{
|
||||
memcpy(maped_mem, target_address, length);
|
||||
MmUnmapIoSpace(maped_mem, length);
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
240
CowInject/main.cpp
Normal file
240
CowInject/main.cpp
Normal file
@@ -0,0 +1,240 @@
|
||||
#include "head.h"
|
||||
#include "main.h"
|
||||
struct moudle_info
|
||||
{
|
||||
uintptr_t bsae;
|
||||
uintptr_t size;
|
||||
};
|
||||
bool get_moudle_base(PEPROCESS process, moudle_info* kernel32, moudle_info* ntdll, moudle_info* kernelbase) {
|
||||
PPEB peb = PsGetProcessPeb(process);
|
||||
bool result = false;
|
||||
if (peb == NULL)
|
||||
return result;
|
||||
DebugPrintA("process peb: %p \n", peb);
|
||||
//PEB + 0x18 = PEB.Ldr
|
||||
auto peb_ldr = *(PDWORD64)((PUCHAR)peb + 0x18);
|
||||
//Pebldr + 0x10 = InLoadOrderModuleList
|
||||
PLIST_ENTRY module_list_head = (PLIST_ENTRY)((PUCHAR)peb_ldr + 0x10);
|
||||
PLIST_ENTRY moudle = module_list_head->Flink;
|
||||
/*
|
||||
win7: kernel32.dll
|
||||
win10: KERNEL32.DLL
|
||||
*/
|
||||
wchar_t moudle_list[][15] = {
|
||||
{L"kernel32.dll"},
|
||||
{L"ntdll.dll"},
|
||||
{L"kernelbase.dll"},
|
||||
};
|
||||
while (module_list_head != moudle)
|
||||
{
|
||||
PLDR_DATA_TABLE_ENTRY info = (PLDR_DATA_TABLE_ENTRY)moudle;
|
||||
UNICODE_STRING str_moudle_name;
|
||||
for (size_t i = 0; i < sizeof(moudle_list); i++)
|
||||
{
|
||||
RtlInitUnicodeString(&str_moudle_name, moudle_list[i]);
|
||||
if (BlackBoneSafeSearchString(&info->BaseDllName, &str_moudle_name, true) != -1)
|
||||
{
|
||||
DebugPrintA("MoudleBase %p Size %p Name %wZ\n", info->DllBase, info->SizeOfImages, info->BaseDllName);
|
||||
if (i == 0) {
|
||||
kernel32->bsae = (uintptr_t)info->DllBase;
|
||||
kernel32->size = (uintptr_t)info->SizeOfImages;
|
||||
}
|
||||
if (i == 1) {
|
||||
ntdll->bsae = (uintptr_t)info->DllBase;
|
||||
ntdll->size = (uintptr_t)info->SizeOfImages;
|
||||
}
|
||||
if (i == 2) {
|
||||
kernelbase->bsae = (uintptr_t)info->DllBase;
|
||||
kernelbase->size = (uintptr_t)info->SizeOfImages;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (kernel32->bsae && ntdll->bsae && kernelbase->bsae)
|
||||
break;
|
||||
moudle = moudle->Flink;
|
||||
}
|
||||
result = kernel32->bsae != NULL && ntdll->bsae != NULL && kernelbase->bsae != NULL;
|
||||
DebugPrintA("kernel32->bsae %p sizeof:%p ntdll->bsae %p kernelbase->bsae %p result: %d \n", kernel32->bsae, kernel32->size, ntdll->bsae, kernelbase->bsae, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
uintptr_t get_free_speace(uintptr_t base, size_t size, size_t need_size) {
|
||||
size_t return_length;
|
||||
|
||||
for (uintptr_t address = (uintptr_t)base; address <= (uintptr_t)base + size; address += sizeof(uintptr_t)) {
|
||||
__try
|
||||
{
|
||||
ProbeForRead((void*)address, need_size, 0x1);
|
||||
if (*(uintptr_t*)address == 0x00 || *(uintptr_t*)address == 0x90)
|
||||
{
|
||||
MEMORY_BASIC_INFORMATION memory_information = { 0 };
|
||||
NTSTATUS status = ZwQueryVirtualMemory(NtCurrentProcess(), (PVOID)address, (MEMORY_INFORMATION_CLASS)0, &memory_information, need_size, &return_length);
|
||||
if (NT_SUCCESS(status)) {
|
||||
if ((memory_information.Protect == PAGE_EXECUTE || memory_information.Protect == PAGE_EXECUTE_READ || memory_information.Protect == PAGE_EXECUTE_READWRITE || memory_information.Protect == PAGE_EXECUTE_WRITECOPY) == false) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
DebugPrintA("address : %p \n", address);
|
||||
uintptr_t count = 0;
|
||||
bool is_good = true;
|
||||
uintptr_t max_count = 0;
|
||||
for (; count < need_size && is_good; count += sizeof(uintptr_t))
|
||||
{
|
||||
max_count++;
|
||||
auto check_ptr = (uintptr_t*)((PUCHAR)address + count);
|
||||
if (*check_ptr != 0x0 && *check_ptr != 0x90)
|
||||
{
|
||||
is_good = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (is_good) {
|
||||
DebugPrintA("location Cow virtual address : %p \n", address);
|
||||
return address;
|
||||
}
|
||||
}
|
||||
}
|
||||
__except (EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
VOID DriverUnload(PDRIVER_OBJECT driver)
|
||||
{
|
||||
DebugPrintA("[DebugMessage] Unload Driver");
|
||||
}
|
||||
|
||||
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
|
||||
{
|
||||
DebugPrintA("init Driver \n");
|
||||
/*
|
||||
<09><>ʼ<EFBFBD><CABC>shellcode
|
||||
*/
|
||||
//uintptr_t size_of_shellcode = CALCSIZE(HkCreateFileW, ShellCodeEnd);
|
||||
uintptr_t size_of_shellcode = sizeof(HookCode);
|
||||
DebugPrintA("shell code size: %p \n", size_of_shellcode);
|
||||
/*
|
||||
get a x64 process
|
||||
*/
|
||||
for (uintptr_t i = 8; i < 100000000; i = i + 4)
|
||||
{
|
||||
PEPROCESS _eprocess = NULL;
|
||||
NTSTATUS nt_status = PsLookupProcessByProcessId((HANDLE)i, &_eprocess);
|
||||
if (NT_SUCCESS(nt_status) && _eprocess != NULL)
|
||||
{
|
||||
ObDereferenceObject(_eprocess);
|
||||
bool is_x64_process = PsGetProcessWow64Process(_eprocess) == NULL;
|
||||
if (is_x64_process) {
|
||||
KAPC_STATE apc;
|
||||
KeStackAttachProcess(_eprocess, &apc);
|
||||
moudle_info kernel32 = {0};
|
||||
moudle_info ntdll = { 0 };
|
||||
moudle_info kernelbase = { 0 };
|
||||
/*
|
||||
is x64 process, get kernel32.dll and kernelbase.dll and ntdll.dll base
|
||||
*/
|
||||
if (get_moudle_base(_eprocess, &kernel32, &ntdll, &kernelbase)) {
|
||||
uintptr_t kernel32_loadlibrary = GetProcAddressR(kernel32.bsae, "LoadLibraryW", TRUE);
|
||||
uintptr_t ntdll_wcsstr = GetProcAddressR(ntdll.bsae, "wcsstr", TRUE);
|
||||
uintptr_t kernelbase_GetModuleFileNameW = GetProcAddressR(kernelbase.bsae, "GetModuleFileNameW", TRUE);
|
||||
uintptr_t kernelbase_CreateFileW = GetProcAddressR(kernelbase.bsae, "CreateFileW", TRUE);
|
||||
|
||||
if (kernel32_loadlibrary && ntdll_wcsstr && kernelbase_GetModuleFileNameW && kernelbase_CreateFileW) {
|
||||
uintptr_t hook_function = get_free_speace(kernel32.bsae, kernel32.size, size_of_shellcode + sizeof(void*) + sizeof(CreateFileWT));
|
||||
if (hook_function) {
|
||||
/*
|
||||
Copy shellcode to freespeace
|
||||
*/
|
||||
_memcpy((PVOID)hook_function, (PVOID)HookCode, size_of_shellcode);
|
||||
/*
|
||||
hook
|
||||
*/
|
||||
BYTE _mov_rax[] = {
|
||||
0x48, 0xB8 // mov rax, [xxx]
|
||||
};
|
||||
BYTE _jmp_rax[] = {
|
||||
0xFF, 0xE0, // jmp rax
|
||||
};
|
||||
BYTE shell_code_jmp_back[] = {
|
||||
0xCC, 0xCC, //mov rax
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, //void*
|
||||
0xCC, 0xCC, //jmp rax
|
||||
};
|
||||
uintptr_t function_offset = kernelbase_CreateFileW;
|
||||
//backup
|
||||
_memcpy(shell_code_jmp_back, (void*)function_offset, sizeof(shell_code_jmp_back));
|
||||
/*
|
||||
hook_function -> origin_code
|
||||
*/
|
||||
function_offset = hook_function + size_of_shellcode;
|
||||
uintptr_t jmp_back = function_offset;
|
||||
_memcpy((void*)function_offset, shell_code_jmp_back, sizeof(shell_code_jmp_back));
|
||||
function_offset += sizeof(shell_code_jmp_back);
|
||||
/*
|
||||
origin_code -> jmp CreateFileW
|
||||
*/
|
||||
uintptr_t jmp_offset = kernelbase_CreateFileW + sizeof(_mov_rax) + sizeof(_jmp_rax) + sizeof(void*);
|
||||
_memcpy((void*)function_offset, _mov_rax, sizeof(_mov_rax));
|
||||
function_offset += sizeof(_mov_rax);
|
||||
_memcpy((void*)function_offset, &jmp_offset, sizeof(void*));
|
||||
function_offset += sizeof(void*);
|
||||
_memcpy((void*)function_offset, _jmp_rax, sizeof(_jmp_rax));
|
||||
/*
|
||||
location shellcode function
|
||||
*/
|
||||
for (int i = 0; i < size_of_shellcode; i++)
|
||||
{
|
||||
auto write_ptr = (uintptr_t*)((PUCHAR)hook_function + i);
|
||||
if (*write_ptr == 0x1234567812345678)
|
||||
{
|
||||
_memcpy((void*)write_ptr, (void*)&jmp_back, sizeof(uintptr_t));
|
||||
DebugPrintA("[jmp_back]Fix KernelBase.CreateFileW %p \n", jmp_back);
|
||||
}
|
||||
if (*write_ptr == 0x1234567891ABCDEF)
|
||||
{
|
||||
_memcpy((void*)write_ptr, (void*)&ntdll_wcsstr, sizeof(uintptr_t));
|
||||
DebugPrintA("Fix Ntdll.wcsstr %p \n", ntdll_wcsstr);
|
||||
}
|
||||
if (*write_ptr == 0x1337567891ABCDEF)
|
||||
{
|
||||
_memcpy((void*)write_ptr, (void*)&kernelbase_GetModuleFileNameW, sizeof(uintptr_t));
|
||||
DebugPrintA("Fix KernelBase.GetModuleFileNameW %p \n", kernelbase_GetModuleFileNameW);
|
||||
}
|
||||
if (*write_ptr == 0x1234567891AB1337)
|
||||
{
|
||||
_memcpy((void*)write_ptr, (void*)&kernel32_loadlibrary, sizeof(uintptr_t));
|
||||
DebugPrintA("Fix kernel32.loadlibrary %p \n", kernel32_loadlibrary);
|
||||
}
|
||||
}
|
||||
/*
|
||||
CreateFileW -> hook_function
|
||||
*/
|
||||
function_offset = kernelbase_CreateFileW;
|
||||
_memcpy((void*)function_offset, _mov_rax, sizeof(_mov_rax));
|
||||
function_offset += sizeof(_mov_rax);
|
||||
_memcpy((void*)function_offset, &hook_function, sizeof(void*));
|
||||
function_offset += sizeof(void*);
|
||||
_memcpy((void*)function_offset, _jmp_rax, sizeof(_jmp_rax));
|
||||
DebugPrintA("success hooked at: %p \n", hook_function);
|
||||
|
||||
} else {
|
||||
DebugPrintA("can not get free speace for shellcode \n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
DebugPrintA("can not get export function\n");
|
||||
}
|
||||
}
|
||||
KeUnstackDetachProcess(&apc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
driver->DriverUnload = DriverUnload;
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
11
CowInject/main.h
Normal file
11
CowInject/main.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
extern HANDLE __stdcall HkCreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
|
||||
extern int __stdcall ShellCodeEnd();
|
||||
extern ULONG_PTR GetProcAddressR(ULONG_PTR hModule, const char* lpProcName, BOOL x64Module);
|
||||
extern LONG BlackBoneSafeSearchString(IN PUNICODE_STRING source, IN PUNICODE_STRING target, IN BOOLEAN CaseInSensitive);
|
||||
extern bool _memcpy(PVOID address, PVOID target_address, ULONG length);
|
||||
//see shell_code_start ,fuck gcc, aways broken shellcode
|
||||
static BYTE HookCode[] = {
|
||||
0x48,0x8B,0xC4,0x48,0x89,0x58,0x08,0x48,0x89,0x70,0x10,0x48,0x89,0x78,0x18,0x55,0x41,0x54,0x41,0x55,0x41,0x56,0x41,0x57,0x48,0x8D,0xA8,0xF8,0xFD,0xFF,0xFF,0x48,0x81,0xEC,0xE0,0x02,0x00,0x00,0x45,0x33,0xED,0xC7,0x44,0x24,0x40,0x43,0x00,0x3A,0x00,0x41,0x8B,0xF0,0x66,0x44,0x89,0x6C,0x24,0x58,0x44,0x8B,0xF2,0x66,0x44,0x89,0x6C,0x24,0x78,0x48,0x8B,0xD9,0x66,0x44,0x89,0x6D,0xC0,0x41,0xB8,0x04,0x01,0x00,0x00,0xC7,0x44,0x24,0x44,0x5C,0x00,0x68,0x00,0x48,0x8D,0x55,0xD0,0xC7,0x44,0x24,0x48,0x75,0x00,0x6F,0x00,0x33,0xC9,0xC7,0x44,0x24,0x4C,0x6A,0x00,0x69,0x00,0x48,0xB8,0xEF,0xCD,0xAB,0x91,0x78,0x56,0x37,0x13,0xC7,0x44,0x24,0x50,0x2E,0x00,0x64,0x00,0x49,0x8B,0xF9,0xC7,0x44,0x24,0x54,0x6C,0x00,0x6C,0x00,0xC7,0x44,0x24,0x60,0x43,0x00,0x3A,0x00,0xC7,0x44,0x24,0x64,0x5C,0x00,0x6E,0x00,0xC7,0x44,0x24,0x68,0x74,0x00,0x64,0x00,0xC7,0x44,0x24,0x6C,0x6C,0x00,0x6C,0x00,0xC7,0x44,0x24,0x70,0x2E,0x00,0x64,0x00,0xC7,0x44,0x24,0x74,0x6C,0x00,0x6C,0x00,0xC7,0x45,0xA0,0x43,0x00,0x6F,0x00,0xC7,0x45,0xA4,0x6E,0x00,0x61,0x00,0xC7,0x45,0xA8,0x6E,0x00,0x53,0x00,0xC7,0x45,0xAC,0x61,0x00,0x6E,0x00,0xC7,0x45,0xB0,0x64,0x00,0x62,0x00,0xC7,0x45,0xB4,0x6F,0x00,0x78,0x00,0xC7,0x45,0xB8,0x2E,0x00,0x65,0x00,0xC7,0x45,0xBC,0x78,0x00,0x65,0x00,0xC7,0x45,0x80,0x42,0x00,0x45,0x00,0xC7,0x45,0x84,0x53,0x00,0x65,0x00,0xC7,0x45,0x88,0x72,0x00,0x76,0x00,0xC7,0x45,0x8C,0x69,0x00,0x63,0x00,0xC7,0x45,0x90,0x65,0x00,0x2E,0x00,0xC7,0x45,0x94,0x65,0x00,0x78,0x00,0xC7,0x45,0x98,0x65,0x00,0x00,0x00,0xFF,0xD0,0x48,0x8D,0x55,0xA0,0x49,0xBF,0xEF,0xCD,0xAB,0x91,0x78,0x56,0x34,0x12,0x48,0x8D,0x4D,0xD0,0x41,0xFF,0xD7,0x48,0x85,0xC0,0x74,0x11,0x48,0x8D,0x4C,0x24,0x40,0x48,0xB8,0x37,0x13,0xAB,0x91,0x78,0x56,0x34,0x12,0xFF,0xD0,0x48,0x8D,0x55,0x80,0x48,0x8D,0x4D,0xD0,0x41,0xFF,0xD7,0x48,0x8B,0xCB,0x48,0x85,0xC0,0x74,0x14,0x48,0x8D,0x54,0x24,0x40,0x41,0xFF,0xD7,0x48,0x85,0xC0,0x48,0x8D,0x4C,0x24,0x60,0x48,0x0F,0x44,0xCB,0x48,0x8B,0x85,0x40,0x02,0x00,0x00,0x4C,0x8B,0xCF,0x48,0x89,0x44,0x24,0x30,0x44,0x8B,0xC6,0x8B,0x85,0x38,0x02,0x00,0x00,0x41,0x8B,0xD6,0x89,0x44,0x24,0x28,0x8B,0x85,0x30,0x02,0x00,0x00,0x89,0x44,0x24,0x20,0x48,0xB8,0x78,0x56,0x34,0x12,0x78,0x56,0x34,0x12,0xFF,0xD0,0x4C,0x8D,0x9C,0x24,0xE0,0x02,0x00,0x00,0x49,0x8B,0x5B,0x30,0x49,0x8B,0x73,0x38,0x49,0x8B,0x7B,0x40,0x49,0x8B,0xE3,0x41,0x5F,0x41,0x5E,0x41,0x5D,0x41,0x5C,0x5D,0xC3,0xCC,
|
||||
};
|
||||
1
CowInject/shell_code_end.cpp
Normal file
1
CowInject/shell_code_end.cpp
Normal file
@@ -0,0 +1 @@
|
||||
#include "head.h"
|
||||
28
CowInject/shell_code_start.cpp
Normal file
28
CowInject/shell_code_start.cpp
Normal file
@@ -0,0 +1,28 @@
|
||||
#include "head.h"
|
||||
|
||||
//shellcode just like:
|
||||
/*
|
||||
HANDLE __stdcall HookCreateFileW(LPCWSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile) {
|
||||
CreateFileWT oCreateFileW = (CreateFileWT)0x1234567812345678;
|
||||
wcsstrAt oWcsstr = (wcsstrAt)0x1234567891ABCDEF;
|
||||
GetModuleFileNameWT oGetModuleFileNameW = (GetModuleFileNameWT)0x1337567891ABCDEF;
|
||||
LoadLibraryWT oLoadLibraryW = (LoadLibraryWT)0x1234567891AB1337;
|
||||
wchar_t CheatPath[] = { 'C',':','\\','h','u','o','j','i','.','d','l','l','\0' };
|
||||
wchar_t NtdllName[] = { 'C',':','\\','n','t','d','l','l','.','d','l','l','\0' };
|
||||
//RainbowSix.exe
|
||||
wchar_t GameName[] = { 'C','o','n','a','n','S','a','n','d','b','o','x','.','e','x','e','\0' };
|
||||
//BEService.exe
|
||||
wchar_t AntiCheatName[] = { 'B','E','S','e','r','v','i','c','e','.','e','x','e','\0' };
|
||||
wchar_t ExeFile[MAX_PATH];
|
||||
oGetModuleFileNameW(NULL, ExeFile, MAX_PATH);
|
||||
if (oWcsstr(ExeFile, GameName) != NULL) {
|
||||
oLoadLibraryW(CheatPath);
|
||||
}
|
||||
if (oWcsstr(ExeFile, AntiCheatName) != NULL) {
|
||||
return oCreateFileW(oWcsstr(lpFileName, CheatPath) != NULL ? NtdllName : lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
|
||||
}
|
||||
return oCreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
|
||||
}
|
||||
int __stdcall ShellCodeEnd() {
|
||||
return 0x1337;
|
||||
}*/
|
||||
Reference in New Issue
Block a user