本帖最后由 lvjing79 于 2012-7-12 09:19 编辑
我用au3调用deviare的组件来实现api hook功能。
调用组件和hook都正常,也能捕捉到想hook的api函数。但在获取api函数的参数时有点问题。
先来看一下在vbscript中响应事件的代码Sub spyMgr_OnFunctionCalled(ByVal hook, ByVal proc, ByVal callInfo)
Dim paramEnum, param1,param4
Set paramEnum = callInfo.Params()
Set param1 = paramEnum.GetAt(0)
Set param4 = paramEnum.GetAt(4)
If param4.LongVal = 1 Then
'函数调用前修改参数
If callInfo.IsPreCall Then
WScript.Echo param1.Value
param4.LongVal = 2
End If
End If
End Sub
再来看看au3的代码:Func spyMgr_OnFunctionCalled($hook, $proc, $callInfo)
Local $paramEnum, $param1, $param4
WriteLog("Function called: " & $hook.FunctionName & " within process " & $proc.Path & " " & $callInfo.ToString())
$paramEnum = $callInfo.Params()
$param1 = $paramEnum.GetAt(0)
$param4 = $paramEnum.GetAt(4)
If $param4.LongVal = 1 Then
;函数调用前修改参数
If $callInfo.IsPreCall Then
WriteLog($param1.Value)
$param4.LongVal = 2
EndIf
EndIf
EndFunc ;==>spyMgr_OnFunctionCalled
这一句代码:
$paramEnum = $callInfo.Params()
执行后,$paramEnum是一个空值,没有得到任何东西。
但上面一句:
WriteLog("Function called: " & $hook.FunctionName & " within process " & $proc.Path & " " & $callInfo.ToString())
从输出来看,$callInfo.ToString()是有东西的,表明$callInfo是存在的,不是空的。
一直想不明白是为何道理,请高人指点一下,谢谢! |