-
-
[讨论][原创]迅雷有必要搞这样的流氓行为吗?
-
发表于:
2020-1-8 14:58
12863
-
最近我们的系统拦截到操作系统刚启动services.exe的时候,检测到该系统进程中执行未知shellcode加载dll的事件,对shellcode进行简单分析后,发现通过LdrLoadDll函数加载了一个迅雷的dll文件
由于被加载DLL是迅雷的,所以这事和迅雷有莫大的关系! 可是网上缺搜不到和xlsvc001.dll这个文件相关的任何资料,关注点转移到存放这个dll的目录名称xlguard
原来早在两年前迅雷就已经被人关注到xlguard这关键词了,简单看了一下该文只是说逆向该驱动发现会在卸载驱动和关机时,再把迅雷的XLServicePlatform服务通过注册表,设置为开机自动启动
具体细节,参考卡饭链接:https://bbs.kafan.cn/thread-2072871-1-1.html
并在事件回调函数中且判断如果是services.exe进程加载dll事件
然后在services进程中申请可执行内存,拷贝驱动中硬编码的shellcode模板,并替换掉模板中共4处需要动态替换的地址:
0x11111111、0x22222222、0x33333333、0x44444444
随后查看被注入的xlsvc001.dll到底想搞什么事情! 首先第一个函数初始化一些需要用到的函数到全局变量
然后通过读取services.exe自身特征,找到guid为{367abb81-9844-35f1-ad32-98f038001003}的字符,搜索时注意大小端排序,使用16进制编辑器可对services.exe二进制文件搜索 81bb7a36
定位到guid以后,加固定偏移,可以得到这个com对象的接口虚表,最终这个函数返回虚表地址。拿到虚表地址以后,对虚表中的0x10和0x1C偏移位置的接口函数地址进行替换
那么问题来了,这个guid代表哪个com对象? 被替换的接口是什么? 替换的目的是什么?
通过github搜索相关guid找到了这个guid是关于svcctl对象的,这个对象中的0x10和0x1C号函数正是OpenServiceA和OpenServiceW
相关地址: https://github.com/mauropalumbo75/bro-2.6.1/blob/29fe549f512c032c14124d962c4e80018059a7ea/scripts/base/protocols/dce-rpc/consts.bro#L649
看雪上已经有相关Hook劫持RPC函数的文章: https://bbs.pediy.com/thread-251158-1.htm
那么迅雷为什么要劫持这两个函数呢?
通过劫持这两个函数,发现如果是打开XLServicePlatform服务,再通过I_RpcBindingInqLocalClientPID获取请求的客户端进程ID-》再获取进程名称
如果是thunder.exe、lserviceplatform.exe就可以打开该服务
如果是mmc.exe、msconfig.exe、svchost.exe、taskhost.exe、taskmgr.exe,则返回5 拒绝访问
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课