目标网站
aHR0cHM6Ly9tb2JpbGVuZXh0LXdlYi5tZWl0dWFuLmNvbS9yYW5raW5nTGlzdD9ib2FyZFR5cGU9OCZjaT0wMDczJmFyZWFJZD02NzIzJmNhdGVJZD0yJmRpc3RyaWN0SWQ9MCZwb2lJZD01OTUxNzUwMzEmZj1hbmRyb2lkJmxhdD0zNi41MjYwNDYxOTExNTk0NDUmbG5nPTEyMi4wNjIyMTc4MTEmY29kZT0xMjEwNTY=
混淆方式:
JSVMP 和 OB混淆,主要加密逻辑在he(hO, hP)函数中,case2 一大段控制流,建议先解混淆再分析,省很多事情,解混淆后的JS代码我会放在后面,需要的自取。
分析思路
JSVMP是通过字节码去执行的(个人理解),类似于汇编指令一样,所以都会有大段的指令集,要做的就是在有运算和函数操作地方插桩,把日志打印出来之后再逐步分析
这是我根据日志记录的一部分算法流程
等你分析完全部流程,你可以选择还原算法还是扣代码
{
"a1": "1.1", // 版本号,固定
"a2": 1717554332486,// 时间戳
"a3": "手动马赛克",// cookie中的a1
"a5": "lMPhYrjr3j1yi18jZLtlCeLkMD2XTa4LmI==", //由[1716888416,7,"2.4.0",1]转32位数组再由自定义的编码算法实现
"a6": "h1.5njc7mcvDVYxUFYemZCnkeYJVgO/GL+Pv8+jUV2CMD33TrTd3QqyLy+马赛克",// 一大段的环境检测的结果编码处理,这个算法传入两个参数,一个参数是环境检测后的结果,一个参数是true/false,这个bool值决定了生成的a6参数是1.5开头的长加密还是1.4开头的短加密
"x0": 4, // 固定
"d1": "1f2a7b87257f03c036+马赛克" //由a1,a2,a3等参数都参与运算的md5结果
}
如果想补环境的话,重点就是a6这个参数生成之前的那一段的环境检测
如下图所示,在你还原混淆后你能看到很多的检查,补上这些就差不多可以了
结果
完结撒花,还原后的JS文件大家自取