【PC/脱壳】04.IAT的填充过程和执行流程与作用

共计2808字,阅读大约10分钟。

图片[1]-【PC/脱壳】04.IAT的填充过程和执行流程与作用-galgame

第一阶段总结

我们先来总结一下以上信息。

程序没运行前

FAC = 60 33 00 00 = MessageBoxA (函数名称字符串)

图片[2]-【PC/脱壳】04.IAT的填充过程和执行流程与作用-galgame
图片[3]-【PC/脱壳】04.IAT的填充过程和执行流程与作用-galgame

程序没运行后

FAC = 50 1A DC 76 = MessageBoxA (函数入口点位置)(注意,每次开机关机都会导致这个地址改变)

图片[4]-【PC/脱壳】04.IAT的填充过程和执行流程与作用-galgame
  1. 模块名:指向被导入的DLL的名称。
  2. 函数名或序号:指向被导入的函数,可能以名称的形式存在,也可能是函数在DLL中的序号。
  3. 其他信息:可能包括一些额外的标志位或指针,用于处理导入过程中的其他需求。

因此,导入表中的每个条目通过固定的20字节结构来存储有关每个外部依赖项的必要信息,以便操作系统或加载器在程序执行时能够正确地链接这些外部函数。

认识IID

这里再继续。每个IID有五个字段,其中每4个字节为一个字段。

1. Characteristics (通常是 4 字节)

  • 描述:此字段通常用于标识模块的特性,也可能是保留字段,在某些情况下,它可以用于标识模组的序号。
  • 作用:有时可能包含DLL的特定信息。

2. TimeDateStamp (时间戳,通常是 4 字节)

  • 描述:表示该模块的时间戳,通常是指DLL文件的最后修改时间。
  • 作用:用于版本控制和验证,以确保加载的DLL是最新的。

3. ForwarderChain (转发链,通常是 4 字节)

  • 描述:指向转发函数的链表。如果该DLL需要从另一个DLL转发函数,这里会指向相应的DLL的导入描述符。
  • 作用:处理函数转发,确保函数调用能正确解析。

4. Name (名称,通常是 4 字节)

  • 描述:指向一个字符串的指针,该字符串是DLL的名称(例如 “kernel32.dll”)。
  • 作用:告诉加载器要导入哪个DLL。

5. ImportAddressTable (导入地址表,通常是 4 字节)

  • 描述:指向导入地址表的指针,包含了需要导入的函数的地址或者名称。
  • 作用:在程序运行时,加载器会使用这个表来解析和填充实际的函数地址。

总结

IID总结

导入表包含了IID(也就是说一个IID就是导入表的一部分),简单的话你也可以理解为,所有的IID加起来就是一个导入表

1 2 3

温馨提示:
本文最后更新于2024-08-16 01:08:31,本文具有时效性,若有错误或已失效,请在下方留言或联系站长
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容