|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
从win8以后,获取系统版本号的API GetVersion已经被废弃,获取到的版本号都是不正确的。那么如何正确获取系统版本号呢?这里有一个方法:
在内核地址0xFFDF0000开始往后4KB的内存与进程空间地址0x7FFE0000是映射到同一物理内存,而内核可以往0xFFDF0000处写入数据,进程可以从0x7FFE0000处读出数据。在这块内存中,定义了一个数据结构:
typedef _KUSER_SHARED_DATA{
+0x000 TickCountLow : 0x1511d3
+0x004 TickCountMultiplier : 0xfa00000
+0x008 InterruptTime : _KSYSTEM_TIME
+0x014 SystemTime : _KSYSTEM_TIME
+0x020 TimeZoneBias : _KSYSTEM_TIME
+0x02c ImageNumberLow : 0x14c
+0x02e ImageNumberHigh : 0x14c
+0x030 NtSystemRoot : [260] 0x43
+0x238 MaxStackTraceDepth : 0
+0x23c CryptoExponent : 0
+0x240 TimeZoneId : 0
+0x244 Reserved2 : [8] 0
+0x264 NtProductType : 1 ( NtProductWinNt )
+0x268 ProductTypeIsValid : 0x1 ''
+0x26c NtMajorVersion : 5
+0x270 NtMinorVersion : 1
+0x274 ProcessorFeatures : [64] ""
+0x2b4 Reserved1 : 0x7ffeffff
+0x2b8 Reserved3 : 0x80000000
+0x2bc TimeSlip : 0
+0x2c0 AlternativeArchitecture : 0 ( StandardDesign )
+0x2c8 SystemExpirationDate : _LARGE_INTEGER 0x0
+0x2d0 SuiteMask : 0x110
+0x2d4 KdDebuggerEnabled : 0 ''
+0x2d5 NXSupportPolicy : 0x2 ''
+0x2d8 ActiveConsoleId : 0
+0x2dc DismountCount : 0
+0x2e0 ComPlusPackage : 0xffffffff
+0x2e4 LastSystemRITEventTickCount : 0x148570d
+0x2e8 NumberOfPhysicalPages : 0xca8ee
+0x2ec SafeBootMode : 0 ''
+0x2f0 TraceLogging : 0
+0x2f8 TestRetInstruction : 0xc3
+0x300 SystemCall : 0x7c92e510
+0x304 SystemCallReturn : 0x7c92e514
+0x308 SystemCallPad : [3] 0
+0x320 TickCount : _KSYSTEM_TIME
+0x320 TickCountQuad : 0
+0x330 Cookie : 0xddb766db
}KUSER_SHARED_DATA,*PKUSER_SHARED_DATA;
在该数据结构偏移0x26c和0x270就是系统的主版本号和次版本号。所以要想获取系统版本号,只要从0x7FFE0000处开始读出该数据结构即可。
PS: 该块内存有4KB之多,而KUSER_SHARED_DATA只是占了很小的一部分,还剩下很大的空间,可以做很多事 。就是看你的想象力了 |
评分
-
查看全部评分
|