我常使用的操作系统是 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 上找到。