boss直聘__zp_stoken__参数分析

简介: boss直聘__zp_stoken__参数分析
项目地址:aHR0cHM6Ly93d3cuemhpcGluLmNvbS9qb2JfZGV0YWlsLz9xdWVyeT0lRTklODAlODYlRTUlOTAlOTEmY2l0eT0xMDAwMTAwMDAmaW5kdXN0cnk9JnBvc2l0aW9uPQ==

观前提示:

本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除






 定位加密点

这次我们需要的一个参数是cookie中的 __zp_stoken__

同样的 我们在全局搜索搜 __zp_stoken__

点进去看看逻辑

发现 我们还需要再找一下 GATEWAY_TOKEN_NAME 的出处


页面搜索看看

这里做了一个cookie的set操作 set的值为s s就是8025行的代码

到此 加密点就定位到了




 逻辑分析与堆环境

8025行打上断点刷新页面 成功断下

发现t对应ABC

传入e和i e为cookie中的seed i为cookie中的ts

接着点进ABC函数可以看到这个js为ob混淆

那我们用ast解一下看看用了哪些环境 解完后六千多行 还是挺好分析的

开局就看到

那我们就要想 他会不会是混淆了然后解密在Function里面做了一些浏览器检测操作呢 先不管 往后继续看

这里检测了window下面是否有document和获取了document.cookie

下面获取了navigator下面的cookieEnabledlanguage

同时也获取了_phantomcallphantom 由于这俩个都是undefined 所以可以不定义

这个cookie好像是没检测啥东西 写死就行

window={};
window._phantom = window.callphantom = undefined;
document=window.document={
  cookie:"sid=sem_pz_bdpc_dasou_title; __g=sem_pz_bdpc_dasou_title; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1596368815,1596368826,1597646720,1597646727; lastCity=100010000; __c=1597646720; __l=l=%2Fwww.zhipin.com%2Fjob_detail%2F%3Fquery%3D%26city%3D100010000%26industry%3D%26position%3D&r=https%3A%2F%2Fwww.baidu.com%2Fother.php%3Fsc.af0000afYf7jC0pXF4oS1iJj8V8v9tvluUwo5fBffPttzpNapbA7PKeD-W1kcVeA779tXhnoWS-eeuw39PZFzghQzrSfhjJTCveyDrQYXE5REN9Nk5VOVtOjuaS-vB__WNgXP9JJpVVkgjvXXVF7TCfIUZJFvkaOz5ZHqTnpMn9yCK7SnX6U6zwVGI1qjzNzjp87wGsKeJWvUCia5IicBV5F3DSZ.7D_NR2Ar5Od663rj6t8AGSPticrtXFBPrM-kt5QxIW94UhmLmry6S9wiGyAp7BEIu80.TLFWgv-b5HDkrfK1ThPGujYknHb0THY0IAYqmhq1Tqpkko60IgP-T-qYXgK-5H00mywxIZ-suHY10ZIEThfqmhq1Tqpkko60ThPv5HD0IgF_gv-b5HDdnHbYnjnYnHn0UgNxpyfqnHcLPWTLnj00UNqGujYknjm3P10vPfKVIZK_gv-b5HDkPHnY0ZKvgv-b5H00pywW5R9rf6KWThnqP1bkn0%26ck%3D3759.5.111.351.162.195.162.106%26dt%3D1597646717%26wd%3Dboss%25E7%259B%25B4%25E8%2581%2598%26tpl%3Dtpl_11534_22836_18980%26l%3D1519403413%26us%3DlinkName%253D%2525E6%2525A0%252587%2525E5%252587%252586%2525E5%2525A4%2525B4%2525E9%252583%2525A8-%2525E4%2525B8%2525BB%2525E6%2525A0%252587%2525E9%2525A2%252598%2526linkText%253DBOSS%2525E7%25259B%2525B4%2525E8%252581%252598%2525E2%252580%252594%2525E2%252580%252594%2525E6%252589%2525BE%2525E5%2525B7%2525A5%2525E4%2525BD%25259C%2525EF%2525BC%25258C%2525E6%252588%252591%2525E8%2525A6%252581%2525E8%2525B7%25259F%2525E8%252580%252581%2525E6%25259D%2525BF%2525E8%2525B0%252588%2525EF%2525BC%252581%2526linkType%253D&g=%2Fwww.zhipin.com%2F%3Fsid%3Dsem_pz_bdpc_dasou_title&friend_source=0&friend_source=0; __a=76203896.1596368628.1596368632.1597646720.16.3.9.8; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1597648407; __zp_stoken__=fce8afD16XzU3XWoFMU0rCVd6aHYYcG8%2FPlIvCmcRNRpxOz8pHQg3fB97QGJ0KGRHHjt%2BZF1lNyBvXC9VKzJuLE44OX4TWG5mfS1yIQw8QAY9XE0VUTNGJV88RxlIcwMMXAI7G0dsSFgtbDQ%3D"
};
navigator=window.navigator={
    cookieEnabled:true,
    language:"zh-CN"
};

继续下看

是一个canvas的常规操作

按照这个逻辑缺啥补啥给他

有人问这个toDataURL返回的值是怎么来的呢?我们只需要在浏览器按照这个逻辑执行一遍返回的值便是我们需要的canvas了 或者去js中相应的位置断点输出也是可以的

document.createElement = createElement;
function createElement(a){
    return {
        getContext:function(aa){
            return {
                textBaseline:"",
                font:"",
                textBaseline:"",
                fillStyle:"",
                fillRect:function(aa,bb,cc,dd){},
                fillStyle:"",
                fillText:function(aaa,bbb,ccc){}
            }
        },
        toDataURL:function(){
            return "自己填"
        }
    }
}

继续看看还有啥操作

这里出现了好几处eval和Function里面的操作 要多注意


这里的又出现了一次常规的navigator操作

很简单补的 反正四个字 缺啥补啥

navigator=window.navigator={
    userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36",
    appVersion:"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"
}

接着讲讲俩种hook方法

我们知道js里面用了eval 那我们能不能hook eval呢?

当然可以 改写一下就行了

首先进到ABC函数方法

然后控制台输入我们的hook代码

(function() {
  _eval=eval;
  eval=function(a){
    console.log("hook eval:",a);
    return _eval(a);
  }
})();

接着再输入

(new ABC).z("EJ+WpvF3xQsfjrE7SjvS0H/gopK+G7mN0mXrYC4ITZo=", parseInt("1597680891953") + 60 * (480 + (new Date).getTimezoneOffset()) * 1e3)

回车看效果

几处eval的代码就被我们hook出来了 是不是很方便


另外一种hook方法为插桩 我们就那Functin来实验

先把js放到本地 搜索Function 记得区分大小写 不然function也是一起匹配的

一共19处不是很多

全插上console 或者你懒的话直接打上debugger也是可以的 达到目的就行

插好后放控制台运行一下

最后根据返回的内容补上缺的东西就行啦

怎么确定我补的值是不是和网页返回的值一样?

你可以把这段代码再浏览器执行一遍和在node执行一遍 确保俩个返回的值对上了就可以啦




 运行效果



[完]



相关文章
|
3月前
|
Web App开发 数据可视化 Python
Python Selenium获取boss直聘招聘信息
Python Selenium获取boss直聘招聘信息
48 5
Python Selenium获取boss直聘招聘信息
|
3月前
|
数据采集 数据可视化 算法
基于Python flask的boss直聘数据分析与可视化系统案例,能预测boss直聘某个岗位某个城市的薪资
本文介绍了一个基于Python Flask框架的Boss直聘数据分析与可视化系统,系统使用selenium爬虫、MySQL和csv进行数据存储,通过Pandas和Numpy进行数据处理分析,并采用模糊匹配算法进行薪资预测。
基于Python flask的boss直聘数据分析与可视化系统案例,能预测boss直聘某个岗位某个城市的薪资
|
6月前
|
存储 Java 调度
今天BOSS约了个面试,HR直接发我一道面试题
SpringBoot中实现订单30分钟超时自动取消的策略
54 1
|
6月前
|
数据采集 Web App开发 自动驾驶
写了个简单爬虫,分析 Boss 直聘自动驾驶岗位
两年前,朋友想知道 Boss 直聘上关于自动驾驶的岗位有哪些 ,于是,笔者写了一个简单的爬虫 crawler-boss ,将岗位的信息收集起来。
|
6月前
|
SQL 数据挖掘 数据处理
「SQL面试题库」 No_48 合作过至少三次的演员和导演
「SQL面试题库」 No_48 合作过至少三次的演员和导演
|
JavaScript Python
boss直聘参数__zp_stoken__分析第二弹
boss直聘参数__zp_stoken__分析第二弹
480 0
|
SQL 存储 自然语言处理
晚上8点在地铁上收到boss需求:把400多张表的关系画出来明早客户要!
晚上8点在地铁上收到boss需求:把400多张表的关系画出来明早客户要!
102 0
晚上8点在地铁上收到boss需求:把400多张表的关系画出来明早客户要!
|
Java
传智杯Java志愿者传智专修学院总共召集了n位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花
传智杯Java志愿者传智专修学院总共召集了n位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花
131 0
传智杯Java志愿者传智专修学院总共召集了n位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花
|
JSON 移动开发 数据挖掘
用Python分析BOSS直聘的薪资数据,年后找工作有方向了!
用Python分析BOSS直聘的薪资数据,年后找工作有方向了!
用Python分析BOSS直聘的薪资数据,年后找工作有方向了!
|
大数据
BOSS说:数据领域首档人物专访类栏目
直播学习时间7月1日下午15:00-16:30,咱们不见不散~
BOSS说:数据领域首档人物专访类栏目