公司说是为了内网安全怕不懂电脑的人运行了钓鱼软件啥的为了数据安全要求电脑必须安装了某监控软件才能联网,这个软件在网上简直是臭名昭著,内核方面下了进程和线程还有映像回调和OB回调,运行什么程序后台知道的一清二楚,R3方面全局注入了DLL把SOCKET相关的函数都HOOK了,浏览什么网站分析分析数据后台也能知道的一清二楚,还有监控屏幕啥的肯定也不能少,这怎么能忍,分驱动和应用层来处理,驱动方面本来是想枚举进程/线程钩子回调还有OB回调然后摘除,代码都从网上CTRL+C+V好了,后来想想似乎不用那么麻烦,直接把所有回调函数废除不就行了,x64里因为函数调用约定的原因直接函数头一个ret就行了,不用考虑那么多乱七八糟的平多少栈啥的,R3应用层方面主要是两个方面,第一是写了一个检测进程HOOK和恢复HOOK的程序,当然我只写了对下面几个DLL里的HOOK进行检测与恢复的功能
moduleNameArray.push_back(_T("wsock32.dll"));
moduleNameArray.push_back(_T("iphlpapi.dll"));
moduleNameArray.push_back(_T("kernel32.dll"));
moduleNameArray.push_back(_T("kernelbase.dll"));
moduleNameArray.push_back(_T("ws2_32.dll"));
moduleNameArray.push_back(_T("ntdll.dll"));
要增加检测其他DLL里的HOOK和修复就在数组里添加就行了,不过只检测了inlinehook,至于iat eat啥的没有检测和恢复,我用不到。
R3方面第二个措施是写了一个LSP程序注入到程序里拦截更上层的SOCKET相关函数,把连接指定IP的请求全部咔嚓,想监视屏幕没门。
这里把驱动和监测与恢复HOOK的源码发出来,如果大家有公司也装了这个软件,只要把驱动里的几个回调函数偏移改一下再编译和签名就行了,监测和恢复HOOK直接编译就行,这两个都是x64的程序。至于LSP的源码因为之前卖了一份给某个人就不好开源了。