首页
社区
课程
招聘
[求助]最近看Hook KiFastCallEntry碰到一个保存寄存器的问题
发表于: 2013-4-24 19:44 5647

[求助]最近看Hook KiFastCallEntry碰到一个保存寄存器的问题

2013-4-24 19:44
5647
pushfd
pushad

mov		[ReturnHookKiFastCallEntry_ebx], ebx		
push		eax
push		edi
push		ebx
call		CheckKiFastCallEntry	;处理函数							
popad
popfd

mov		ebx, [ReturnHookKiFastCallEntry_ebx]		
sub		esp,ecx	;恢复Hook代码
shr		ecx,2

最近看Hook KiFastCallEntry,原代码中是采用mov        [esp+0x10], eax的方式保存ebx的值,防止出栈后ebx被还原,我想改用内存保存,就定义了一个保存变量ReturnHookKiFastCallEntry_ebx, 代码如上所示,但总是蓝屏,原因不明,改回mov        [esp+0x10], eax方式就好了,求高手指点

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
菜鸟撸过,

弱弱的问一下,  不可以写成 mov    ReturnHookKiFastCallEntry_ebx, ebx   吗?
c++写__asm汇编的时候,这样就把值保存到变量中去了啊,  
你的 [ReturnHookKiFastCallEntry_ebx]   ,加了括号,你确定这个地址的内存能写么?

-------------------------------
貌似我自己搞错语法了,忽视我这一楼吧
2013-4-24 20:12
0
雪    币: 3116
活跃值: (1269)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
好久没搞,都不记得EBX是什么的。但大体上看,如果EBX每次都不同,那就有问题了,
ReturnHookKiFastCallEntry_ebx是全局变量,多线程的时候,线程2的ebx存放到线程1的ebx里面去了
2013-4-24 20:20
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
多谢指点,我开始以为是多线程内存访问问题,还试过锁定内存
2013-4-24 21:00
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
你这样写不止有锁定内存的问题,还有线程的问题.比如多线程并发的时候会造成异常.最好的办法是建立一张HOOK数组,跟系统内核的SSDT表一样,这样只需要访问对应的ID就可以判断是不是需要HOOK  的函数
2013-4-24 22:59
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
6
代码中有建立,这里没贴出来,谢谢提醒
2013-4-25 13:41
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
__declspec(naked) void KiFastSystemCallEx()
{
	__asm  {
		mov edx,esp
		__emit 0x0F
		__emit 0x34
		retn
	}
}
__declspec(naked) void KiFastSystemCall()
{
	
	__asm{
		pushad
			pushfd

			cmp         dword ptr [eax*4+dwHookSystemCall],0

			jz          Label
			popfd
			popad
			add         esp,4
			jmp         dword ptr [dwHookSystemCall+eax*4]

Label:
			popfd
			popad
			jmp         KiFastSystemCallEx

	}
}
2013-4-26 18:34
0
游客
登录 | 注册 方可回帖
返回
//