首页
社区
课程
招聘
[原创]LSP修复工具(山寨360的LSP修复工具)
发表于: 2011-6-27 08:49 23361

[原创]LSP修复工具(山寨360的LSP修复工具)

2011-6-27 08:49
23361

【文章标题】: LSP修复工具(山寨360的LSP修复工具)
【文章作者】: Root
【作者邮箱】: cppcoffee@gmail.com
【下载地址】: 附件
【编写语言】: VC++、WTL
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  开始先了解下概念:
  LSP即分层服务提供商,Winsock 作为应用程序的 Windows 的网络套接字工具,可以由称为“分层服务提供商”的机制进行扩展。Winsock LSP 可用于非常广泛的实用用途,包括 Internet 家长控制 (parental control) 和 Web 内容筛选。在以前版本的 Windows XP 中,删除不正确的(也称为“buggy”)LSP 可能会导致注册表中的 Winsock 目录损坏,潜在地导致所有网络连接的丢失。
  “浏览器劫持”或者“分层服务提供程序”。某些间谍软件会修改Winsock 2的设置,进行LSP“浏览器劫持”,所有与网络交换的信息都要通过这些间谍软件,从而使得它们可以监控使用者的信息。著名的如New net插件或WebHancer组件,它们是安装一些软件时带来的你不想要的东西。
  
  最近公司的Client团队在开发自己的LSP,于是开始好奇它,再者见到360有个LSP修复的功能,很想知道它的工作原理和实现,所以就有了这篇文章(纯属菜鸟作品,大牛请飘过).
  
  进入正题吧
  先了解下LSP在注册表中的位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters下的Current_NameSpace_Catalog描述了当先使用的协议目录,一般为Protocol_Catalog9。
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9下的Num_Catalog_Entries记录了该结构链的节点的总数。
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9\Catalog_Entries下面的以序号为键名的内容依次对应了一个服务程序,可以自启动,因此SPI成了流氓软件和病毒的目标。
  
  程序首先读取Current_Protocol_Catalog协议目录存放的子键名称,接着读取存放目录子键下的Num_Catalog_Entries目录总数,接着遍历Catalog_Entries下的所有存放协议目录的子键,他们的存放结构如下:
  typedef struct tagPACKED_CATALOG_ITEM
  {
          char spi_path[MAX_PATH];    // dll的路径名称
          WSAPROTOCOL_INFO protocol_info;    // 协议的结构体
  } PACKED_CATALOG_ITEM, *PPACKED_CATALOG_ITEM;
  将注册表存放目录的数据填充到这个结构体里面即可.
  
  如何判断是否有效的LSP呢。
  1、对协议结构体中的CLSID进行匹配,与以下的CLSID:
      {E70F1AA0-AB8B-11CF-8CA3-00805F48A192}
      {9D60A9E0-337A-11D0-BD88-0000C082E69A}
      {8D5F1830-C273-11CF-95C8-00805F48A192}
      {3972523D-2AF1-11D1-B655-00805F3642CC}
  2、根据DLL存放的路径进行匹配,与以下的文件名进行匹配(必须是Windows\System32目录下)
      mswsock.dll
      rsvpsp.dll
      msafd.dll
      ws2_64.dll
  
  以上操作就完成了LSP的辨别操作。
  
  接下来是修复的工作:
  1、保存原先的注册表信息,路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters 保存为WinSockLSP.reg。
  2、保存 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WS2IFSL 到当前路径下的 WinSockLSPIFSL.reg。
  3、将在第一步确定为未知的LSP的DLL保存到当前路径下的LSP中,并写入相关的信息到LSP.ini中,以便后续的恢复操作可执行。
  4、对检测为未知的DLL再次进行检测,是否与以下的DLL名称相符合。
      shdocvw.dll
      Shell32.dll
      Oleaut32.dll
      Actxprxy.dll
      Mshtml.dll
      Urlmon.dll
      Msjava.dll
      Browseui.dll
  5、如果不符合已知的DLL,那么将这个未知的LSP的DLL进行删除处理,并删除这个相关的LSP协议。
  
  最后是还原操作:
  1、导入保存的WinSockLSP.reg和WinSockLSPIFSL.reg
  2、读取保存的LSP文件夹下的LSP.ini,得到DLL删除前存放的路径。
  3、将所有的DLL拷贝到原先存放的路径中。
  
  在完成这个小工具的期间在反汇编360LSP修复工具的时候发现一个逻辑上的小BUG:
  360LSP修复在写入LSP相关的DLL文件到ini中的时候,只能恢复保存在ini中的第一个DLL文件。是由于GetPrivateProfileSection只能读取到第一个换行的数据.而第二行的数据无法得到。(文件版本号: 7.0.2.1005)

  贴张界面效果图

  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2011年06月26日 21:14:05


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
好贴沙发了,顶一个
2011-6-27 08:54
0
雪    币: 248
活跃值: (188)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
3
自己顶一个,占据板凳的位置
2011-6-27 08:56
0
雪    币: 2882
活跃值: (1267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yjd
4
系统自带一个命令
netsh winsock reset

执行完重启系统
2011-6-27 09:29
0
雪    币: 113
活跃值: (628)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习了,感谢
2011-6-27 10:35
0
雪    币: 428
活跃值: (293)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
前排占位...
2011-6-27 11:40
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
7
Mark,过段时间研究一下~~~
2011-6-27 16:36
0
雪    币: 2291
活跃值: (2185)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
8
挺科普的, 不错不错.
2011-6-27 17:26
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
9
360可能是直接 导入标准的reg文件
2011-6-27 20:06
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
呵呵 不错 不错 支持一下
2011-6-28 20:22
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
下载下来,研究下。谢谢楼主
2011-6-29 22:26
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
360工具都被一个个拿来拆分分析了
2011-7-6 13:38
0
雪    币: 73
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢楼主分享,来学习一下!
2011-7-6 17:38
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
14
先mark~,感谢lz分享~~
2011-7-6 18:01
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
Support  ... ...
2011-7-6 19:52
0
雪    币: 134
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好东西 必须留记号
2011-7-7 12:56
0
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
来看下
2011-7-21 19:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
好东西,谢谢了~
2011-10-18 10:37
0
游客
登录 | 注册 方可回帖
返回
//