-
-
[原创]海风月影前辈的HOOKlib疑问
-
发表于:
2015-4-4 13:08
5327
-
测试的时候是没有成功的,打开源码寻找问题,发现一些弄不明白的问题
第一,这个既然是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]
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法