• 某招聘网站_zp_stoken_逆向


    学习背景

    目标站点:aHR0cHM6Ly93d3cuemhpcGluLmNvbS8=(请使用base64解码查看网站)

    思路分析:

    按照常规思路,一上来定位招聘信息内容所在的链接。
    某招聘网站

    • 可以定位到该链接的结果即就是我们需要采集的内容。
    • 但是当我们将改url请求截获下来在本地复现的时候却发现无法得到想要的结果。
    • 经过分析该页面的内容发现,当如果检测到未携带cookie参数的时候,该网站会通过js去生成一个新的cookie,然后再根据改cookie去访问结果页面的内容。
    • 但是查看了他的cookie列表后,我们发现存在很多cookie参数,那么哪一个是我们需要js逆向获取的呢,那就需要我们使用控制变量法进行逐个分析了。
    • 最终通过删减后发现,当zp_stoken_这个参数没了后,网页会重定法到一个新的页面去加载js生成。

    开始逆向分析

    定位cookie加密位置

    • 因为我们需要获取的参数是在cookie中,那么一定可以通过js_hook获取到其生成的过程及位置信息。
    • 那么第一步我们就是用hook技术定位cookie。
    !(function() {
        'use strict';
        Object.defineProperty(document, 'cookie', {
            //hook set方法也就是赋值的方法
            //当前也可以hook get方法
            set: function(val) {
              console.log('Hook捕获到cookie设置->', val);
              debugger;
              return val;
            }
        });
    })();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 通过以上cookie分析以后可以发现,我们最终需要的参数很快定位到位置了。
      hook定位到__zp_stoken
      直接定位到生成位置
      接下来就是扣代码了,将改段代码保存下来进行还原补环境即可。
      具体的整个流程我会放到csdn的下载链接中,需要的朋友自取。

    分享一部分还原心得

    • 因为改段js是属于动态加载的,所以我们应该动态的提取这段代码。
    • 其次是在补环境的过程中,我们可以使用proxy代理,将关键的信息代理后,查看哪些内容需要还原,缺啥补啥。
    • 本网站存在一些比较深的检测,如果不加以注意,很难发现其中存在的问题。

    动态下载js的代码

    session.headers = headers
    response = session.request("GET", url, data=payload, verify=False)
    local = response.url
    print(local)
    seed = unquote(re.findall('seed=(.*?)&', local)[0])
    ts = re.findall('ts=(.*?)&', local)[0]
    filename = re.findall("name=(.*?)&", local)[0]
    ak_url = "https://www.zhipin.com/web/common/security-js/{}.js".format(filename)
    response_ak = session.request("GET", ak_url, data=payload, verify=False)
    final_js = raw_js + response_ak.content.decode() + tail_js
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    proxy代理打印参数

    function vmProxy(Object){
        return new Proxy(Object, {
            set(target, property, value){
                console.log("set:", target, property, value);
                return Reflect.set(...arguments);
            },
            get(target, property, receiver){
                console.log("get->target:", target);
                console.log("get->property:", property);
                console.log("----------get->value:", target[property]);
                // if (property == 'href'){
                //     debugger;
                // }
                // console.log("get:", target, property, target[property]);
                // debugger;
                return target[property];
            }
        })
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    小结

    • 通过以上方式可以更快的定位到cookie等一些放在document、window里面的参数,更快的帮我们分析。
    • 如果觉得补环境的方式过于麻烦,也可以采用rpc的方式进行调用,该方法可以直接运行js本地的环境,不过也存在一些问题。
    • 当然个人更加推荐本文的方式去完成数据的采集工作,因为可以脱离游览器的环境去完成接口的请求。
    • 该网站存在一定程度上的ip封禁,当接口无法请求时可以更换代理ip进行尝试。

    文章成品代码如有需要,请自提

    本文在2022.6.22仍可以正常获取到信息

    代码下载地址:https://download.csdn.net/download/qq_41733098/85785273

    本文仅在新型技术分析与心得交流,如存在侵权问题,请联系作者,谢谢!
    商务联系qq:986361369

  • 相关阅读:
    计算机网络 校园网组建与设计
    解析全闪对象存储
    ceph操作
    SpringBoot + Flyway,自动化实现数据库版本控制
    SpringBoot整合SpringSession实现分布式登录
    实现并发新高度:23ai的无锁列值保留
    9.22 QT作业
    夏天给宝宝开空调需要注意的几点
    解决netty作为web,post请求体过大导致413 Request Entity Too Largew问题
    JS中数组随机排序实现(原地算法sort/shuffle算法)
  • 原文地址:https://blog.csdn.net/qq_41733098/article/details/125469513