能力值:
( LV2,RANK:10 )
|
-
-
2 楼
 我顶顶....
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
  help
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我来给你指一下找到BoundImport的方法
DOS header->PE header->optional header->optional header里最后一个成员就是data directory(数据目录表)
data directory由NumberOfRvaAndSize个(也就是说data directory包含很多个IMAGE_DATA_DIRECTORY结构体,数量由NumberOfRvaAndSize决定)IMAGE_DATA_DIRECTORY结构体组成
NumberOfRvaAndSize在data directory之前,也就是optional header的倒数第二个成员
data directory一共有16个IMAGE_DATA_DIRECTORY 结构数组
------------------
再补充个为什么是16
这个16是因为在PSDK中有一个宏定义,定义如下
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
--------------------
以序号0开头
序号11就是你要找的Bound Import
↑你就可以根据上述描述的情况找到Bound Import的地址了呀
------------------------------------------------------
再给你补充个PE结构总览图
DOS头
MZ头部
DOS存根
PE头
PE标识
文件头
可选头optional header上文说的就是这个
节表
节表一
节表二
节表数据
节表数据一
节表数据二
-------------------------------------------------
下面介绍IMAGE_DATA_DIRECTORY 结构数组
IMAGE_DATA_DIRECTORY STRUCT
VirtualAddress dd ?
isize dd ?
IMAGE_DATA_DIRECTORY ENDS
----------------------------------
不知道你是否听懂了?
希望能帮到你。
另外看雪早就有帖子讲述相关的知识点的。你可以搜索一下 应该是讲PE结构的第六章的一个帖子
地址我帮你找到了 501K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6u0r3K9%4y4K6k6q4)9J5c8Y4c8#2N6r3!0J5K9h3q4D9i4K6u0r3j5$3S2S2M7o6S2Q4x3X3b7I4i4K6u0V1y4W2)9J5k6h3S2@1L8b7`.`.
希望以后多看看看雪的安全文库,多多发挥自学的能力。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
 大哥你完全没理解我的意思啊。。。。
不过还是谢谢你吧,总算有人回贴了,唉....
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
你在上述文章中一共问了两个问题
1.可是如何确定他在文件中的物理地址呢?
2.难道它的位置是确定的,接在节表的后面的吗?你是指BoundImport的位置还是指BoundImport的值所对应的位置
我在回帖中的前半部分刚好回答了你的这两个问题。
如果我理解正确,我又改了改上面的帖子。你再看看。
如果我还是没理解对,那请问您要问的是什么?恕我愚笨没能理解。能详细描述下嘛?
|
能力值:
( LV6,RANK:80 )
|
-
-
7 楼
LZ,楼上已经回答你的问题了,通过data directory就能确定Bound Import
的RVA ,然后通过RVA确定Bound Import到底是在PE头,还是在某个区段里。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
其实我只是想知道BoundImport数据的位置,我自己实现了PE增加节的功能,所以对于你所提及的PE基本结构我都是知道的。我唯一的疑问是BoundImport数据的位置是如何确定的。因为在IMAGE_DATA_DIRECTORY中,只是指定了它的RVA,而没有指定它在文件中的物理位置。现在我想我已经理解了,7楼说的对,根据RVA的大小可以判断它是在PE头里还是在区段中,如果是在区段中就很好确定它最终的物理位置,如果是在PE头里,就肯定是接在节表的后面。
之所以有这样一个疑问是因为看到网上别人写的增加节程序,如果PE文件中有BoundImport的话,就认定了它一定是接在PE头的后面。其实这只是编译器的行为,如果开发时故意将BoundImport放到区段中的话,直接这样修改就会导致软件无法运行。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
感谢回复,现在我已经知道了
|
|
|