-
-
[原创]海风月影前辈的HOOKlib疑问
-
发表于:
2015-4-4 13:08
5455
-
测试的时候是没有成功的,打开源码寻找问题,发现一些弄不明白的问题
第一,这个既然是API HOOK,不继续执行原来的流程直接返回他是怎么平衡的栈?????
Code_Begin:
call next1
next1:
pop ecx
sub ecx, offset next1
lea edx, [ecx + HookProc] //取hookProc
mov eax, [ecx + pEsp] //+4是pEsp
mov [ecx + eax * 8 + SaveEsp],esp //Esp保存到相应的位置
push [esp]
pop DWORD PTR [ecx + eax * 8 + SaveRet] //保存真实返回地址到相应位置
inc DWORD PTR [ecx + pEsp] //pEsp ++;
lea eax, [ecx + IsCallApi] //压栈,是否调用真实API的地址
push eax
call [edx]
sub esp,0x100
call next2
next2:
pop ecx
sub ecx, offset next2
add esp,0x100
dec BYTE PTR [ecx + IsCallApi] //看看是不是1
je NormalCall //是1,就表示需要继续执行
dec DWORD PTR [ecx + pEsp]
mov edx, [ecx + pEsp]
push [ecx + edx * 8 + SaveRet] //返回到相应的地址
[B][COLOR="Red"]//PS:这里栈平衡了吗????怎么平衡的????[/COLOR][/B]
ret //默认是不执行真实API
NormalCall:
dec DWORD PTR [ecx + pEsp] //pEsp --;
mov eax, [ecx + pEsp] //取出Esp
mov esp, [ecx + eax * 8 + SaveEsp]
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)