国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > [置顶] EasyHook库系列使用教程之五全局ACL和本地ACL

[置顶] EasyHook库系列使用教程之五全局ACL和本地ACL

来源:程序员人生   发布时间:2014-11-21 08:53:28 阅读次数:3546次
EasyHook控制钩子函数通过两个ACL表控制

全局ACL:针所有钩取的函数
本地ACL:针对指定的钩取函数

判断ACL是不是能够访问的C++代码以下:
if(ACLContains(&Unit.GlobalACL, CheckID)) { if(ACLContains(LocalACL, CheckID)) { if(LocalACL->IsExclusive) return FALSE; } else { if(!LocalACL->IsExclusive) return FALSE; } return !Unit.GlobalACL.IsExclusive; } else { if(ACLContains(LocalACL, CheckID)) { if(LocalACL->IsExclusive) return FALSE; } else { if(!LocalACL->IsExclusive) return FALSE; } return Unit.GlobalACL.IsExclusive; }


例如:现在以排除方式为例说明期流程


假定,以排除方式设置了全局ACL和本地ACL,即GlobalACL中的线程列表为空,LocalACL中的线程列表为空。此时对的Hook函数均生效。
现在需要暂停所有的Hook函数。设置PID(1234)到GlobalACL中。
以上函数流程将以下

if(ACLContains(&Unit.GlobalACL, CheckID)) 全局ACL中存在PID(1234) { if(ACLContains(LocalACL, CheckID)) 本地不存在 { if(LocalACL->IsExclusive) return FALSE; } else { if(!LocalACL->IsExclusive) 本地的为排除,因此LocalACL->IsExclusive=true return FALSE; } return !Unit.GlobalACL.IsExclusive; 全局为排余,因此Unit.GlobalACL.IsExclusive=true } else { if(ACLContains(LocalACL, CheckID)) { if(LocalACL->IsExclusive) return FALSE; } else { if(!LocalACL->IsExclusive) return FALSE; } return Unit.GlobalACL.IsExclusive; }
根据以上逻辑,返回的结果为False,即对应的线程不生效,即实现了暂停所有的Hook函数 。
建议,使用ACL时,最好同时使用包容或排除方式,以避免混淆。
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生