首页
社区
课程
招聘
[求助]关于inline hook
发表于: 2011-6-2 11:15 5533

[求助]关于inline hook

2011-6-2 11:15
5533
大家好.新手第一次发贴..正文开始..

inline hook 可以hook函数流程的任意一条指令,当然如果中间有call jmp等指令,那么可以重定位解决.
但是如果hook第三条指令,到我们的hook函数了之后,前面两条指令已经运行.所以堆栈就已经改变,那么就只能用汇编写了对吗?不能用自己声明好的函数来写了吧?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
具体情况具体作,只要堆栈平衡没有问题。
2011-6-2 16:08
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
这种“精细”操作,肯定要用到汇编了~
2011-6-2 18:28
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
4
使用 naked 函数,内联汇编。
2011-6-2 18:37
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
对于2楼.我明白你的意思...我现在的问题是能不能像ssdt hook那样子直接使用C++的函数来写..而不是用naked 汇编...不知道我表达清楚了没有...
2011-6-2 20:46
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
                  
2011-6-2 20:56
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不能这么说...只能说是有没有更方便的方法..如果只是用汇编写,,那真的挺麻烦的..必须在C++中用内联汇编.我还不是很牛
2011-6-2 20:58
0
雪    币: 3116
活跃值: (1269)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
也不是全部要汇编
你可以先写好一个stub,再跳到你的真正处理代码中去
_asm
xx1
xx2
call filter
yy1
yy2
...
2011-6-2 21:01
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
可能是我说的不清楚吧..
例.  CreateFile:
                         mov edi,edi
                         push   ebp
                         mov ebp,esp
                         sub   esp, XX   ;开辟栈帧空间

                        
hook CreateFile:
                         mov edi,edi
                         push   ebp
                         mov ebp,esp  
                         jmp MyFunction;   //这里替换成我的hook函数

问题出来了..到了我的hook函数后,前面的几条指令已经执行.堆栈已经变化,
这里MyFunction声明成 HANDLE New_CreateFile(
     LPCTSTR lpFileName,
     DWORD dwDesiredAccess,
     DWORD dwShareMode,
     LPSECURITY_ATTRIBUTES lpSecurityAttributes,
     DWORD dwCreationDisposition,
     DWORD dwFlagsAndAttributes,
     HANDLE hTemplateFile
  );

这里就不能直接跳到New_CreateFile里面,参数地址变化了..所以跳到这里会直接崩溃
问题就在这..我想有没有方法直接跳到New_CreateFile,而不用naked内联汇编慢慢来写
2011-6-2 21:29
0
雪    币: 33
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
_asm
寄存器保存
mov eax, dword ptr[esp + XXX]   //找回参数
push eax
mov eax, dword ptr[esp + XXX]
push eax
...
...
call New_CreateFile
....
寄存器恢复

...

  不就行啦
2011-6-3 12:59
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢~~这个问题解决了...还是用汇编吧..修改相关数据好些..HitIt谢谢你了..
2011-6-4 10:07
0
游客
登录 | 注册 方可回帖
返回
//