近期在解决一个问题,在我们的沙箱中IE不能上网
现象:
    IE不能上网。输入www.baidu.com 提示:不能查找到DNS。也不能ping 通
    其它浏览器上网没有问题(SG浏览器,Chrome ,firefox,猎豹,360)
    为什么IE不能上网呢?

解决:
在应用层挂调试IE,在ws2_32!socket 下断点。发现 socket 不能创建成功。然后发现首先须要訪问 qurl.f.360.cn ,然后再訪问www.baidu.com
那么难道我訪问网址须要经过qurl.f.360.cn过滤么?而qurl.f.360.cn 域名解析不成功然后就不能上网么?在ws2_32!socket 上继续追踪
在内核模式调试。最后定位的栈
kd> kbn
 # RetAddr : Args to Child : Call Site
00 fffff880`0505f14c : 00000000`00000000 00000000`000007a0 fffffa80`02894010 00000000`00000018 : afd! ?

? ::NNGAKEGL::`string'+0x1b1a

01 fffff880`04c20ed7 : 00000000`000007a0 00000000`000007a0 00000000`00000000 00000000`00000000 : afd!AfdDispatch+0x6c
02 fffff880`04c20095 : 00000000`00000010 00000000`00000000 fffff880`021776d8 fffffa80`02c49710 : 360AntiHacker64+0x2ed7
03 fffff800`041d9477 : 00000000`00000005 fffff800`041d8ed0 fffffa80`05600870 fffffa80`02c497a8 : 360AntiHacker64+0x2095
04 fffff800`041cf764 : fffffa80`035d23b0 00000000`00000000 fffffa80`035f1360 00000000`00000001 : nt!IopParseDevice+0x5a7
05 fffff800`041d4876 : fffffa80`035f1360 fffff880`021779f0 fffffa80`00000042 fffffa80`02548820 : nt!ObpLookupObjectName+0x585
06 fffff800`041db587 : 00000000`00000000 00000000`00000003 00000000`00000001 00000000`00000000 : nt!ObOpenObjectByName+0x306
07 fffff800`041e5198 : 00000000`067ee158 00000000`c0140000 00000000`00000000 00000000`067ee180 : nt!IopCreateFile+0x2b7
08 fffff800`03ed8153 : fffff880`02177c60 fffffa80`03867500 fffff880`02177bb8 00000000`00000000 : nt!NtCreateFile+0x78
09 00000000`76ff040a : 000007fe`fc502747 00000000`0532e1f0 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13
0a 000007fe`fc502747 : 00000000`0532e1f0 00000000`00000000 00000000`00000000 00000000`0052ba80 : ntdll!ZwCreateFile+0xa
0b 000007fe`fc503874 : 00630069`004d005c 006f0073`006f0072 0057005c`00740066 00000000`067ee320 : mswsock!SockSocket+0x502
0c 000007fe`fdb81fe2 : 00000000`00000000 00000000`004c3f90 00000000`00000002 00000000`00000000 : mswsock!WSPSocket+0x23a
0d 000007fe`fdb83600 : 00000004`00000017 000007fe`00000002 00000000`00000000 00000000`00000000 : ws2_32!WSASocketW+0x112
0e 000007fe`fdb84b60 : 000007fe`00000002 00000000`05309f70 00000000`00000000 00000000`004a6ea0 : ws2_32!GetProtocolStateForFamily+0x7c
0f 000007fe`fdb83332 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`067ee5f4 : ws2_32!LookupAddressForName+0x100
10 000007fe`fdb82d28 : 00000000`00000000 00000000`00000000 00000000`0050b620 000007fe`fd7a3b2c : ws2_32!GetAddrInfoW+0x232
11 000007fe`fd1b1845 : 00000000`00000000 00000000`067ee818 00000000`067ee838 00000000`00000000 : ws2_32!getaddrinfo+0x98
12 000007fe`fd1cfabb : 00000000`00000000 00000000`0050bec0 00000000`03d496c0 00000000`0050b620 : WININET!MyGetAddrWithTracing+0xca
13 000007fe`fd1b249b : 00000000`00549a50 00000000`00000000 00000000`00549a50 00000000`00000000 : WININET!CAddressList::ResolveHost_Fsm+0x3a6
从ws2_32 调用 getaddrinfo 后经过 360AntiHacker64 然后再到tcpip
最后出错的栈
kd> kbn
 # RetAddr : Args to Child : Call Site
00 fffff880`0184e33d : fffffa80`03940950 fffff880`01966128 00000000`00000001 fffff880`018602bf : tcpip!InetInspectCreateEndpoint+0x5e
01 fffff880`0184e24c : fffffa80`03940950 fffffa80`037f3d70 fffffa80`02d6d930 00000000`000007ff : tcpip!UdpCreateEndpointWorkQueueRoutine+0xad
02 fffff880`0184e3e9 : 00000000`00000011 fffffa80`025e78c0 fffffa80`03612c60 fffff880`0184e3b0 : tcpip!UdpCreateEndpoint+0x1ac
03 fffff880`0504ee17 : fffff8a0`098abde0 fffffa80`025e78c0 fffffa80`03612c60 fffffa80`026e1530 : tcpip!UdpTlProviderEndpoint+0x39
04 fffff880`0505f14c : 00000000`00000000 00000000`000007a0 fffffa80`026e1530 00000000`00000018 : afd! ?? ::NNGAKEGL::`string'+0x1b1a
05 fffff880`04c20ed7 : 00000000`000007a0 00000000`000007a0 00000000`00000000 00000000`00000000 : afd!AfdDispatch+0x6c
06 fffff880`04c20095 : 00000000`00000010 00000000`00000000 fffff880`040806d8 fffffa80`04f25d00 : 360AntiHacker64+0x2ed7
07 fffff800`041d9477 : 00000000`00000005 fffff800`041d8ed0 fffffa80`027ec9c0 fffffa80`04f25d98 : 360AntiHacker64+0x2095
08 fffff800`041cf764 : fffffa80`035d23b0 00000000`00000000 fffffa80`042c8760 00000000`00000001 : nt!IopParseDevice+0x5a7
09 fffff800`041d4876 : fffffa80`042c8760 fffff880`040809f0 00000000`00000042 fffffa80`02548820 : nt!ObpLookupObjectName+0x585
0a fffff800`041db587 : 00000000`00000000 00000000`00000003 00000000`00000001 00000000`00000000 : nt!ObOpenObjectByName+0x306
0b fffff800`041e5198 : 00000000`0647da68 00000000`c0140000 00000000`00000000 00000000`0647da90 : nt!IopCreateFile+0x2b7
0c fffff800`03ed8153 : fffff880`04080c60 fffffa80`03867500 fffff880`04080bb8 00000000`00000000 : nt!NtCreateFile+0x78
0d 00000000`76ff040a : 000007fe`fc502747 00000000`0532efb0 00000000`00000000 00000000`00000000 : nt!KiSystemServiceCopyEnd+0x13
0e 000007fe`fc502747 : 00000000`0532efb0 00000000`00000000 00000000`00000000 00000000`0052ba80 : ntdll!ZwCreateFile+0xa
0f 000007fe`fc503874 : 00630069`004d005c 006f0073`006f0072 0057005c`00740066 00000000`0647dc30 : mswsock!SockSocket+0x502
10 000007fe`fdb81fe2 : 00000000`00000000 00000000`004c3f90 00000000`00000002 00000000`00000000 : mswsock!WSPSocket+0x23a
11 000007fe`fdb83600 : 00000004`00000017 00000000`00000002 00000000`00000000 00000000`00000000 : ws2_32!WSASocketW+0x112
12 000007fe`fdb84b60 : 000007fe`00000002 00000000`03d47f60 00000000`00000000 00000000`004a6ea0 : ws2_32!GetProtocolStateForFamily+0x7c
13 000007fe`fdb83332 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`0647df04 : ws2_32!LookupAddressForName+0x100
tcpip!WfpAleCaptureSecurityInformation
WfpAlepLookupProcessInformation 函数的代码:
.text:0000000000068EB0 mov [rsp+arg_0], rbx
.text:0000000000068EB5 push rdi
.text:0000000000068EB6 sub rsp, 40h
.text:0000000000068EBA mov rdx, [rdx]
.text:0000000000068EBD mov rbx, r8
.text:0000000000068EC0 mov rdi, rcx
.text:0000000000068EC3 test rdx, rdx
.text:0000000000068EC6 jz loc_9894A
.text:0000000000068ECC
.text:0000000000068ECC loc_68ECC: ; CODE XREF: WfpAlepLookupProcessInformation+2FA9Ej
.text:0000000000068ECC lea r8, [rsp+48h+var_28]
.text:0000000000068ED1 lea rcx, gAleMasterHashTable
.text:0000000000068ED8 call cs:__imp_RtlLookupEntryHashTable
.text:0000000000068EDE test rax, rax
.text:0000000000068EE1 jz loc_9896E
.text:0000000000068EE7
.text:0000000000068EE7 loc_68EE7: ; CODE XREF: WfpAlepLookupProcessInformation+2FAB8j
.text:0000000000068EE7 add rax, 0FFFFFFFFFFFFFFB8h
.text:0000000000068EEB cmp [rax], rdi
.text:0000000000068EEE jnz loc_98953
.text:0000000000068EF4 mov [rbx], rax
.text:0000000000068EF7 xor eax, eax
.text:0000000000068EF9
.text:0000000000068EF9 loc_68EF9: ; CODE XREF: WfpAlepLookupProcessInformation+2FAD9j
.text:0000000000068EF9 mov rbx, [rsp+48h+arg_0]
.text:0000000000068EFE add rsp, 40h
.text:0000000000068F02 pop rdi
.text:0000000000068F03 retn
最后 call cs:__imp_RtlLookupEntryHashTable 返回 0 ,出错。可是为何出错还是一头雾水
究竟是360AntiHacker64中做了什么么?逆向在360AntiHacker64 没有文件操作的痕迹。

那么究竟是否是360AntiHacker64有问题呢?

使用U盘启动。然后改动360全部的exe 的名字,全部的sys都改名。IE能上网了。
然后将360AntiHacker64.sys 保留 也能上网,再实验将360Box64.sys保留,问题出现了。而且沙箱初始化过程非常慢。
由于我们的沙箱和360沙箱用的都是minifilter 文件过滤技术。因此假设一个文件的訪问,比方
CreateFile --->我们的驱动--->360box64.sys--->ntfs驱动
或者CreateFile --->360box64.sys--->我们的驱动-->ntfs驱动
那么谁在前呢?注冊表中 Altitude 决定的 360box64为 : 382310 我们的为140000。我们的驱动在后面执行
当我把此驱动的Altitude 改动为382311 ,重新启动后。OK
由于同为文件过滤驱动,你重定向后的路径须要传递给下个驱动。而下个驱动怎么操作不知道,是否处理也不知道,是否360box64 对IE的文件操作进行了过滤也没有进行深究。

当中还发生了一些插曲:
    1 观察驱动之间的通讯。都是构造IRP然后调用IofCallDriver
    2 调用其它驱动中的函数,找到其它驱动的DeviceObject 然后获得Device扩展。然后使用当中的函数指针
    3 驱动和应用层通讯居然使用物理内存映射到虚拟内存然后和应用层共享
    4 在进程被杀掉后,进程的thread都被释放可是进程并没有消失。仅仅是在人物管理器中不见了。
    比方讲360AntiHacker64改名后,被改动了回来。所以干脆把exe和sys干脆都改名字,省着有些保护程序碍事。

找到问题定位问题是非常费事的事情。改动就简单多了。

在沙箱中IE不能上网的解决方法的更多相关文章

  1. VMware虚拟机的CentOS无法上网的解决方法

    前言:由于Linux下很多软件安装必须网络环境下进行,因此,对于如何在VMware下进行上网,我折腾了至少三天,今天上午,也即五一劳动节,终于搜到一遍技术文章,经过自己实践,VMware下Linux的 ...

  2. VS2012中丢失ArcGIS模板的解决方法

    VS2012中丢失ArcGIS模板的解决方法 由于ArcGIS10.0(for .NET)默认是用VS2010作为开发工具的,所以在先安装VS2012后装ArcGIS10.0 桌面版及ArcObjec ...

  3. Win8 传统桌面下无法上网的解决方法

    Win8 很酷,就连出现的问题也都酷得不行~ 之前遇到的一些问题与解决方法,避免重新安装 1. Word 2013下, 输入法突然秀逗, 经常按了一个键后, 死循环输入该字符直到死机 解决方法: 进入 ...

  4. js中style.display=""无效的解决方法

    本文实例讲述了js中style.display=""无效的解决方法.分享给大家供大家参考.具体解决方法如下: 一.问题描述: 在js中我们有时想动态的控制一个div显示或隐藏或更多 ...

  5. java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...

  6. win10只有edge浏览器能上网的解决方法

    问题描述:电脑就只有edge浏览器和自带的邮件可以上网,但是QQ Chrome,360浏览器都无法上网: 解决方法:打开命令提示符(管理员),执行netsh winsock reset,重启系统就好了 ...

  7. SpringBoot拦截器中无法注入bean的解决方法

    SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...

  8. asp.net url址址中中文汉字参数传递乱码解决方法

    中文乱码是网站开发中会常碰到的问题,今天我们来讲一下关于url址址中中文汉字参数传递乱码解决方法,有需要的朋友可以参考下.在cs文件里传参的时候用UrlEncode: Response.Redirec ...

  9. 用virtualbox虚拟机无法上网的解决方法

    用virtualbox虚拟机无法上网的解决方法   首先保证你的本机是可以正常上网的   启动虚拟机系统前,选择安装好的虚拟PC,点击"设置"按钮,然后切到"网络&quo ...

随机推荐

  1. Linq To SQL和Linq To Object的批量操作InsertAllOnSubmit介绍

    无论是Linq To SQL还是Linq To Object(Entity frameworks)它们都为开发人员提供了Insert操作,及Insert集合操作,即InsertOnSubmit和Ins ...

  2. ConcurrentDictionary让你的多线程代码更优美

    ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单线程版本( ...

  3. CoffeeScript 更优美的Javascript

    CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的心脏. CoffeeScript 尝试用简洁的方式展 ...

  4. 怎么比较两个list中相同的值个数!

    怎么比较两个list中相同的值个数!int count=0;for(int i=0;i<list1.size();i++){ for(int j=0;j<list2.size();j++) ...

  5. JavaScript的坑,缺陷

    JavaScript的缺陷 1.在做判断的时候用=======而不是== 2.浮点预算有精度问题 通过差值去把这个精度锁定到一个范围 Math. Abs(A-B)<0.0001** 3.null ...

  6. Python操作数据库遇到的问题

    网上教程很多,不多赘述,记录一下遇到的问题. 开始安装的是Python3.x最新版本,用的是pycharm,教程参考有 https://www.cnblogs.com/yufeihlf/p/60041 ...

  7. cmake how to create vs file filters

    用cmakelists构建出来的工程,没有文件filters,可采用如下方法解决 set(SOURCE_LIST "lotteryTicket.cpp" "stdafx. ...

  8. 【P1203】 【USACO1.1】坏掉的项链Broken Necklace

    P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 ...

  9. [Git高级教程(二)] 远程仓库版本回退方法 - 梧桐那时雨 - CSDN博客

    1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的版本到远程分支,怎么回退远程分支 ...

  10. 隐马尔可夫模型及Viterbi算法

    隐马尔可夫模型(HMM,hidden Markov model)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型.HMM模型主要用于语音识别,自然语言处理,生物 ...