找到入口
首先看一下接口的加载器,也就是发送请求的调用栈,挨个查看之后不难发现,加密的入口应该在这两处,由于栈中的调用顺序是从下往上,所以蜜桃成人网站入口先看下面那个入口。
查看参数
首先蜜桃成人网站入口查看入口参数,不难发现arguments[1]是请求的url,那么蜜桃成人网站入口可以根据url包含detail去打一个断点,然后一步一步进行调试,看看发生了什么。
断点调试
单步步入之后,开始了加密参数的流程,蜜桃成人网站入口发现这里的代码明显是混淆过的,上下翻动后,蜜桃成人网站入口发现这是jsvmp文件。单步跳出后,直接到了请求流程,说明在这里面已经完成了a_bogus的加密,所以蜜桃成人网站入口可以断定,加密参数是在调用栈中另一个地方调用的。所以蜜桃成人网站入口再查看一下调用栈中的另一个入口。
可以看到,加密最后运行的函数是s.apply(b,u)并且赋值给了l,那么蜜桃成人网站入口可以大胆猜测一下,这个l就是返回的加密结果,但是蜜桃成人网站入口知道request中有很多加密参数,而且这个代码是jsvmp,所以蜜桃成人网站入口可以认为,这里是调用了jsvmp的指令函数,这个指令函数加密了蜜桃成人网站入口的a_bogus,但是也被其他的一些需求调用,所以说蜜桃成人网站入口要定位到加密a_bogus的时机。
蜜桃成人网站入口可以知道a_bogus的长度为172,所以蜜桃成人网站入口可以在这里打条件断点,当s.apply(b,u).length === 172时断住。然后进行观察。
断住之后,蜜桃成人网站入口发现结果大概率是蜜桃成人网站入口要的a_bogus,后面蜜桃成人网站入口会验证一下,参数为uri以及UserAgent。那么蜜桃成人网站入口之后调用的时候,可以直接调用这个函数,把相应的参数传进去就可以得到蜜桃成人网站入口想要的结果。由于这个s.apply可能调用的函数有很多种,蜜桃成人网站入口不知道它调用的具体函数是哪个,因此,蜜桃成人网站入口需要找到函数调用入口也就是函数导出。至此蜜桃成人网站入口先验证一下结果。
补环境
首先蜜桃成人网站入口把整个bdms.js拿下来,本地运行,进行补环境。
然后运行后发现window is not defined,蜜桃成人网站入口定义一个window=global补个window环境再试试看。
蜜桃成人网站入口发现这里莫名其妙报了个错,由于代码混淆加上各种循环,很难找到这个变量是什么,所以蜜桃成人网站入口猜测,大概率是获取某些环境没有获取到,所以蜜桃成人网站入口加代理看看他获取了什么没获取到导致的。蜜桃成人网站入口添加下列代理来看看检测了哪些环境。
function get_enviroment(proxy_array) { for (var i = 0; i