upload some png

This commit is contained in:
BeneficialCode
2022-12-21 10:01:27 +08:00
parent abe307ae5f
commit 996e7a6f6e
19 changed files with 148 additions and 5 deletions
+22 -1
View File
@@ -246,6 +246,7 @@ enum class VadCountPos {
NumberGenericTableElements
};
struct BitField {
USHORT Position;
USHORT Size;
@@ -257,7 +258,25 @@ struct MmAvlTableOffsets {
};
struct MmVadFlagsOffsets {
ULONG Protection;
ULONG64 Protection;
BitField ProtectionBitField;
ULONG64 PrivateMemory;
BitField PrivateMemoryBitField;
ULONG64 NoChange;
BitField NoChangeBitField;
ULONG64 CommitCharge;
BitField CommitChargeBitField;
};
struct MmVadShortOffsets {
ULONG64 StartingVpn;
ULONG64 EndingVpn;
ULONG VpnSize;
ULONG64 Parent;
ULONG ParentSize;
ULONG64 LeftChild;
ULONG64 RightChild;
ULONG ChildSize;
};
struct VadData {
@@ -265,6 +284,8 @@ struct VadData {
EProcessOffsets EprocessOffsets;
MmAvlTableOffsets TableOffsets;
ULONG Pid;
MmVadFlagsOffsets VadFlagsOffsets;
MmVadShortOffsets VadShortOffsets;
};
struct VadInfo {
+2
View File
@@ -0,0 +1,2 @@
#include "pch.h"
#include "CpuInfo.h"
+1
View File
@@ -0,0 +1 @@
#pragma once
+2
View File
@@ -232,6 +232,7 @@
<ClInclude Include="BypassAntiKernelDbg.h" />
<ClInclude Include="BypassObCallback.h" />
<ClInclude Include="Common.h" />
<ClInclude Include="CpuInfo.h" />
<ClInclude Include="CriticalRegion.h" />
<ClInclude Include="CyclicBuffer.h" />
<ClInclude Include="DbgDefender.h" />
@@ -280,6 +281,7 @@
<ClCompile Include="AutoLock.cpp" />
<ClCompile Include="BypassAntiKernelDbg.cpp" />
<ClCompile Include="BypassObCallback.cpp" />
<ClCompile Include="CpuInfo.cpp" />
<ClCompile Include="CriticalRegion.cpp" />
<ClCompile Include="CyclicBuffer.cpp" />
<ClCompile Include="DbgDefender.cpp" />
+10 -4
View File
@@ -13,10 +13,6 @@
<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="Synchronization">
<UniqueIdentifier>{08ba55e2-d7d7-4d8a-80c2-d1203de7ef76}</UniqueIdentifier>
</Filter>
@@ -38,6 +34,10 @@
<Filter Include="Timer">
<UniqueIdentifier>{c59f543e-d208-4f78-899d-a0147ca066cb}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Driver Files">
<UniqueIdentifier>{8E41214B-6785-4CFE-B992-037D68949A14}</UniqueIdentifier>
<Extensions>inf;inv;inx;mof;mc;</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h">
@@ -181,6 +181,9 @@
<ClInclude Include="VadHelpers.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CpuInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="pch.cpp">
@@ -303,6 +306,9 @@
<ClCompile Include="VadHelpers.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CpuInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<MASM Include="code64.asm">
+108
View File
@@ -55,5 +55,113 @@ NTSTATUS VadHelpers::GetVadCount (VadData* pData, PULONG pCount) {
ObDereferenceObject(Process);
}
return status;
}
ULONG64 VadHelpers::ReadBitField(PUCHAR readAddr, BitField * pBitField) {
readAddr += (pBitField->Position / 8);
ULONG readSz = (pBitField->Position % 8 + pBitField->Size
+ 7) / 8;
ULONG64 readBits;
ULONG64 bitCopy;
RtlCopyMemory(&readBits, readAddr, readSz);
readBits = readBits >> (pBitField->Position % 8);
bitCopy = ((ULONG64)1 << pBitField->Size);
bitCopy -= (ULONG64)1;
readBits &= bitCopy;
return readBits;
}
ULONG64 VadHelpers::ReadFieldValue(PUCHAR readAddr, ULONG readSize) {
ULONG64 value;
RtlCopyMemory(&value, readAddr, readSize);
return value;
}
NTSTATUS VadHelpers::DumpsAllVadsForProcess(VadData* pData, VadInfo* pInfo) {
ULONG64 Next;
ULONG64 VadToDump;
ULONG64 ParentStored;
ULONG64 First;
ULONG64 Left;
ULONG64 Prev;
ULONG Flags;
ULONG Done;
ULONG Level = 0;
ULONG Count = 0;
ULONG AverageLevel = 0;
ULONG MaxLevel = 0;
ULONG VadFlagsPrivateMemory = 0, VadFlagsNoChange = 0;
ULONG PhysicalMapping = 0, ImageMap = 0, NoChange = 0, LargePages = 0, MemCommit = 0,
PrivateMemory = 0, Protection = 0;
ULONG64 StartingVpn = 0, EndingVpn = 0, Parent = 0, LeftChild = 0, RightChild = 0;
ULONG64 ControlArea = 0, FirstPrototypePte = 0, LastContiguousPte = 0, CommitCharge = 0;
VadToDump = 0;
Flags = 0;
PEPROCESS Process = nullptr;
NTSTATUS status = PsLookupProcessByProcessId(UlongToHandle(pData->Pid), &Process);
if (NT_SUCCESS(status)) {
do
{
VadToDump = (ULONG64)Process + pData->EprocessOffsets.VadRoot;
if (VadToDump == 0) {
status = STATUS_INVALID_PARAMETER;
break;
}
First = VadToDump;
if (First == 0) {
status = STATUS_INVALID_PARAMETER;
break;
}
PUCHAR readAddr = (PUCHAR)VadToDump + pData->VadFlagsOffsets.PrivateMemory;
VadFlagsPrivateMemory = ReadBitField(readAddr, &pData->VadFlagsOffsets.PrivateMemoryBitField);
readAddr = (PUCHAR)VadToDump + pData->VadFlagsOffsets.NoChange;
VadFlagsNoChange = ReadBitField(readAddr, &pData->VadFlagsOffsets.NoChangeBitField);
readAddr = (PUCHAR)VadToDump + pData->VadShortOffsets.StartingVpn;
ULONG readSz = pData->VadShortOffsets.VpnSize;
StartingVpn = ReadFieldValue(readAddr, readSz);
readAddr = (PUCHAR)VadToDump + pData->VadShortOffsets.EndingVpn;
EndingVpn = ReadFieldValue(readAddr, readSz);
readAddr = (PUCHAR)VadToDump + pData->VadShortOffsets.LeftChild;
readSz = pData->VadShortOffsets.ChildSize;
LeftChild = ReadFieldValue(readAddr, readSz);
readAddr = (PUCHAR)VadToDump + pData->VadShortOffsets.RightChild;
RightChild = ReadFieldValue(readAddr, readSz);
readAddr = (PUCHAR)VadToDump + pData->VadFlagsOffsets.CommitCharge;
CommitCharge = ReadBitField(readAddr, &pData->VadFlagsOffsets.CommitChargeBitField);
Prev = First;
while (LeftChild != 0) {
Prev = First;
First = LeftChild;
Level += 1;
if (Level > MaxLevel) {
MaxLevel = Level;
}
readAddr = (PUCHAR)First + pData->VadShortOffsets.LeftChild;
readSz = pData->VadShortOffsets.ChildSize;
LeftChild = ReadFieldValue(readAddr, readSz);
}
readAddr = (PUCHAR)First + pData->VadShortOffsets.StartingVpn;
readSz = pData->VadShortOffsets.VpnSize;
StartingVpn = ReadFieldValue(readAddr, readSz);
} while (false);
ObDereferenceObject(Process);
}
return status;
}
+3
View File
@@ -2,4 +2,7 @@
struct VadHelpers abstract final {
static NTSTATUS GetVadCount(VadData* pData,PULONG pCount);
static NTSTATUS DumpsAllVadsForProcess(VadData* pData, VadInfo* pInfo);
static ULONG64 ReadBitField(PUCHAR readAddr, BitField* pBitField);
static ULONG64 ReadFieldValue(PUCHAR readAddr, ULONG readSize);
};
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB