吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8770|回复: 59
收起左侧

[Web逆向] [原创]boss直聘__zp_stoken__的控制平坦流纯算逆向思路

  [复制链接]
SuEmiya 发表于 2025-9-8 00:13
先看该token哪里来的.
1.png
注意到下面的请求cookie才第一次使用到__zp_stoken__,推断出是在这个0f35c990.js里生成的.注意该文件以及文件名会在每天晚上0点-1点之间变动一次,固定为每天一次.
下面分析该js.
2.png 该js分为两部分,上面是一小段自执行函数,如上图.这里关键控制变量是G,并且是常量16.
3.png
下面部分依然大同小异,只是控制变量不再为常量,而是由传入的参数决定.
4.png
可能的传入参数,即下图示例中的10768 诸如此类.
这是典型的控制平坦流.面对这种情况,我的思路是,首先要理解,它实际控制变量就一个,这里的be.后面的Ee,Ae,Ne这几个实际是由be经过固定算法得出的.
现在进行第一步,使用ast构建出一个map印射表,使每一个be值对应的执行内容印射出来.
5.png
比如当be=10768时,Ee,Ae,Ne对应的值就分别是16 16 10.然后我们去对应的分支查看,可以看到
6.png
实际上执行的就是给be下一个赋值,然后循环,直到遇到return节点.
那第一步就是通过模拟这个流程,构建我们自己的map图.
流程就是be=10768,得到be=10410,然后继续...
7.png
去除掉无用的break部分,我们得到这样的有效数据.
下一步就是给定指定的入口参数,然后我们模拟这个流程,以return和be=undefined未界,标记一整个函数的执行过程.
我们把只关于be跳转的部分无效信息移除掉,以be=1616为入口为例,得到这样的结果.
[
  'be = 1616;r = "cha";p = arguments[1];_ = "len";e = "gth";a = [];l = undefined;h = "At";o = "pus";q = 1;c = 0;u = "rCo";y = _ + e;v = "h";f = "de";s = r + u;i = o + v;g = s + f;m = g + h;t = p[y];S = c;n = S < t;j = S + q;be =
n ? 14700 : 73;',
  'if(be===14700);be = 14700;d = a;x = p[m];z = x["call"](p, S);w = d["call"](a, z);S = j;n = S < t;j = S + q;be = n ? 14700 : 73;be = n ? 14700 : 73;',
  'if(be===73);be = 73;return [a];'
]
继续进行转化并构造成这样的格式
8.png
9.png
然后进行常量合并,如观察到_ = "len";e = "gth";y=_ + e;那么自然y="length".当然这一步不是必须的,不过可以方便我们观察代码逻辑.
10.png
11.png
最终形成这种样式.并以此类推还原出全部算法.
12.png
等等等等.
13.png
剩下的就是找到token生成的入口位置,然后使用我们自己构建的代码,依次调用即可.
14.png
可以看到第一个参数5553,即be=5553是关键入口,第二个第三个是前面请求或者token已过期时系统返回的种子参数.
15.png
16.png
值得一提的是,部分参数的构成方式,靠肉眼就能看出规律,没事背一下ascii码表是真的有用家人们,比如这里我当时就肉眼看出端倪,a=97总知道的吧,那b自然是98,包括后面俩一样的.这段长度50的代码计算逻辑是这样的.首先是字符串的长度,然后跟字符串对应的ascii码.
17.png
48, 98,  57,  50 是"0b92"对应的ascii码,4代表该字符串的长度.同理44代表'booubZKQSgODivfbCd8dHDdK8T7BITcNqfge/Jfh7Oo='这个种子的长度.
以此类推,扣出最终的核心代码即可.
18.png

实际的核心代表仅这一段,当然仍然需要一些耐心去仔细补全,不过剩下的确实也没什么难度了吧.
最后总结:
1构建map,还原全部执行流程.
2提炼出有效信息并自行构建易辨认的格式.这里的难点在于对于if语句的重构,逻辑比较绕.
19.png
部分陷阱:比如这里的返回值f是undefined,是怎么回事呢?实际上因为v是数组,它是在函数内部对v进行了操作,最后没有返回任何东西,但实际上v已经变化了.对于这种,自己需要手动让它返回v的值.
测试
20.png
问:这个初始值是什么?
21.png
答:这个是首次自执行该js时拿到的一个时间戳,会保存到window['s']中,后续计算会用到,作用我猜测是计算本js从开始执行到最后生成参数,相隔了多长时间.作用大概是判断你是正常用户(执行时间应该在1秒内)还是搞断点的.如果搞断点逆向的话,可能最后发生出去的时候这个时间已经过了几十分钟.不过实际上似乎并没有什么后果.
21.png
可以观察到某部分数组明显是跟时间有关的.
问:怎么生成的结果会变,甚至长度都不是固定的?
答:还是由于上面的这个原因.

免费评分

参与人数 25吾爱币 +22 热心值 +20 收起 理由
oblivate + 1 我很赞同!
bbb618090 + 1 + 1 我很赞同!
chencc123 + 1 谢谢@Thanks!
diuer + 1 + 1 谢谢@Thanks!
lin5789 + 1 我很赞同!
吾恋兮不知 + 1 谢谢@Thanks!
Rhongomyniad + 1 用心讨论,共获提升!
DancingLight + 1 + 1 谢谢@Thanks!
Yudaoni + 1 + 1 鼓励转贴优秀软件安全工具和文档!
zzf520 + 1 谢谢@Thanks!
CaretyW + 1 + 1 用心讨论,共获提升!
daxz + 1 + 1 谢谢@Thanks!
fiscivaj + 1 谢谢@Thanks!
jk998 + 1 + 1 我很赞同!
ioyr5995 + 1 + 1 热心回复!
ay6666 + 1 我很赞同!
离轩 + 1 + 1 用心讨论,共获提升!
krrred0223 + 1 + 1 用心讨论,共获提升!
fengbolee + 2 + 1 用心讨论,共获提升!
wjms119 + 1 + 1 用心讨论,共获提升!
杨辣子 + 1 + 1 用心讨论,共获提升!
cryfly + 1 + 1 女少口牙!我就是要看这个,下一步用HR账号直接发offer
外酥内嫩 + 1 + 1 我很赞同!
EvanNpBlm + 1 + 1 我很赞同!
jaffa + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| SuEmiya 发表于 2025-9-9 15:48
yxc8218147 发表于 2025-9-8 16:16
请教下大佬,这个应该怎么使用呢?或者说如果我要用boss直聘app,这个的使用效果是?我不太懂代码什么的, ...

作用就是我们可以自动生成cookie,以便访问我们需要的数据呀
opddsvj 发表于 2025-9-12 11:15
好细节的内容,让ai总结了一下,帖子全程在干:把“控制流平坦化”这座迷宫逆向成一张地图,再用脚本跑出唯一正确路径,从而脱离浏览器、纯算生成 Boss 直聘的防爬 token _zp_stoken。

虽然还没试过,但先收藏了,给大佬点赞
 楼主| SuEmiya 发表于 2025-9-8 00:34
九条可怜 发表于 2025-9-8 09:16
学习到了!
whzyeah 发表于 2025-9-8 10:31
为以后跳槽做准备,哈哈哈哈哈哈
buluo533 发表于 2025-9-8 11:07
学习了,大佬,刚想研究boss的控制流,没想到做map映射
bi235 发表于 2025-9-8 13:43

感谢楼主热心分享,学习到了!
unityzx 发表于 2025-9-8 14:31
感谢楼主分享!慢慢学习
seyior 发表于 2025-9-8 15:01
好东西,谢谢!
FourLoses 发表于 2025-9-8 15:54
感谢大佬分享
yxc8218147 发表于 2025-9-8 16:16
请教下大佬,这个应该怎么使用呢?或者说如果我要用boss直聘app,这个的使用效果是?我不太懂代码什么的,就想请教下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-2-1 19:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表