首页
社区
课程
招聘
问一个问题,将内核文件映射到内存之后获取未导出函数的地址。
发表于: 2013-7-15 15:18 4497

问一个问题,将内核文件映射到内存之后获取未导出函数的地址。

2013-7-15 15:18
4497
从网上找了好多资料后,写了个程序,来获取NtXXXX的地址,该函数未导出。所以通过特征码查找。

首先,将createfile 打开ntoskrnl.exe,然后创建映射之类的。。重点不在这。。。

然后,顺利将ntoskrnl.exe映射进内存。然后读取,成功了。得到NTXXXX函数的RVA=947FC.

然后我用XUETR工具查看本机器ntoskrnl.exe的基地址,然后将这个基地址加947fc,反汇编跟到这个地址之后查看。并没有看到我要找的函数。。。。。

问题就是这个问题,有了问题自然要开始解决。我首先通过工具看了看本地NtXXXX这个函数的地址,减去XUETR查看的本机器ntoskrnl.exe的基地址,发现  得到的RVA2竟然等于上面通过映射文件得到的RVA1+0x14000;也就是说末尾3字节是相同的。。。。

我对PE不是很了解。只是知道有那么个事,一会去查看一下,难道我第一次得到的是文件偏移??可是网上的资料很多都是说内存映射之后得到的就是RVA啊。。。。

还有个问题,就是我用GetFileSize获得的文件大小,我C盘下的这个ntoskrnl.exe,是209000.而XUETR显示的ntoskrnl.exe 是229000(好像是这个,反正两个数不一样大),请问这是为什么呢?我用XUETR右键的内存转储文件,拷贝出来的,文件大小是2.16MB,而我C盘下的这个文件是2.04MB。。。。。我懂得确实不多。百度搜狗了一天也没找到什么有用的。还麻烦高手给解释一下。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1392
活跃值: (5107)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
文件大小 映射到内存以后会一般会变大的。内存对齐

你要获取内存中的大小要用到PE头内的IMAGESIZE ,或者枚举模块信息

磁盘文件大小用Getfilesize
磁盘文件大小不一定等于加载到内存后的文件大小
2013-7-15 16:25
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
簡單來說
File Offset = RVA - Section Virtual Offset + Section Raw Offset
後面兩個值可以在image section header找到,內存轉儲文件大小也可以用這個算出大小
2013-7-19 00:21
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
4
ntoskrnl.exe 模块不一定就是加载了ntoskrnl.exe文件,因为ntoskrnl.exe模块还可以加载ntkrnlmp.exe文件作为ntoskrnl.exe 模块,还有也可以选择其他的ntoskrnl.exe 模块文件。你只要找到导出表的原始导出模块名:ntoskrnl.exe 的PE文件,那它就有可能被加载为ntoskrnl.exe 模块,所以分析ntoskrnl.exe 模块就要找到对应的PE文件 先!
2013-7-20 15:39
0
游客
登录 | 注册 方可回帖
返回
//