记得加入我们的学习群:点击链接加入群聊:https://h5.qun.qq.com/s/62P0xwrCNO
1.挂载点(加密函数入口)
相信大家备受jsvmp算法还原密密麻麻的日志数字所困扰,那么有没有简单一点的办法呢?有啊,就是补环境,补环境最终目的是,让js代码运行的环境像浏览器一样,从而能够避开js代码里的环境检测,从而生成正确的加密的值。
看过我的文章《补环境过xhs的x2环境检测》,就知道,jsvmp 挂载了函数到window下面,xhs的挂载点容易看出,直接就是window._webmsxyw(url, json_data),那么a_bogus的挂载点是在哪呢?
可以看出,bdms.js文件将bdms对象挂载在了window下面。
那么我们看看window.bdms长啥样:
发现这个对象下嵌套了很多函数,而且都叫e,只是e下的u ,v有所不同。我们看看我们需要的加密函数:
就是这个s函数调用后产生了a_bogus,那么s函数,我们如何调用到它呢?有的伙伴可能想到了,找到它在哪,然后导出到全局,这个想法虽好,但是实际不可行,如图:
s函数,定位到位置后:
这个看起来不是那么容易导出到全局。涉及变量和作用域问题。
结合前面讲的,我们能在init下找到我们需要的加密函数:
他的路径是:
window.bdms.init._v[2].p[42]
然后传入参数即可调用。
2.补环境
接下来开始写代码,把所有bdms.js文件代码全部贴到本地,然后,直接运行node bdms.js
,不出意外要出意外,也就是缺window等的,接下来就是挂上Proxy缺啥补啥,总结就是:
其实补的也不多,但就是一个问题,补环境得过程比较玄幻,有的错误得补出来后,才会继续抛出,也就是递归检测,你得补了上级才有下级的检测,比如你得补window下的screen吧,再次运行,他就会抛出screen的属性异常,比如screen.width是undefined,然后就继续补上。
不断完善就能得到最终结果:
我测试了新旧两版的结果如下:
总之就是,难点在于寻找加密函数挂载在了window下的哪里?这个还是需要一点点感觉,至于为什么bdms.js运行后,会将很多e函数挂载,而且每个对应的_v的列表的前两个值不一样,这个就需要看到反编译后的代码或许能解释。
标签:某音,函数,环境,js,拿捏,window,bogus,bdms,挂载 From: https://www.cnblogs.com/steed4ever/p/18167077