放置 IAT 钩子¶
从这里开始,放置钩子只是找到正确函数名并替换函数地址的问题。你可以在嵌套的 while 循环内找到名称,如清单 8-8 所示。
清单 8-8:找到函数名
每个 thunk 的函数名存储在模块内 thunkData->u1.Address OfData + 2 字节处,所以你可以把该值加到模块基址上,在内存中定位函数名。
获得函数名指针后,用 strcmp() 检查它是否是目标函数,像这样:
一旦你用名称定位目标函数,只需用你自己的函数地址覆盖函数地址。与函数名不同,函数地址存储在每个导入描述符开头的数组中。使用 thunk 循环中的 n,你终于能设置钩子,如清单 8-9 所示。