boss zhipin web h5 zp_token 算法手撕
时间: 2024-06-01
网站调试,断点,找到加密位置
-
调试发现加密位置如下,其中参数和加密方法一目了然
-
进入这个方法中,发现其就是一个专门用于生成
zp_token
加密参数的js
文件
网站中调试这个方法,发现生成的zp_token
可以直接使用
所以,分析到这里,接下来的方向就是搞定这个加密的js
文件
js加密文件分析
将js加密文件直接拷贝到本地中
-
先简单看下文件代码结构
可以看到其实重要的就是其中的
N函数
网站中直接调用
N函数
,生成的zp_token
可以直接使用N函数
是多层嵌套switch
的while循环
代码,这种混淆模式其实不陌生,美团的mtgsig
多处地方也是这种方式混淆
-
N函数
分析N函数
中存在三层swich嵌套
,如果直接调试查看的话,会让人十分头大,分析起来很麻烦。处理这种混淆的基本方向是:
- 将流程平坦化
- 分析平坦化后的代码,从而解析其中的算法
流程平坦化可以帮我们极大的减少对代码的分析时间
N函数流程平坦化思考,分析
N函数
是三层嵌套switch
,但是他是一层紧连着一层,第一层和第二层中间都没有业务代码,所有的业务代码都在第三层里面
所以想要流程平坦化,直接将运行到的第三层代码全部按照运行顺序“平铺”出来即可
平坦化后代码分析:
分析其实没有太多技巧的东西,都是些枯燥乏味且繁琐的过程分析
算法简单概括:
- 对zp_seed \ sts等值进行了转化
- 对浏览器环境做了大量检测
- 存在简单的加密编码等操作
实现内容:
- zp_token算法的正向加密过程
- zp_token算法的逆向解密过程
展示:
简单调用