Skip to content

Commit 9cf893a

Browse files
authored
Merge pull request #82 from NotRequiem/main
Fixed buffer overrun
2 parents 2ec8abd + 115c029 commit 9cf893a

1 file changed

Lines changed: 32 additions & 31 deletions

File tree

src/vmaware.hpp

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,7 @@ struct VM {
752752

753753
// basically checks whether all the techniques were cached
754754
static bool all_present() {
755-
return (cache_table.size() == (enum_size - 4)); // 4 are non-technique flags
755+
return (cache_table.size() == (static_cast<unsigned long long>(enum_size) - 4)); // 4 are non-technique flags
756756
}
757757
};
758758

@@ -2832,17 +2832,18 @@ struct VM {
28322832
return false;
28332833
#else
28342834
u32 pnsize = 0x1000;
2835-
TCHAR* provider = new TCHAR[pnsize];
2836-
2837-
u32 retv = WNetGetProviderName(WNNC_NET_RDR2SAMPLE, provider, reinterpret_cast<LPDWORD>(&pnsize));
2838-
2839-
if (retv == NO_ERROR) {
2840-
bool result = (lstrcmpi(provider, _T("VirtualBox Shared Folders")) == 0);
2841-
delete provider;
2842-
return result;
2843-
}
2844-
2845-
return false;
2835+
TCHAR* provider = new TCHAR[pnsize];
2836+
2837+
u32 retv = WNetGetProviderName(WNNC_NET_RDR2SAMPLE, provider, reinterpret_cast<LPDWORD>(&pnsize));
2838+
2839+
if (retv == NO_ERROR) {
2840+
bool result = (lstrcmpi(provider, _T("VirtualBox Shared Folders")) == 0);
2841+
delete[] provider;
2842+
return result;
2843+
}
2844+
2845+
delete[] provider;
2846+
return false;
28462847
#endif
28472848
}
28482849
catch (...) {
@@ -4851,28 +4852,28 @@ struct VM {
48514852
return false;
48524853
}
48534854

4854-
u8 idtr[6];
4855-
u32 idt_entry = 0;
4855+
u8 idtr[10]{};
4856+
u32 idt_entry = 0;
48564857

48574858
#if (MSVC)
4858-
#if (x86_32)
4859+
#if (x86_32)
48594860
_asm sidt idtr
4860-
#elif (x86)
4861-
#pragma pack(1)
4861+
#elif (x86)
4862+
#pragma pack(1)
48624863
struct IDTR {
48634864
u16 limit;
48644865
u64 base;
48654866
};
4866-
#pragma pack()
4867+
#pragma pack()
48674868

48684869
IDTR idtrStruct;
48694870
__sidt(&idtrStruct);
48704871
std::memcpy(idtr, &idtrStruct, sizeof(IDTR));
4871-
#else
4872+
#else
48724873
return false;
4873-
#endif
4874+
#endif
48744875

4875-
idt_entry = *((unsigned long*)&idtr[2]);
4876+
idt_entry = *reinterpret_cast<unsigned long*>(&idtr[2]);
48764877
#elif (LINUX)
48774878
// false positive with root for some reason
48784879
if (util::is_admin()) {
@@ -4888,7 +4889,7 @@ struct VM {
48884889

48894890
__asm__ __volatile__(
48904891
"sidt %0"
4891-
: "=m" (idtr)
4892+
: "=m" (idtr_struct)
48924893
);
48934894

48944895
std::ifstream mem("/dev/mem", std::ios::binary);
@@ -4906,7 +4907,7 @@ struct VM {
49064907
return false;
49074908
}
49084909
catch (...) {
4909-
debug("SIDT: ", "catched error, returned false");
4910+
debug("SIDT: ", "caught error, returned false");
49104911
return false;
49114912
}
49124913

@@ -4952,7 +4953,7 @@ struct VM {
49524953
#if (!MSVC || !x86)
49534954
return false;
49544955
#elif (x86_32)
4955-
u8 gdtr[6];
4956+
u8 gdtr[6]{};
49564957
u32 gdt = 0;
49574958

49584959
_asm sgdt gdtr
@@ -5139,7 +5140,7 @@ struct VM {
51395140
#if (!MSVC || !x86)
51405141
return false;
51415142
#elif (x86_32)
5142-
unsigned char m[6];
5143+
unsigned char m[6]{};
51435144
__asm sidt m;
51445145
return (m[5] > 0xD0);
51455146
#else
@@ -5167,7 +5168,7 @@ struct VM {
51675168
#if (!MSVC || !x86)
51685169
return false;
51695170
#elif (x86_32)
5170-
unsigned char m[6];
5171+
unsigned char m[6]{};
51715172
__asm sgdt m;
51725173
return (m[5] > 0xD0);
51735174
#else
@@ -5195,7 +5196,7 @@ struct VM {
51955196
#if (!MSVC || !x86)
51965197
return false;
51975198
#elif (x86_32)
5198-
unsigned short m[6];
5199+
unsigned short m[6]{};
51995200
__asm sldt m;
52005201
return (m[0] != 0x00 && m[1] != 0x00);
52015202
#else
@@ -5222,7 +5223,7 @@ struct VM {
52225223
#if (!MSVC || !x86)
52235224
return false;
52245225
#elif (x86_32)
5225-
u8 idtr[6];
5226+
u8 idtr[6]{};
52265227
u32 idt = 0;
52275228

52285229
_asm sidt idtr
@@ -5722,7 +5723,7 @@ struct VM {
57225723
u8 extmodel;
57235724
};
57245725

5725-
struct stepping_struct steps;
5726+
struct stepping_struct steps {};
57265727

57275728
u32 unused, eax = 0;
57285729
cpu::cpuid(eax, unused, unused, unused, 1);
@@ -5801,7 +5802,7 @@ struct VM {
58015802
constexpr u8 EXTMODEL = 1;
58025803
constexpr u8 MODEL = 2;
58035804

5804-
for (const auto arch : old_archs) {
5805+
for (const auto& arch : old_archs) {
58055806
if (
58065807
steps.family == arch.at(FAMILY) &&
58075808
steps.extmodel == arch.at(EXTMODEL) &&
@@ -6465,4 +6466,4 @@ const std::map<VM::u8, VM::core::technique> VM::core::table = {
64656466
// __TABLE_LABEL, add your technique above
64666467
// { VM::FUNCTION, { POINTS, FUNCTION_POINTER }}
64676468
// ^ template
6468-
};
6469+
};

0 commit comments

Comments
 (0)