首页
社区
课程
招聘
关于64位下的inlin hook
发表于: 2014-8-6 16:40 8128

关于64位下的inlin hook

2014-8-6 16:40
8128
最近因为项目的需要,修改代码向64位支持,涉及到在64位下的inline hook,捣鼓过程中,
实在蛋痛的不得了...问题的原因是挂钩调用完我的代理函数后,如何在不修改寄存器的情况
下返回原始挂钩后的代码...像push xxxx retn 已经不好使了...现把我的hook 代码贴一下,求
解决方法

sub rsp,0x400
push rsi
push rdi
push rdx
push rax
push rbx
push rcx
push rbp
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
lea rax,[rsp+0x478]
push rax
mov rax,rsp
push rax // 保存寄存器表
mov rax,0x12345678 // 代理函数
call rax 
add esp,0x08 // 64 不支持stdcall了,必须自己平衡下堆栈
pop rax // 以下还原挂钩前各个寄存器原始的数据
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
pop rbp
pop rcx
pop rbx
pop rax
pop rdx
pop rdi
pop rsi
add esp,0x400   
//
// 执行挂钩后的原始代码,这里省略
// 。。。。

////////////////////// 这里要返回原来的程序代码 ////////////////////////
// 在 32 位下 :
push xxxx 
retn
 
// 就可以了,现在蛋疼的问题就在这里了,如果用 
mov rax,xxxx
jmp rax
// 这样的就破坏了原始的数据..这样有违我的初衷
// 求解决


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 1392
活跃值: (5177)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
参见 卡死鸡巴的 inline HOOK 用到了RIP
2014-8-6 16:57
0
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能详细说说吗?求教
2014-8-6 17:29
0
雪    币: 1392
活跃值: (5177)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
4
我之前是shadow ssdt的HOOK 采用的 mov eax jmp eax 没问题。

不能改eax的话,可以采用  jmp [aaaaa]   aaaaa里面填绝对地址。这个方法也行

要么采用 jmp rip之类的方法
2014-8-6 17:43
0
雪    币: 1392
活跃值: (5177)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
5
话说难道x64上没有 pushfd  pushad?干嘛要自己寄存器一个个保存啊
2014-8-6 17:46
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这类指令在x64下已经去掉了
2014-8-6 18:24
0
雪    币: 1
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
http://bbs.pediy.com/showthread.php?t=187348这里有你需要的
2014-8-6 21:05
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
你需要一个lib,联系我,我自己写了一个支持32,64的hook库
2014-8-6 21:17
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
你搞得太复杂了,
2014-8-6 21:18
0
雪    币: 7
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
先保存了rax
然后mov rax,返回地址 push rax ,mov rax,xxxx, ret 这个怎么样。。

用fasm试了一下。。这个就行。。
format binary
use64

push rax
push rax
mov rax,0x111111111111
mov [rsp+4], rax
pop rax
ret
2014-8-6 23:25
0
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不好意思,回晚了,谢谢大家的热心帮忙.
昨天自己捣鼓好了,就没来看....

我的解决方法跟10楼的哥们差不多...
再次感谢大家
2014-8-7 10:19
0
游客
登录 | 注册 方可回帖
返回
//