瑞数5逆向过程(纯补环境)

声明:本文仅作学习交流,请遵守法律法规,不要恶意爬取网站。

演示网址(先解码)

瑞数5

瑞数5的防护措施和瑞数4基本相似

瑞数5第一次请求会返回412以及一个cookie-A,

响应的html中有一段自执行函数,配合js会生成一个cookie-B;

第二次请求时要带上cookie-A和cookie-B才能得到正确的结果。

我们逆向要解决的就是如何拿到cookie-B

补环境

补环境的方式有很多,高端点的有用插件自动补环境(v-jstools)、有用jsdom补环境,但是高端的方式有时未必好用。

本次是用低端的纯手动补环境的方式,先用代理吐环境,然后挨个补环境。

吐环境的code附上:

function get_enviroment(proxy_array) {
    for(var i=0; i<proxy_array.length; i++){
        handler = '{\n' +
            '    get: function(target, property, receiver) {\n' +
            '        console.log("方法:", "get  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return target[property];\n' +
            '    },\n' +
            '    set: function(target, property, value, receiver) {\n' +
            '        console.log("方法:", "set  ", "对象:", ' +
            '"' + proxy_array[i] + '" ,' +
            '"  属性:", property, ' +
            '"  属性类型:", ' + 'typeof property, ' +
            // '"  属性值:", ' + 'target[property], ' +
            '"  属性值类型:", typeof target[property]);\n' +
            '        return Reflect.set(...arguments);\n' +
            '    }\n' +
            '}'
        eval('try{\n' + proxy_array[i] + ';\n'
        + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}catch (e) {\n' + proxy_array[i] + '={};\n'
        + proxy_array[i] + '=new Proxy(' + proxy_array[i] + ', ' + handler + ')}')
    }
}
proxy_array = ['window', 'document', 'location', 'navigator', 'history','screen']


// 这里写你要补的环境


get_enviroment(proxy_array)

逆向过程

先扣代码

这里的扣代码不是从cookie生成的位置开始扣,而是把整个代码都拿下来,就是上文提到的一个js里的代码以及返回的html中的自执行函数。因为cookie生成后会添加到document.cookie中,我们补完环境直接拿就好了。

你可以按如下方式拿到所需的代码:

方式①:监听脚本

清除cookie后刷新页面, 源代码页面会逐个显示脚本文件

方式②: hook cookie

(function () {
// 严谨模式 检查所有错误
    'use strict';
// document 为要hook的对象 这里是hook的cookie
    var cookieTemp = "";
    Object.defineProperty(document, 'cookie', {
        // hook set方法也就是赋值的方法
        set: function (val) {
            // 这样就可以快速给下面这个代码行下断点
            // 从而快速定位设置cookie的代码
            if (val.indexOf('ihkYnttrQXfVP') != -1) {
                console.log('Hook捕获到cookie设置->', val);
                debugger;
            }
            // console.log('Hook捕获到cookie设置->', val);
            cookieTemp = val;
            return val;
        }, // hook get 方法也就是取值的方法
        get: function () {
            return cookieTemp;
        }
    });
})();

用油猴写脚本hook到cookie,跟栈就能找到需要的html,外链js直接在源代码中能找到

重点:一定要替换这个html页面,因为这个自执行函数可能会变,不替换的话,后面不好调试!

替换好文件后把代码扣出来

再补环境

加上吐环境的代理开始补环境

①运行后遇到了第一个报错,这是一个没有表明是哪段code有问题的报错,这种时候我们先按日志的提示补一下

这个时候我们先看看浏览器中的window.top是什么,先给这个补一下看看

补完后发现通过了,来到了第二个报错

②遇到了能显示代码的报错,这个时候在vmp中搜索代码,打断点看看这部分代码是做什么的

 在html的页面,点进入下一个函数调用,进到vmp里搜索,在可疑处都打上断点,然后跳到断点处

在断点处可以看到这里的:

_$Bb  ---->  document

_$Nd[20]  ---->  createElement

_$Nd[64] ---->  div

document对象里有个createElement,创建了一个div标签,标签可以看做是个对象

这时候我们可以补成:

document = {}
document.creatElement = function(){
    return {}
}

再往下看一行:

_$q0  ---->  div

_$Nd[639]  ---->  getElementsByTagName

_$Nd[636]  ---->  i

div标签中存在一个getElementsByTagName方法,去获取i属性(往下走一行可以看到结果是空对象)

这两行代码连起来,顺便加上日志,我们可以补成这样:

div = {
    getElementsByTagName: function (arg) {
        console.log('div.getElementsByTagName:', arg)
        if (arg === 'i'){
            return []
        }
    }
}
document = {}
document.createElement = function(arg){
    console.log('document.createElement:', arg)
    if (arg === 'div'){
        return div
    }
}

照着这个思路补下去,能找到代码位置的报错就到源代码里搜索检查应该补成什么,找不到位置的报错按日志补成相应的值或函数。尽量和浏览器上的结果一致。

最终补到没有报错之后,我们会得到cookie值

很明显,我们补环境得到的cookie更短些,因为毕竟是补环境,很难做到和真实的浏览器环境一致。但是cookie短并不代表不能用。这个时候就需要带着cookie去发送下请求。

如果能得到200的结果,那你是幸运的;

当然很大几率会是412,此时我们需要继续补环境

我们要检查下日志中输的undefined的地方,在浏览器中的输出是什么样的,如果浏览器不是undefined那就需要补成对应的结果(如果是个函数,而你又不知道该补的函数是什么样,不妨先补个空函数);

还要检查下补得环境输出的值是否正确,尤其是补的函数,因为补的函数存在后,代码运行就不会报错,很难发现其返回值是否正确,需要对照浏览器上的代码好好检查

这会是一个很枯燥,很费时的过程,但最终经历千辛万苦获得的成功,也会给你带来极好的体验。

相关推荐

  1. 芯微1808模型转换(onnx到rknn)环境配置过程

    2024-03-12 00:34:01       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 00:34:01       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 00:34:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 00:34:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 00:34:01       18 阅读

热门阅读

  1. 【frp】新版本 frp 参考配置分享

    2024-03-12 00:34:01       20 阅读
  2. C++初学

    C++初学

    2024-03-12 00:34:01      19 阅读
  3. CompletableFuture的使用

    2024-03-12 00:34:01       20 阅读
  4. 复习C++

    2024-03-12 00:34:01       22 阅读
  5. SQL 函数

    2024-03-12 00:34:01       21 阅读
  6. Git - Protocol

    2024-03-12 00:34:01       21 阅读
  7. Linux基础命令

    2024-03-12 00:34:01       19 阅读
  8. 【C#语言入门】16. 委托详解

    2024-03-12 00:34:01       19 阅读
  9. 【IVA】加速计算中常用的硬件

    2024-03-12 00:34:01       16 阅读