解读 RtlGetVersion
2016-10-22 19:05
260 查看
解读 RtlGetVersion
获得系统版本号。NTSTATUS RtlGetVersion(OSVERSIONINFOW &VersionInformation) { UINT_PTR pfn = CalcFunctionAddress(phWCP, pfb_RtlGetVersion); typedef signed int(__stdcall * fnRtlGetVersion)(OSVERSIONINFOW&); fnRtlGetVersion g_fnRtlGetVersion = (fnRtlGetVersion)*(UINT_PTR*)pfn; VersionInformation.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); memset(&VersionInformation.dwMajorVersion, 0, sizeof(VersionInformation.szCSDVersion)); NTSTATUS result = g_fnRtlGetVersion(VersionInformation); return result; } 这个函数比较特别的是,属
于导入函数,在 WCP.dll 中只有函数的地址。
在 64 位版本下有个备注,可以知道其地址:
1802449C0: using guessed type int __fastcall RtlGetVersion(_QWORD);
32 位版本却没有任何信息。
从 ida 中找到导入函数:
584904D0 RtlGetVersion ntdll
再减去 wcp.dll 的起始地址:
using load address 58210000
得到 RtlGetVersion 在 wcp.dll 中的函数的偏移地址,0x102804D0。
这样就可以用与本地函数基本相同的方法访问导入函数了。
既然是基本相同,那就肯定有不同了。
本地函数,用偏移地址经过计算出来的地址就是函数地址了,可以直接进行调用。
而导入函数,用偏移地址经过计算出来的地址并不是该函数的真正地址,而是,原函数在本地统一编址的地址,这个地址中保存的值才是原函数的真正地址,0x7753bd40。可以看到,这明显是另外一
相比较本地函数,导入函数要多取一次地址值的过程,(UINT_PTR):
本地函数:
fnRtlGetVersion g_fnRtlGetVersion = (fnRtlGetVersion)pfn;
导入函数:
fnRtlGetVersion g_fnRtlGetVersion = (fnRtlGetVersion)(UINT_PTR)pfn;
当然,这个函数并不需要通过这种方法进行调用,只是为了熟悉函数的调用方法而已。
相关文章推荐
- error LNK2019: 无法解析的外部符号 "__declspec(dllimport) long __stdcall RtlGetVersion(struct _OSVERSIONINFOW
- error LNK2019: 无法解析的外部符号 "__declspec(dllimport) long __stdcall RtlGetVersion(struct _OSVERSIONINFOW
- windows驱动获取系统版本信息 PsGetVersion RtlGetVersion
- 解读 GetDllVersionString
- 解读 RtlGetSystem
- C4996 'GetVersionExW': 被声明为已否决 TTS_one f:\vs2015\speechsdk\include\sphel
- error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.28/version: open //./pipe/docker_
- MsiGetFileVersion函数不知道为什么折腾了好久还是不成功-原来是检测exe文件不是msi文件
- GetFileVersionInfoSize函数确定操作系统是否可以检索指定文件的版本信息
- Delphi通过GetFileVersionInfo和VerQueryValue等API函数取得详细EXE信息
- 真机:hierarchyviewer]Unable to get view server version from device ?
- 如何使用API函数GetFileVersionInfo,获得版本信息
- Tips:error C4996: 'GetVersionExA': 被声明为已否决
- get assemblyinfo.cs version info in asp.net 2.0
- PHP类中set和get方法解读
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
- Get SharePoint 2010 version
- 解读 DetermineServicingStackVersion
- Could not get unknown property 'ANDROID_BUILD_SDK_VERSION'