请教关于API HOOK的一个问题

htron 2005-02-22 10:23:42
先说明一下,我是想通过修改IAT的方式进行API HOOK,全在用户模式进行,不使用KMD。以下是简单的流程:
1、采用CreateRemoteThread方式向目标进程注入了一个DLL,成功;
2、在DLL入口函数中,找到当前进程的PE header及IAT,成功;
3、找到相应的API地址替换成自己的函数,就在这里出了问题,IAT所在的那个SECTION是只读的,不允许写入。

据我了解,通常IAT是存在于.idata段,这个段是可以写入的。但仔细看了目标程序后发现,它没有.idata段,而是有一个只读的.rdata段,IAT就放在这个段里。

想问的是:
1、在遇到这种情况的时候,用户模式下通过修改IAT进行API HOOK的方法是不是就行不通了?如果能行的话,应该怎么办呢?(不能在目标进程启动前修改SECTION属性)

2、这种没有.idata段的程序是不是很常见,它的产生是否跟链接选项有关?(测试用的目标程序是在RadAsm下,使用MASM32编译的,为默认链接选项)

谢谢!
...全文
76 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdsjkk 2005-02-22
  • 打赏
  • 举报
回复
块名只是给人看的,叫什么都无所谓,
虽然pe文件有规范格式,但实际上iat放在哪个块都可以
htron 2005-02-22
  • 打赏
  • 举报
回复
谢谢!
关于第一个问题,已经有了办法:VirtualProtect函数可以修改内存页的属性;
第二个问题中,块名是无所谓的,关键是这种类型的块是在什么情况下产生出来的,为什么有的程序有,有的却没有,始终没搞明白。根据一些介绍PE格式的文章来看,一般的IAT都应该是位于这种块里的。
VxD1 2005-02-22
  • 打赏
  • 举报
回复
你的第一个问题我只会在目标进程启动前修改块的属性
第二个问题通常是与编译器和连接器有关,不同的编译器和连接器编译连接出来的程序的块名都各不相同,并且更改块名并不影响程序的执行。还有就是一般加壳压缩的软件都会对程序的块进行更改,包括块名

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧