⚠️前言⚠️
本文仅用于学术交流。
学习探讨逆向知识,欢迎私信共享学习心得。
如有侵权,联系博主删除。
请勿商用,否则后果自负。
网址
aHR0cHM6Ly93d3cuaHV5YS5jb20v
1. 浅聊一下:验证码加载及验证流程
1_1. 接口 /web/df/token,响应得到 token 和 encryptSeed
1_2. 接口 /web/df/collect
- 参数 encryptWebDeviceFeature 加密得到
- 参数 token上述接口中返回
- 响应内容 sdid 也就是 下面接口中需要的参数 info
1_3. /web/v2/passwordLogin
- 参数 sdid:collect 接口中返回
- 参数 behavior:可动态切换其中的时间戳
- 其他参数经测试可固定
- 响应: 可从 data 中 匹配出 下面接口中需要的参数 param
1_4. /auth/client/config3
- 参数 info 、param 上述接口中已得到
- 响应: 验证码信息接口链接、验证接口链接、解密key、动态js
1_5. /get3 验证码信息链接
- 参数 info 、param 上述接口中已得到
1_6. /verify3 验证链接
-
参数 info 、param 上述接口中已得到
-
参数 act:加密轨迹
-
验证结果1:验证成功
-
验证结果2:验证失败
2. 加密参数生成
2_1. encryptWebDeviceFeature
2_1_1. 加密 位置,老方法
2_1_2. 加密逻辑分析
- aes 加密
- 参数 e 环境信息
- key: token接口返回的 encryptSeed
2_2. 底图还原
2_2_1. cavas 断点,找一下还原底图的位置
- 就是这里了,a.splitSeq 就是底图的还原序列,e.drawImage 方法用于还原填充canvas
2_2_2. 还原序列生成
- 就是这里了
- t.segment 就是验证码信息信息接口中返回的原始序列 segment
- this.respConfig.key 为 config3 接口返回的 key
- 主要来看一下 window.UdbCipher.decrypt 方法
- 进入该方法会进入一段 VM 代码中,该 js 代码其实就是 config3 接口中返回的动态js,我们动态执行调用即可
2_2_3. 有了还原序列,就可以根据js逻辑还原底图了
2_3. 加密轨迹 act
2_3_1. act 生成位置,首先ajax断点断住,然后全局检索 act:,找到如下位置
2_3_2. this.encryptData 方法
- a 就是对参数,做一些转化,最后base64的结果
- this.huyapk 信息接口返回 huyapk
- window.UdbCipher.encrypt:依然是 VM 代码中的方法,动态执行js即可调用
2_3_3. 加密方法搞明白之后,我们来看一下参数
- this.slideBlockLeft 生成,如下位置插桩,滑动滑块
- 可以看出 t 的初始值为 24,滑动距离 为 61,另外两个是固定值,按照固定方式计算出值即可
- travel 值,起始点和鼠标点击的位置有关
- 通过和上述日志信息对比,就可以模拟轨迹了
- code值: 验证码信息接口中返回的code的值
- sceneType值固定、endTime 时间差动态生成即可