维普期刊 瑞数5

  • 郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关。

加载流程

url:aHR0cDovL2xpYi5jcXZpcC5jb20vUWlrYW4vU2VhcmNoL0luZGV4P2Zyb209aW5kZXg=

简单说一下瑞数5代的加载流程,首先打开一个无痕浏览器,输入维普的url ,查看其加载过程

在这里插入图片描述

可以看到,当在一个干净的浏览器环境中第一次请求时,会首先返回一个412页面,这个412页面又加载了一个js文件,然后才返回了首页的200页面,我们可以先观察两个 Index?from=index 有什么不同

第一个Index?from=index

在这里插入图片描述

第二个Index?from=index

在这里插入图片描述

很明显,他们的不同之处在于cookie,其中GW1gelwM5YZuS是服务器返回的,而GW1gelwM5YZuT则是js代码生成的,也就是说我们必须破解GW1gelwM5YZuT的生成过程

定位cookie

定位cookie最快的方式自然是hook了,首先新开一个无痕窗口,然后打一个事件断点,输入url回车

在这里插入图片描述

断点断住后,在控制台注入以下代码

(function() {
    'use strict';
    let hookCookie = function (key) {
    'use strict';
    var cookie_str = document.cookie;
        Object.defineProperty(Document.prototype, 'cookie', {
        get: function () {
            return cookie_str;
        },
        set: function (val) {
            console.log('捕获到cookie设置-->', val);
            if (val.indexOf(key) !== -1) debugger;
            let addCookie = val.split('; ')[0]
            addCookie = addCookie.split('=')
            let cookie_object = {}
            cookie_str.split('; ').map(function (v) {
                v = v.split('=')
                cookie_object[v[0]] = v[1]
            })
            cookie_object[addCookie[0]] = addCookie[1]
            let cookie_arr = []
            for (let k in cookie_object) {
                k = k + "=" + cookie_object[k] + '; '
                cookie_arr.push(k)
            }
            cookie_str = cookie_arr.join('')
            return cookie_str
        }
    });
}
hookCookie('GW1gelwM5YZuT');
})();

断点断住后,跟栈调试

在这里插入图片描述

通过跟栈找到cookie生成位置,这是个vm文件,一般这种文件都是eval生成的

在这里插入图片描述

继续跟栈到412页面,找到eval函数,其中_$FP就是vm中的代码

在这里插入图片描述

跟到这里,我们已经知道cookie生成的大致流程了,当不携带cookie访问首页时,服务器返回一个412页面,412页面会执行了一些js代码,生成了_$FP(字符串类型的js代码),然后调用eval函数将_$FP给执行了,生成了vm文件,vm文件执行后生成了cookie。

扣代码

红色标注的位置全部都要扣下来

在这里插入图片描述

补环境

在瑞数的代码还未执行eval之前,可以使用proxy代理补,在执行eval后就不能使用proxy了,为什么不能使用了,懂的都懂,既然不能使用proxy了,那我怎么知道他检测了那些环境呢,其实很简单,就像华为牛过河的面试题的答案一样,他是直接过,我是直接调,两个字:硬刚

  • 第一步复制刚才那份412页面的所有代码,保存到本地为rs.html(记住代码不要格式化)

  • 第二步在rs.html的头部加入以下代码,这么做是为什么,大家应该懂我意思吧

    <script>
    	eval_= eval;
    	eval = function(s){
    		debugger;
    		return eval_(e)
    	}
    	eval.toString = function(){
    		return 'function eval() { [native code] }'
    	}
    	// 保持环境的一致性
    	Object.defineProperty(window,'indexedDB',{
    		ger(){
    			return underline;
    		}
    	}) 
    	......
    
    </script>
    
  • 第三步,使用fiddler本地替换,当断点断住之后,直接调试就可以了,看他检测了什么就补什么(有一些是可以不补的,这就要看你对浏览器的了解了)

  • 至于怎么调试最快最有效就是基础知识了,如果你调试技巧足够娴熟,一天就能补出所有环境,当然后续还有很多坑

  • 可以参考挽风大佬的文章

如果你自己生成的cookie有173位了,那你因该可以拿到首页的200,如果生成的cookie有279位(记得模拟load事件执行),则可以拿到搜索接口的200,记住cookie的时效性非常短,如果你想在node中生成,然后复制到python脚本中去请求是行不通的。

搜索接口后缀生成

在搜索接口有一个后缀,他其实是重写了XMLHttpRequest.prototype.open方法,只要你调用这个方法,就会自动为url加上后缀

在这里插入图片描述

如果你生成的cookie没问题的话,你可以直接用proxy代理出后缀生成的检测点

成果展示

在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值