最近我们的系统拦截到操作系统刚启动services.exe的时候,检测到该系统进程中执行未知shellcode加载dll的事件,对shellcode进行简单分析后,发现通过LdrLoadDll函数加载了一个迅雷的dll文件
由于被加载DLL是迅雷的,所以这事和迅雷有莫大的关系! 可是网上缺搜不到和xlsvc001.dll这个文件相关的任何资料,关注点转移到存放这个dll的目录名称xlguard
原来早在两年前迅雷就已经被人关注到xlguard这关键词了,简单看了一下该文只是说逆向该驱动发现会在卸载驱动和关机时,再把迅雷的XLServicePlatform服务通过注册表,设置为开机自动启动
具体细节,参考卡饭链接:ecdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1j5Y4y4Q4x3X3g2C8j5h3k6S2L8W2)9J5k6h3y4F1i4K6u0r3N6r3S2J5k6h3q4V1i4K6u0V1x3U0l9%4x3U0R3%4x3g2)9J5k6o6q4Q4x3X3b7I4i4K6u0W2K9s2c8E0L8l9`.`.
并在事件回调函数中且判断如果是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

相关地址: c7dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0j5i4g2J5L8%4m8S2L8s2g2E0j5X3)9%4y4g2)9J5c8X3u0J5L8#2)9J5k6o6u0Q4x3X3f1$3i4K6u0W2x3g2)9J5c8X3u0D9L8$3u0Q4x3V1j5J5z5h3k6W2y4e0b7&6k6U0f1I4x3X3x3H3x3K6u0U0x3e0b7I4x3U0c8V1z5e0j5J5j5K6c8W2z5o6l9H3x3e0R3H3y4e0W2S2y4$3g2S2i4K6u0r3M7$3y4J5K9i4m8@1M7#2)9J5c8X3u0S2M7$3g2Q4x3V1k6H3M7X3!0@1L8$3y4G2L8s2y4Q4x3V1k6V1j5$3g2Q4x3X3c8J5M7r3y4Q4x3V1k6U0L8$3&6K6N6s2y4Q4x3X3g2T1M7X3!0Q4x3U0y4x3y4U0b7&6
看雪上已经有相关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 拒绝访问

[培训]科锐逆向工程师培训第53期2025年7月8日开班!