某招聘网站token生成纯算分析(二)

经过上回的ast还原之后 可以看到最终结构

可以看到经过还原,之后整个结构都非常的明显

接下来就一步步跟着函数内部看看具体到底是怎么生成的

第一个函数`a`

js执行后看看结果 第一个函数a 就是创建了一个空函数

由于平坦流的会有一些作用域的问题等等限制,大概率内部是不会操作别的变量

接着往下分析

第二个函数R

第二个函数R会生成56位数组,目前来说看不出来到底是怎么生成的

往里面看看 先把传入的参数记录下来 方便回头查看

接着看看内部函数的具体实现

上面还有一些就是函数的定义和变量的定义 先不关注 就看最尾部执行函数和return 的地方

可以看到最后也是放回了一些函数最终return H

第一个函数l放回的也是一个空数组

第二个函数p就是把空数组当做参数传入p中 那r是什么

r是一个字符串,既然涉及到了字符串那么大概率是固定的,回头看看变量

确实如此, 不过这个值每天都会变,但是当天是不会变得

最后看一下执行结果

s=undefined 那么大概率就是操作传进去的v或者r了

执行r后结果还是不变

再去看看v

v是一个数组, 还原纯算一定要对一些基本的转换很敏感

更多的还是经验, 还是那句话就是多看多做多练

为什么说要敏感, 数组首位是4, 还记不记得r是什么 '1d17' 长度刚好是4

既然长度是r的长度,那么数组后面的值会不会也是和r有关,那么什么情况下字符串能转成数字

charcode

试一下

确实如此,这就是为什么要敏感,如果看到这个数组一点思路都没有,有关系嘛,没有关系!

但是会在花最起码10分钟左右继续跟里面的步骤

那么现在可以知道p函数就是把第二个参数的长度添加进去最后在把长度charCodeAt()一下

在来看看第三个也是p函数,看一下运行结果 是不是可以通用,那么就剩下大部分时间了

n=arg[1] 就是刚才记录的"g7c3mC+v0MuSMx+DxzAY46iTfU0nqcMVWQqFm49dMFo="

为什么是arg[1]等于这个呢,不应该是arg[0]嘛,  看这个函数内部

可以看到 apply调用一个函数,具体函数用处就不介绍了 null是函数内部this指向为空 concat是拼接两个数组返回一个新的数组

arg是一个类数组但是也可以使用arry的一些方法

也就是[11792,...arguments] ...是展开运算符

/* 展开一个数组 */
let arr = [1,3,5,7,9];
console.log(...arr);   //  1 3 5 7 9

后面为了省事我都会用...来表示展开一个数组

那么这样数组的第0位就是11792

这样就搞明白了为什么是arg[1]

直接看传进去的v数组

红线处是上一个函数添加进去的数组

第一个是44

发现可以对的上,那就不用再往里面去看了

再来看看这个E=T[V]

getTimezoneOffset() 方法返回协调世界时(UTC)相对于当前时区的时间差值,单位为分钟。

执行一下看结果

-480

在看看c函数,注释的变量都是固定的值,为了省事我直接不写这段了

在ast中可以直接还原但是麻烦,有些地方还要考虑作用域的问题

还是很烦写ast代码,为了省事就是没搞了

c是node内置函数的函数

c = parseInt;

就是时间戳/1000后 取整数

在看看a函数干了什么

可以看到v数组的长度变成了55位

一般来说操作数字的一个都是 >> << &某个数字

这个没办法只能去内部看看具体都干了些什么

可以看到H等于push,_等于arg[1],有5次push,多出来5位可以对上

而多出来的5位 Ml等于240 这是一个固定值

后面有添加了四个值Xl, Kl, $l, ap

_p = e;//arguments[2];
x = l[h];//l = Math; h = "max";
w = l[g];//g = "min";
b = w["call"](l, _p, y);
//y = 4294967295;
k = x["call"](l, q, b);
//q = 0;

这一段就是拿出传进来的时间戳,然后通过Math.max min 取出最大和最小的值

这一段也算是花指令吧 传进来的时间戳怎么可以会比4294967295大

k最终也就是等于原来的时间戳的值在通过>>&组合计算得到一个值最终在添加到数组中

拿出里面的值还原一下

确实可以对上

在看看e这个函数

Q = 0, X=100 这种没有特殊入参的 可以多执行几次看看规律

可以看到每次执行都是会变的结果, 而且都没有超过X变量的值100 也没有低于Q的值就是负数

那就大胆一点直接按随机数 0-100

a函数执行一下看看

很明显数组就是增加了一位 最后一位是7 其他没变 那就是吧上面生成的随机数push到v中

直接看看y函数,还是老样子直接执行看看结果

发现位数没变 但是值有些被改变了有些没被改变

而且值看看规律[1]和上一个数组比大了2,[2]也是加了2,但是到了[3]就和上一个数组比加了6,但是[4],值增加了4,没有明显的规律

跟进函数内部看看

代码解构理清楚了在看看内部的具体实现

看完上图对大概具体逻辑有一个大致上的了解 最后在整理一下

一开始 取出c的第零位 再加上ol, 开始的ol等于零

W = i + ol;//ol=0
pl = i + ll;//ll=0

不管走 if分支还是else分支 数组的第零位都是不会被改变的

也确实如此

但是还是要确定到底是走的什么分支因为看了大概执行顺序 知道了 ol  ll的值是会被改变的

所以还要继续看15916节点的内部

一进来之后就立马先把W  push  到新数组中

ol 就变成了 nl 而nl=1

也就是自增了1

ll变成了 d * ol 前面的图片中可以看到 d是等于2的 ol已经被改变了 ol=1

ll最终等于2

r在的值被改变了 就是判断的s这里是走不同分支的改变条件设置的地方

r=2而e还是等于0
 

所以当我们取出数组的[1]的时候 s已经是falsell = 2

就会进入3249的分支

这里和前面的一样 不同的是 push的变量是另外一个

pl 在前面的分析出就是arg[1][1] + 2

v[1]确实加上了2

最后 如果条件为真 下标加上当前下标的元素

如果为false就是2*当前下标

至此第一个56为数组就完成了

---------------------------------------------------------------------------------------------------------------------------------

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Boss直聘对数据安全性进行了加密处理,其中一个加密字段是__zp_stoken__。这个字段是用于身份验证和安全访问的一种方式,确保用户的身份和数据的安全性。具体的生成流程和算法并没有公开的信息。如果你在进行逆向分析或爬取数据时遇到了问题,请注意Boss直聘的数据保护措施,并确保你的操作符合相关法律法规和隐私政策。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [2019年末逆向复习系列之Boss直聘Cookie加密字段__zp_stoken__逆向分析](https://blog.csdn.net/zhangge3663/article/details/109778462)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [boss直聘的爬取之js解密cookie的”__zp_stoken__”字段](https://blog.csdn.net/Lock_Jun/article/details/101768531)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [自我学习-逆向解析BOSS直聘cookie字段 _zp_stoken__加密](https://blog.csdn.net/qq_39960370/article/details/106242240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值