首页
社区
课程
招聘
[求助]资源在pe磁盘文件中的定位~请教!
发表于: 2009-5-31 22:40 6720

[求助]资源在pe磁盘文件中的定位~请教!

2009-5-31 22:40
6720
在其他地方发了一次,但是没弄明白,现在再问问。。。
罗云斌《WIN32汇编》一书中写到定位PE文件中资源在磁盘文件位置的方法如下:
循环扫描节表并得到每个每个节在内存中的起始RVA(由VirtualAddress得到),并根据节的大小(SizeOfRawData字段),算出节的结束RVA,Z最后判断目标RVA是否落在某个节之内。

我有个疑问:SizeOfRawData字段是节在磁盘中所占字节大小,这个数值是VirtualSize字段按照FileAlignment值对齐后的大小(罗云斌书上这样指出的)。既然SizeOfRawData字段是节在磁盘中所占字节大小,为什么还能用节在内存中的RVA加上SizeOfRawData得到节的结束RVA呢?当节映射到内存中后大小已经变了啊,怎么还能用在磁盘文件中的大小计算结束RVA?我认为应该是先用VirtualAddress得到相邻两个节的起始RVA,比如节A的RVA为xxxx,节B的RVA是yyyy,AB两个节相邻。这样xxxx和yyyy地址之间的内存不就是属于A节了吗,然后判断目标地址是否落在xxxx和yyyy之间,如落在此间,则为在A节中,不是再继续往下找。

啰啰嗦嗦这么多,希望大家跟指点下,谢谢了~!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还有,如果用SizeOfRawData字段可以,那用VirtualSize字段行不行呢?
2009-5-31 22:41
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=lkdsgrjra;633913]当节映射到内存中后大小已经变了啊,怎么还能用在磁盘文件中的大小计算结束RVA?QUOTE]

映射后的大小是不会变化的
2009-6-1 09:53
0
雪    币: 279
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
自己写一个程序...再用winhex看一下不就知道了..
2009-6-1 12:56
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
对齐方式不一样,大小不就变了吗?如果没变,那用VirtualSiz也可以咯?
2009-6-1 23:30
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
竟然没人回,自己顶下
2009-6-3 12:50
0
雪    币: 235
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
定位PE文件中资源在磁盘文件位置
SizeOfRawData字段是节在磁盘中所占字节大小
节在内存中的RVA加上SizeOfRawData得到节的结束RVA
好好读这几句
2009-6-3 17:38
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=hfyy;635591]定位PE文件中资源在磁盘文件位置
SizeOfRawData字段是节在磁盘中所占字节大小
节在内存中的RVA加上SizeOfRawData得到节的结束RVA
好好读这几句[/QUOTE]

能说明白点吗?
磁盘文件映射到内存,对齐方式改变。如果用SizeOfRawData行,用节的原始大小(没对齐时节的大小,即VirtualSize字段)计算行不?
请说清楚点~谢谢!
2009-6-3 20:09
0
雪    币: 140
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好像对齐不对齐是不会影响节的大小的吧,只是影响该节的开始地址
2009-6-3 21:54
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
对齐方式不一样,大小不就变了啊
有没有人能解释下我上面问的问题?解惑~~
2009-6-8 13:19
0
雪    币: 124
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
virualsize是整个节真正的大小,pointertorawdata是pe文件在磁盘上的定位,而pe文件的节在磁盘上的大小是sizeofrawdata(这个值也就是virtualsize通过文件对齐粒度对其后的大小)。当pe文件加载到内存时,pe文件中的节加载到virtualadress这个地址(如果没有进行重定位的话)。一般来说上一个节地址加上这个节的大小通过sectionalign对齐后的大小后得到的地址就是下一个节的开始地址,但是这不并不是pe文件的标准,只是编译器通常这样做;
2009-6-8 22:19
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我们通常定位资源用的是看目标地址在不在virtualsize和加上SizeOfRawdata后的地址中,如果把sizeofraw换成virtualsize行不?
2009-6-9 12:50
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
当节映射到内存中后大小已经变了啊,怎么还能用在磁盘文件中的大小计算结束RVA?

不是计算节结束的RVA,是计算节中的数据结束的RAV

其实LZ的方法和书上的是一会事。

现在只有数据的RVA要得到RAW。
2者相同的只有数据相对于节头的偏移地址。
所以首先要找到数据A在哪个节里。书上的既审核了节的开始位置,也审核了节数据的结束位置。来确定数据的位置,楼主只用相邻节头来确定数据的位置。

楼主的方法更简单。
因为数据不可能在图中浅色的位置,因为那些地方都是内存的随机数据。没有意义。文件中根本不存在,也就不可能有RAW

书上的更严谨一点。
因为有可能数据出错真的求了一个在浅色位置的数据。书上的代码可以提示错误,告诉用户数据错误。用楼主的方法就找到了下一个节一个其他数据。

明白没?

上传的附件:
2009-6-9 13:40
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我理解你的意思。照这样说用VIRTUALSIZE也可以啊
2009-6-9 14:33
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
15
可以。但是多余。
既然用审核大小的方法了,你审核的大小是VIRTUALSIZE。
一旦RVA的数据落在内存比文件多出来那部分空间,你的程序是发现不了错误的。会得出一个错误的结论
那你还审核大小干嘛,不如直接用节头地址来判断。就不管输入的RVA和不合法
2009-6-9 16:08
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
16
例子吧:
比如一个节。
文件中 开始于1000。大小是500。就是1000-1500
内存属性是开始与1000。大小是600。就是1000-1600
现在有一个错误的资源RVA=1550。
你怎么能发现?为什么说是错误的资源也因该能看出来吧。
2009-6-9 16:12
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
让我再看看..
2009-6-9 18:40
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
18
用VIRTUALSIZE来判断1550是在节里边吧。偏移是550.但是文件节的大小才500。你怎么办?直接算你就算到后边了。
2009-6-9 18:44
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
virtualsize是没对齐的大小,应该比sizeofrawdata小啊
2009-6-9 18:48
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
首先循环扫描节表并得到节在内存中的RVA,根据VIRTUALSIZE算出节中数据结束的RVA,最后比较判断目标RVA是否落在某个节内。
剩下的步骤不变和书上一样,这样怎么会有错?
VIRTUALSIZE是节没有进行对齐的原始大小,应该小于节按照磁盘对齐后的大小即sizeofrawdata,也就是小于500,偏移550不在判断的节内
2009-6-9 18:56
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
21
VIRTUALSIZE并不是总是比sizeofrawdata小。一般是这样。那么2总方法没区别
VIRTUALSIZE比sizeofrawdata大的话。就不严谨了。
2009-6-9 20:31
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
嗯,谢谢你了,还给我找了个图~~呵呵 以后多多交流!
2009-6-9 21:56
0
游客
登录 | 注册 方可回帖
返回
//