网站说明
jsvmp以某音的xb为例
准备工作
浏览器插件
V神的浏览器插件
点击上面的文字即可访问,下载zip后解压缩,然后把解压后的文件拖到chrome的chrome://extensions/,这个连接里就可以了,记得打开右上角的开发者模式;
ast解混淆后的代码替换浏览器中原始的代码;
首先找到webmssdk这个js文件,把内容复制出来,粘贴到V神的插件的ast解混淆里,点击如下按钮,然后把解混淆后的代码复制出来备用。
点击这几个按钮,然后选择完文件路径,上方会弹出的条幅,点击允许即可。
右键点击js,然后点击替换内容。
把上面ast解混淆后的代码粘贴到这里,然后保存即可。
日志插桩和条件断点
以xb为例子,在这个大循环开始的地方,插入日志,右键点击行号,然后点击插入日志,输入下面这段代码,这里就演示这几个变量,实际可以多打印几个你觉得可疑的变量,当然初始定义的这个数组是必须打印的。
'日志1 e',e,'p',p,'O',JSON.stringify(O, function (key, value) {
if (value == window){
return undefined
}
return value
})
完成后,刷新网页,查看浏览器的控制台,会打印出很多日志,耐心等待打印完毕,当然打印的参数太多了,也会很慢。完毕后,我们去看输出的日志,首先搜索DFS,并找到第一次出现的位置,至于为什么搜索DFS,因为这三个值是固定的。
我们可以看到xb就是从这里开始根据后面这个字符串的下标,一个字符一个字符生成的。
具体怎么个的代码逻辑,我们需要在循环处下一个条件断点,类似这样的,具体的变量值,是根据你插桩日志里的可疑变量和值来下的。
最后刷新网页,单步执行,看循环和代码逻辑即可。如果断的不对,就多F8几次,直到能看到Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=
这个值。就可以开始分析了。
代码的大致逻辑:
1.xb的长度是固定的;
2.DFS这三个字符是固定的;
3.字符是一个一个生成的,且后续每四个字符的生成逻辑是一样的;
4.都是根据上面这个长字符串的下标去生成的;
5.浏览器的UA和url参数,参与计算;
6.下标基本都是根据乱码charCodeAt后生成的
最后生成的结果如下。
结语
xb其实逻辑上来讲不是很难,就是jsvmp分析起来很耗费时间,此篇文章大概略去了至少2个小时以上的一个分析过程。虽说只要屁股坐不烂,总归是能分析出来了,但也还是需要多站起来走走的。结束,撒花,下期见。