起因
刚听说embyServer
已经更新到了4.7.14.0
,于是兴起尝试,点开了我熟悉的那个docker页面,照常进行了更新,也就是如下页面:
lovechen/embyserver
一切更新完之后,准备看看有啥变化没?忽然我的火绒弹警告拦截了2个病毒。
一个是embyServer
中的apiclient.js
,另一个是connectionmanager.js
,这忽然让我神经紧绷,是不是作者开始放毒了?
于是我将所有文件从docker
中拉出来,再用火绒扫了一遍,果不其然,还有一个:
理论上破解emby压根没必要动到apiclient.js
这个文件,这里就引入我的浮想联翩了,作者加密这个文件到底意欲何为?
探索
既然这些个东西报毒了,我们先看看是报毒的名字是SVM:TrojanDownloader/JS.MalBehav.gen!D
,根据名字看起来是用Script Virtual Machine
加密的一个木马下载者病毒。
打开这个apiclinet.js
看看,果然基本加密到几乎完全不可读的状态。
不过最开头提供了一个重要信息jsjiami.com.v7
,来,让我们查查这个玩意。
发现是个什么最牛JS加密,我这里就要看看有多牛,这里找到一个解密网站: obfuscator解码 看看能不能把他直接脱开。
结果是可以,这里直接将其脱开了,大概从402KB变为了186KB,解混淆过后的js文件已经不报毒了。
我尝试着找了一会没发现有太多的关键作案信息,是有一部分和源码不同了,但我不觉得这部分代码符合病毒的定义,这部分有可能是解密后一部分逻辑和原来有细微差异。
所以回到connectionmanager.js
这上面,看看有啥差异没。
还原代码,补齐一部分名字后发现,似乎没有什么特别的东西。 破解思路和网上流行的一致,就是代替原来的网址返回一个lifetime的固定值。
这里其实破解一下直接构造就可以了。 也即是把原来的这一段:
return fetch("https://mb3admin.com/admin/service/registration/getStatus", {
method: "POST",
body: key,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
}).then(function(response) {
return response.json()
})
}(info.SupporterKey).then(function(statusInfo) {
修改为这样子就可以了。
return fetch("/", {
method: "POST",
body: key,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
}).then(function(response) {
return '{"deviceStatus": "0","planType": "Lifetime","subscriptions": {"home": "emby.com","key": 345345216}}'
})
}(info.SupporterKey).then(function(statusInfo) {
但我实在想不通lovechen
为啥要加密已经是共识的东西,而且为啥要加密一个和破解不相干的文件(可能我能力和眼力有限,没能找出关键点)。
同时我在网上找了多个作者的apiclient.js
都和原版一致,表明大家都没有动这个文件。
结论
初始文件火绒报毒,解混淆后不报毒,根据我自己的分析来看,这大概率是火绒对于这个js混淆的误报,没什么大问题。受限于个人知识和技能的匮乏,没能找到有效的信息表明lovechen的修改版中存在可疑点,但加密一个和破解不相干的文件,同时火绒还报毒的情况下,着实让人琢磨不透作者想干嘛。建议心里有担心的用户换用其他大佬的修改版。
评论区