自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密

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

如有侵权,请联系本人删除

1. 学习背景

最近这段时间在学习 node 爬虫, 通过网上教程爬取猎聘网数据,是我产生兴趣, 最为目前中国最火的招聘软件,BOSS直聘自然而然成为了我的首选. 配合着网上一些案例,我开始了学习,然而遇到了一些问题:

在获取到页面数据时获得了如下信息, 
        
"data-tips">
"tip-inner">
"boss-loading"> "component-b">B"component-o">O"component-s1">S"component-s2">S

"gray">正在加载中...

分析

参考网上其他大神教程 2019年末逆向复习系列之Boss直聘Cookie加密字段__zp_stoken__逆向分析
找到问题所在, 页面会根据url携带参数生成 cookie, 并进行跳转

var url = window.location.href;
var seed = decodeURIComponent(getQueryString("seed")) || "";
var ts = getQueryString("ts");
var fileName = getQueryString("name");
var callbackUrl = decodeURIComponent(getQueryString("callbackUrl"));
var srcReferer = decodeURIComponent(getQueryString("srcReferer")||'');

if (seed && ts && fileName) {
    seriesLoadScripts("security-js/" + fileName + ".js", function() {
        var expiredate = new Date().getTime() + 32 * 60 * 60 * 1000 * 2;
        var code = "";
        var nativeParams = {};
        var ABC = window.ABC || frame.contentWindow.ABC;
        try {
            code = new ABC().z(seed, parseInt(ts)+(480+new Date().getTimezoneOffset())*60*1000);
        } catch (e) {}
        if (code && callbackUrl) {
            Cookie.set("__zp_stoken__", code, expiredate, COOKIE_DOMAIN, "/");
            // 据说iOS 客户端存在有时写cookie失败的情况,因此调用客户端提供的方法,交由客户端额外写一次cookie
            if (typeof window.wst != "undefined" && typeof wst.postMessage == "function") {
                nativeParams = {
                    name: "setWKCookie",
                    params: {
                        url: COOKIE_DOMAIN,
                        name: "__zp_stoken__",
                        value: encodeURIComponent(code),
                        expiredate: expiredate,
                        path: "/"
                    }
                };
                window.wst.postMessage(JSON.stringify(nativeParams));
            }

            if(srcReferer && isSeo(srcReferer) && srcReferer != 'https://m.baidu.com/' && srcReferer.indexOf('.zhipin.com/web/common/security-check.html') == -1){
                jumpReplace(srcReferer);
            } else {
                jumpReplace(callbackUrl);
            }
        } else {
            window.history.back();
        }
    });
} else {
    if(srcReferer && isSeo(srcReferer) && srcReferer != 'https://m.baidu.com/' && srcReferer.indexOf('.zhipin.com/web/common/security-check.html') == -1){
        jumpReplace(srcReferer);
    }else if (callbackUrl) {
        jumpReplace(callbackUrl);
    } else {
        window.history.back();
    }
}
}

通过 fiddler 获取js文件
自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第1张图片
通过 fiddler 拿到回调页面参数包含: seed, ts, fileName
自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第2张图片

尝试解决cookie 生成的问题

  1. 首先在js中, 通过调用 new ABC().z(send, ts) 方法生产code, 在 security js 中寻找ABC 这个类

自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第3张图片
ps: 红框中的函数为生成debugger的定时器

  1. 通过断点 debugger 分析ABC函数
    在这里插入图片描述
    通过分析, 代码大概如下
    在这里插入图片描述自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第4张图片

  2. 寻找 while() 函数 6步骤中的代码
    在这里插入图片描述
    函数 _0xe82ff8 为直系代码, 测试发现,这个代码最主要的部分为相同的循环 数组
    自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第5张图片
    测试发现,仅和 10 循环有关, 主要的 _0xb3fe04 函数
    在这里插入图片描述

  3. 查找分析 _0xb3fe04 方法
    在这里插入图片描述
    同样的, 这个方法中最有用的为 while 循环, ps: 经测试 1,2,4循环无用, 仅与3有关 自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第6张图片

  4. 分析3循环中的代码
    原函数
    自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第7张图片
    分析
    自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第8张图片
    自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第9张图片
    自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密_第10张图片

  5. 最总生成结果, 可能过程不对,有差异
    以我的为例:
    971bvUGZ0fpMi2O81Nml2RtdQofGNs9LYEqMREvVIa1Q3MFDT4wT7fzx/5G5FxkfO+F+UNOnb2uW2qhT1vXRivFmDCSIr1OpYI/8DNA6msEshMc=

    boss 官网
    在这里插入图片描述
    以上均为学习分享,切勿用到不正当途径

你可能感兴趣的:(笔记,javascript)