首页
社区
课程
招聘
[求助]<加密与解密>重定位原理求援
2010-1-13 01:16 5735

[求助]<加密与解密>重定位原理求援

2010-1-13 01:16
5735
把第十章看完了,Pe分析工具也做成功了,其它的都好理解,就是对这个dll基址重定位流程不大明白,希望高手们通俗的帮我解说一下:
1,SizeOfBlock:是当前重定位结构的大小,因为VirtualAddresss和SizeOfBlock大小都是固定的4个字节,因此这个项减去8,就是TypeOffset大小
   这句话不大明白,帮我解说一下(最好能帮我举个数字例)

2,实例中找到的402000h和403030h,书上说这2个即为所需要重定位的数据
  请教:这数据:是文件原来指定的加载地址?
                     还是要重定位的地址与文件指定加载地址的差值?
                     还是最后重定位完后加载的址?

3,流程问题:假设最后映射到870000h处,是谁最先得到这个数据的?
                各块是与重定位值怎么联系上的(通过哪个参数)?
                各块与IMAGE_BASE_RELOCATION是怎么是关联上的(通过哪个参数)?

新手有些问题可能很天真,不过这个原理一个要搞明白啊,不然后面的脱壳篇一碰到脱dll的,就只知道结果,不明白原理
诚恳请高手们帮我解说,谢谢了

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
怡风 2010-1-13 10:26
2
0
谁来帮我啊,在线等啊
雪    币: 32403
活跃值: (18850)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2010-1-13 10:37
3
0
你找一个DLL文件,用LordPE打开,查看重定位表部分“Directory Table/Relocation/ L按钮”,就很容易理解了。

402000h和403030h是没有重定位时的地址数据,即按默认基址定位的地址。

假设最后映射到870000h处:是整个DLL文件都被映射到这个地址上,可以这样理解:870000h就是新点
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
怡风 2010-1-13 11:08
4
0
去看了,Lordpe里面的可以看得明白,跟书的的差不多,得出的RVA换成文件偏移就能找到402000和403030这2个值.这些我都能找的到,也理解他的找法.就是不明白他的整个重定位流程,书上给的例子只是找到402000和403030这2个默认定位的地址.重定位的过程并有解释.希望老大能就上面的1,3问题帮我解说一下.
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
怡风 2010-1-13 11:38
5
0
第一个问题理解了,sizeofblock是指IMage_base_relocation整个结构的大小,扣掉8个字节就是typeoffset的所占字节数.typeoffset是以word对齐的.所以再除以2就是typeoffset数组的大小
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
怡风 2010-1-13 11:41
6
0
还剩下第三个问题,重定位的具体流程,请高手们帮我解释一下,先谢谢了
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
怡风 2010-1-13 12:19
7
0
不懂这样理解对不对(全以书中数据为例):
1,系统决定把dll加载到870000h处,加载器服从系统决定,把基址调到870000上处,并算出了差值470000h
2,加载器又把470000h与60f里402000h,623里的403030h的值分别相加,并写回60f,623里,这样60f里的值
就变成了872000h,623里的值就变成了873030h
3,需要重定位的块就自动从各自相对应的地址里(60f,623)取出真正的映射地址完成映射.(至于怎么找到跟自已
  对应的加载在址就不大明白了)
游客
登录 | 注册 方可回帖
返回