首页
社区
课程
招聘
[求助]能说下PE加载的时候IAT是怎么初始化的吗?
发表于: 2008-11-18 13:11 6736

[求助]能说下PE加载的时候IAT是怎么初始化的吗?

2008-11-18 13:11
6736

IAT表里面的地址是不是就是用getProAddress()获取的函数的地址

那他是怎么初始化的呢?是在我们双击打开文件后加载器初始化的吧

希望知道的朋友能具体答下,谢谢

============================论坛说法

  PE文件运行时,Windows系统加载器首先搜索OriginalFirstThunk,如果存在,装载程序迭代搜索数组中的每个指针,找到每个 IMAGE_IMPORT_BY_NAME结构所指向的输入函数的地址,然后用函数入口地址来替代由FirstThunk指向的 IMAGE_THUNK_DATA 数组里的元素值(即用真实的函数地址填充到IAT里)。

=============================

可是IMAGE_IMPORT_BY_NAME结构里面的内容就是这样,当定位到其中之一项时,找到hint的值和函数名字

哪里来的函数地址?


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
又沉了。。。。。。。。。。是不是根据original那个的hint和dll的导出表序号相等,然后就把这函数在dll的RVA+上他的基础写进IAT??
2008-11-18 21:56
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
晕,算找到了吧,就是用函数名字来对比(不敢相信,那岂不是相当慢?我还以为用2个表的函数序号来对比呢)

不过自己写的dll就会函数名会改变了下,

VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。

这好像是_stdcall规则
2008-11-19 01:46
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
无聊,自己说话,

不知道修正之后,是不是导入表的几个数组里面的firstThunk都一样了。

因为之前有人提过修正后,这个字段就是指向IAT,IAT就是根据所有dll引用函数改写成的一个地址表
2008-11-19 01:59
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
5
输入表里函数名前面的序号,会先用来尝试在对应的位置比较函数名,如果比较失败,才一个一个历遍输出表里面的函数名

PECOFF很重要~~

给个优秀贴标记,支持楼主继续自己探索
2008-11-19 10:43
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哈哈顶下顺便问个问题 Windows系统加载器  指的是什么 是widows自代的编译器吗! 如果是怎么找到他它啊
2008-11-19 22:54
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哈,我也不懂,双击之后,就有相应的东西加载那样吧,就好像我们解压缩软件WINRAR一样

俺猜-_-
2008-11-19 23:22
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
晕,买了加密3没看,原来里面好具体的说,现在我也会遍历IAT的函数地址了,还有函数名
2008-11-21 21:53
0
雪    币: 290
活跃值: (41)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
IMAGE_IMPORT_DESCRIPTOR                        IMAGE_IMPORT_BY_NAME
          |                                             |
  OriginalFirstThunk -->  IMAGE_THUNK_DATA  --> 02F6  ExitProcess
    TimeDateStamp         IMAGE_THUNK_DATA  --> 0111  ReadFile
   ForwarderChain         IMAGE_THUNK_DATA  --> 002B  WriteFile
      Name1     ------+       80000010h         0010  lstrcmp
    FirstThunk----+   |       0(結束符)                             指令
                  |   |                                      call ExitProcess ---+
                  |   +---> Kernel32.dll                     call ReadFile ----+ |
                  |                                          call WriteFile -+ | |
                  |                                          call lstrcmp -+ | | |
                  |                                                        | | | |
                  +------>ExitProcess函數的入口位址 <-- jmp dword ptr [a]<-+-+-+-+
                          ReadFile   函數的入口位址 <-- jmp dword ptr <-+-+-|
                          WriteFile  函數的入口位址 <-- jmp dword ptr [c]<-+-|
                          lstrcmp    函數的入口位址 <-- jmp dword ptr [d]<-+
                                  0(結束符)
2009-8-5 12:30
0
雪    币: 290
活跃值: (41)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
不太會使用
發個txt檔
上传的附件:
2009-8-5 12:37
0
游客
登录 | 注册 方可回帖
返回
//