简单方法检测远端用户的反病毒软件
我常使用的操作系统是 Windows7,为了确保更安全,我安装了卡巴斯基互联网安全防病毒软件。一天我在一个 Web 页面上看到了一段非常有趣的代码,在我看来它不该出现在页面上。
为什么 Facebook 会使用卡巴斯基网站的 js 代码?我立刻意识到是我的反病毒软件做了 MITM,在网页上注入代码来跟踪页面的活动。
在客户端计算机上存在任何的反病毒软件的话,包括 KIS,为什么不创建一个特殊的页面来监视 Javascript 的代码呢?
创建服务器的第一个页面 iframe.html
<!DOCTYPE html><html lang="en"><head/> <img src=x /> <script type="text/javascript" /></html>
随后创建第二个页面 index.html
<!DOCTYPE html><html><head><title>Remotely AV detection</title></head><body><iframe style="width:10px; height:10px; display:block; visibility:show" id="frmin" src="/iframe.html"></iframe><button onclick="myFunction()">Check AV</button><script>function myFunction() {var frm = document.getElementById("frmin"); ka = frm.contentDocument.getElementsByTagName('html')[0].outerHTML;if (ka.indexOf("kasperskylab_antibanner") !== -1) { alert("AV name is Kaspersky"); } }</script></body></html>
当我们打开 index.html 页面时,它将会加载 iframe.html 并注入 js 代码,在这个图片中我们可以看到更改的 iframe 页代码
KIS 反病毒软件需要从 iframe.html 中读取代码并分析字符串,如果页面有 kasperskylab_antibanner
我们就可以说客户端计算机已经安装了卡巴斯基反病毒软件。
我想看看这种方法对于其他反病毒软件的检出情况,是只能检出卡巴斯基还是其他的也可以。接下来对 Avira、Norton、DrWeb 反病毒软件进行检测,如果有人想继续研究,我很高兴听到研究的结果。
Avira、Norton、DrWeb 和 Chrome 搭配进行检测,甚至还要安装插件来让反病毒软件可以注入特定数据到页面以完成对页面的检测。
Dr.Web
DrWeb Security Space 11.0
Chrome 扩展的名字:Dr.Web Anti-Virus Link Checker Extension URL
在 index.html 中注入下列代码:
使用以下简单代码就可以检测出客户端是否安装了 DrWeb
<script>if (document.getElementsByClassName('drweb_btn').length > 0) { alert("AV name is DrWeb"); }</script>
##Avira
当你安装了 Avira antivirus Pro 时,直接就给你安装了两个扩展:Avira Browser Safety 和 Avira Save Search Plus
Avira 会注入下列代码
如下简单代码就可以检测出 Avira
var AV = document.getElementById("abs-top-frame")if (AV!==null) {if ( AV.outerHTML.indexOf('/html/top.html')>=0 & AV.outerHTML.indexOf('chrome-extension://')>=0) { alert("AV name is Avira"); } }
Norton
诺顿会像 Avira 一样安装两个插件
会注入如下代码
通过下面的代码就可以检测出 Norton
var NAV = document.getElementById('coFrameDiv');if ( NAV !== null) { var nort = NAV.outerHTML; if (nort.indexOf('coToolbarFrame')>=0 & nort.indexOf('/toolbar/placeholder.html')>=0 & nort.indexOf('chrome-extension://')>=0 ) { alert("AV name is Norton"); } }
结论
1. 这种方法并不能保证百分之百检出反病毒软件,因为用户可以禁用安装的 Chrome 扩展。
2. 这篇文章的灵感主要来自于远程检测用户反病毒软件。
3. 相关代码可以在 GitHub 上找到。
*参考来源:GitHub,本文译者:Avenger,转载请注明来自FreeBuf.COM。
- 【设计模式】—— 享元模式Flyweight
- 【设计模式】—— 外观模式Facade
- 【设计模式】—— 装饰模式Decorator
- 【设计模式】—— 组合模式Composite
- 【设计模式】—— 桥接模式Bridge
- 【插件开发】—— 1 Eclipse插件开发导盲
- 【插件开发】—— 4 SWT编程须知
- 【插件开发】—— 5 SWT控件以及布局使用
- 【插件开发】—— 6 SWT 复杂控件使用以及布局
- 【插件开发】—— 7 SWT布局详解,不能再详细了!
- 【插件开发】—— 8 IPreferenceStore,插件的键/值存储!
- 【插件开发】—— 9 编辑器代码分块着色-高亮显示!
- 【插件开发】—— 10 JFace开发详解
- 【插件开发】—— 12 GEF入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android自带emoji表情的使用方法详解
- Android EditText实现输入表情
- Android编程实现使用Intent传输包含自定义类的ArrayList示例
- EditText实现输入限制和校验功能实例代码
- java零基础入门006~springboot实现多文件的上传(java多文件的上传)
- Android编程实现随机生成颜色的方法示例
- Android中将Bitmap对象以PNG格式保存在内部存储中的方法
- python入门012~使用python3爬取网络图片并保存到本地
- java入门015~springboot2整合mybatis,轻松实现mysql数据的增删改查
- 详解Android activity与fragment之间的通信交互
- Android App内监听截图加二维码功能代码
- 微信小程序登录与注册验证码倒计时的效果实现
- Android仿微信朋友圈全文、收起功能的实例代码
- TextView实现图文混合编排的方法
- 小程序云函数调用http或https请求外部数据