Skip to content

Commit 875eaab

Browse files
committed
fixed DarthTon#144
1 parent 0925480 commit 875eaab

File tree

2 files changed

+93
-28
lines changed

2 files changed

+93
-28
lines changed

contrib/VersionHelpers.h

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -59,22 +59,8 @@
5959
typedef NTSTATUS( NTAPI* fnRtlGetVersion )(PRTL_OSVERSIONINFOW lpVersionInformation);
6060

6161
VERSIONHELPERAPI
62-
IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor)
62+
IsWindowsVersionOrGreater( WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor, DWORD dwBuild )
6363
{
64-
/*OSVERSIONINFOEXW osvi = { sizeof(osvi), 0, 0, 0, 0, {0}, 0, 0 };
65-
DWORDLONG const dwlConditionMask = VerSetConditionMask(
66-
VerSetConditionMask(
67-
VerSetConditionMask(
68-
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
69-
VER_MINORVERSION, VER_GREATER_EQUAL),
70-
VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
71-
72-
osvi.dwMajorVersion = wMajorVersion;
73-
osvi.dwMinorVersion = wMinorVersion;
74-
osvi.wServicePackMajor = wServicePackMajor;
75-
76-
return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE;*/
77-
7864
RTL_OSVERSIONINFOEXW verInfo = { 0 };
7965
verInfo.dwOSVersionInfoSize = sizeof( verInfo );
8066

@@ -94,6 +80,9 @@ IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServiceP
9480

9581
if (verInfo.wServicePackMajor >= wServicePackMajor)
9682
return true;
83+
84+
if (verInfo.dwBuildNumber >= dwBuild)
85+
return true;
9786
}
9887

9988
return false;
@@ -102,75 +91,86 @@ IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServiceP
10291
VERSIONHELPERAPI
10392
IsWindowsXPOrGreater()
10493
{
105-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 0 );
94+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 0, 0 );
10695
}
10796

10897
VERSIONHELPERAPI
10998
IsWindowsXPSP1OrGreater()
11099
{
111-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 1 );
100+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 1, 0 );
112101
}
113102

114103
VERSIONHELPERAPI
115104
IsWindowsXPSP2OrGreater()
116105
{
117-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 2 );
106+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 2, 0 );
118107
}
119108

120109
VERSIONHELPERAPI
121110
IsWindowsXPSP3OrGreater()
122111
{
123-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 3 );
112+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINXP ), LOBYTE( _WIN32_WINNT_WINXP ), 3, 0 );
124113
}
125114

126115
VERSIONHELPERAPI
127116
IsWindowsVistaOrGreater()
128117
{
129-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 0 );
118+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 0, 0 );
130119
}
131120

132121
VERSIONHELPERAPI
133122
IsWindowsVistaSP1OrGreater()
134123
{
135-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 1 );
124+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 1, 0 );
136125
}
137126

138127
VERSIONHELPERAPI
139128
IsWindowsVistaSP2OrGreater()
140129
{
141-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 2 );
130+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_VISTA ), LOBYTE( _WIN32_WINNT_VISTA ), 2, 0 );
142131
}
143132

144133
VERSIONHELPERAPI
145134
IsWindows7OrGreater()
146135
{
147-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN7 ), LOBYTE( _WIN32_WINNT_WIN7 ), 0 );
136+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN7 ), LOBYTE( _WIN32_WINNT_WIN7 ), 0, 0 );
148137
}
149138

150139
VERSIONHELPERAPI
151140
IsWindows7SP1OrGreater()
152141
{
153-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN7 ), LOBYTE( _WIN32_WINNT_WIN7 ), 1 );
142+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN7 ), LOBYTE( _WIN32_WINNT_WIN7 ), 1, 0 );
154143
}
155144

156145
VERSIONHELPERAPI
157146
IsWindows8OrGreater()
158147
{
159-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN8 ), LOBYTE( _WIN32_WINNT_WIN8 ), 0 );
148+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN8 ), LOBYTE( _WIN32_WINNT_WIN8 ), 0, 0 );
160149
}
161150

162151
VERSIONHELPERAPI
163152
IsWindows8Point1OrGreater()
164153
{
165-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINBLUE ), LOBYTE( _WIN32_WINNT_WINBLUE ), 0 );
154+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WINBLUE ), LOBYTE( _WIN32_WINNT_WINBLUE ), 0, 0 );
166155
}
167156

168157
VERSIONHELPERAPI
169158
IsWindows10OrGreater()
170159
{
171-
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN10 ), LOBYTE( _WIN32_WINNT_WIN10 ), 0 );
160+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN10 ), LOBYTE( _WIN32_WINNT_WIN10 ), 0, 0 );
161+
}
162+
163+
VERSIONHELPERAPI
164+
IsWindows10AnniversaryOrGreater()
165+
{
166+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN10 ), LOBYTE( _WIN32_WINNT_WIN10 ), 0, 14393 );
172167
}
173168

169+
VERSIONHELPERAPI
170+
IsWindows10CreatorsOrGreater()
171+
{
172+
return IsWindowsVersionOrGreater( HIBYTE( _WIN32_WINNT_WIN10 ), LOBYTE( _WIN32_WINNT_WIN10 ), 0, 15063 );
173+
}
174174

175175
VERSIONHELPERAPI
176176
IsWindowsServer()

src/BlackBone/ManualMap/Native/NtLoader.cpp

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -831,8 +831,73 @@ bool NtLdr::ScanPatterns( )
831831
if(pStart == nullptr)
832832
return false;
833833

834+
// Win10 update 2
835+
if (IsWindows10CreatorsOrGreater())
836+
{
837+
#ifdef USE64
838+
// LdrpHandleTlsData
839+
// 74 33 44 8D 43 09
840+
PatternSearch ps( "\x74\x33\x44\x8d\x43\x09" );
841+
ps.Search( pStart, scanSize, foundData );
842+
843+
if (!foundData.empty())
844+
{
845+
_LdrpHandleTlsData = static_cast<uintptr_t>(foundData.front() - 0x43);
846+
foundData.clear();
847+
}
848+
849+
// RtlInsertInvertedFunctionTable
850+
// 8B FA 49 8D 43 20
851+
PatternSearch ps2( "\x8b\xfa\x49\x8d\x43\x20" );
852+
ps2.Search( pStart, scanSize, foundData );
853+
854+
if (!foundData.empty())
855+
{
856+
_RtlInsertInvertedFunctionTable = static_cast<uintptr_t>(foundData.front() - 0x10);
857+
foundData.clear();
858+
}
859+
860+
// RtlpInsertInvertedFunctionTableEntry
861+
// 49 8B E8 48 8B FA 0F 84
862+
PatternSearch ps3( "\x49\x8b\xe8\x48\x8b\xfa\x0f\x84" );
863+
ps3.Search( pStart, scanSize, foundData );
864+
if (!foundData.empty())
865+
_LdrpInvertedFunctionTable = *reinterpret_cast<int32_t*>(foundData.front() - 0xF + 2) + (foundData.front() - 0xF + 6);
866+
#else
867+
// RtlInsertInvertedFunctionTable
868+
// 8D 45 F0 89 55 F8 50 8D 55 F4
869+
PatternSearch ps1( "\x8d\x45\xf0\x89\x55\xf8\x50\x8d\x55\xf4" );
870+
ps1.Search( pStart, scanSize, foundData );
871+
872+
if (!foundData.empty())
873+
{
874+
_RtlInsertInvertedFunctionTable = static_cast<size_t>(foundData.front() - 0xB);
875+
_LdrpInvertedFunctionTable = *reinterpret_cast<uintptr_t*>(foundData.front() + 0x4C);
876+
foundData.clear();
877+
}
878+
879+
// LdrpHandleTlsData
880+
// 8B C1 8D 4D BC 51
881+
PatternSearch ps2( "\x8b\xc1\x8d\x4d\xbc\x51" );
882+
ps2.Search( pStart, scanSize, foundData );
883+
884+
if (!foundData.empty())
885+
{
886+
_LdrpHandleTlsData = static_cast<uintptr_t>(foundData.front() - 0x18);
887+
foundData.clear();
888+
}
889+
890+
// LdrProtectMrdata
891+
// 75 24 85 F6 75 08
892+
PatternSearch ps3( "\x75\x24\x85\xf6\x75\x08" );
893+
ps3.Search( pStart, scanSize, foundData );
894+
895+
if (!foundData.empty())
896+
_LdrProtectMrdata = static_cast<uintptr_t>(foundData.front() - 0x1C);
897+
#endif
898+
}
834899
// Win 8.1 and later
835-
if (IsWindows8Point1OrGreater())
900+
else if (IsWindows8Point1OrGreater())
836901
{
837902
#ifdef USE64
838903
// LdrpHandleTlsData

0 commit comments

Comments
 (0)