计算公式:FOA = 导入RVA表地址 - 虚拟偏移 + 实际偏移 = > 0001A1E0 - 11000 + 400 = 95E0
1.首先需要编写一个DLL文件,在DLL文件中找出MessageBox的原函数地址。知道了流程,编写并理解代码就变得非常简单了,代码如下,你可以自行注入到进程中测试效果。
2.接着通过代码的方式找到DOS/NT/FILE-Optional头偏移地址。
3.通过DataDirectory[1]数组得到导入表的起始RVA并与ImageBase基址相加得到VA。
4.循环遍历导入表中的IAT表,找到与MessageBox地址相同的4字节位置。
5.找到后通过VirtualProtect设置内存属性可读写,并将自己的函数地址写入到目标IAT表中。
6.没有找到的话直接pFirstThunk++循环遍历后面的4字节位置,直到找到为止。
1.首先获取到DOS头,并加上偏移得到NT头,再通过Nt头得到数据目录表基地址。代码如下所示:
2.数据目录表中的第0个成员指向导出表的首地址,直接拿到导出表的虚拟地址。
3.循环查找导出表的导出函数是否与我们的函数名称一致,一致则取出导出函数地址。
4.设置导出函数位置读写属性,将新的导出函数地址写入到该位置
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |