【JS逆向】逆向案例之 ----- 安某客滑块

every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog

0. 前言


安某客滑块小结


1. 初步分析

总共分为两步,

  • 获取滑块图片信息
  • 检查滑块移动是否正确

整体框架如下:

1.1 getinfoTp

获取图片信息,请求的参数如下:

返回的结果如下:

1.2 checkInfoTp

检测滑动是否正确,(滑动一下滑块会出现如下请求)

2. 详细分析

2.1 getInfoTp参数分析

2.1.1 整体分析

请求参数有两个:

  • sessionId
  • dInfo

返回一个data,其中包含:

  • info
  • responseId

2.1.2 请求参数:sessionId

sessionId在源码中,如下:

2.1.3 请求参数:dInfo

搜索dInfo,如下

几处都打上断点,

调试,

这的加密函数如下,可以看到是AES加密:

函数的的第一个参数,是请求头信息,如下

函数的第二个参数,是seesionId,如下:

进入加密函数内部,_2underfinedp就是我们传入的sessionId,对它进行了一个reduce操作

对_2undefinedp进行reduce操作(函数内部实现提取出_2undefinedp的奇数索引(1,3,5,...)对应的字符),简化如下:

  • t1:累计值
  • t2:当前值
  • t3:索引
  • 传入的初值为''

验证:

加密部分的pad,跳转进去能看到是pkcs7方式,如下

整理一下代码

javascript 复制代码
var cjs = require('crypto-js');


asef = function (a, sessionId) {
  sessionId = sessionId.split('').reduce(function (res, cur, idx) {
                return idx % 2 == 0 ? res : res + cur;
            }, '');
  sessionId = cjs.enc.Utf8.parse(sessionId);
  a = 'string' == typeof a ? a : JSON.stringify(a);

  g = cjs.AES.encrypt(a, sessionId, {
    iv: sessionId,
    mode: cjs.mode.CBC,
    padding: cjs.pad.Pkcs7,
  }).toString();

  console.log('g:', g);
  return encodeURIComponent(g);
};


a = {
  sdkv: '3.0.1',
  busurl:
    'https://www.anjuke.com/captcha-verify/?history=aHR0cHM6Ly9iaW56aG91LmFuanVrZS5jb20vY29tbXVuaXR5Lz9mcm9tPWVzZl9saXN0&namespace=anjuke_xiaoqu_pc&serialID=27e90554cad254c28a0f80195369760d_7baf26a84e554a92bf932587e43d6e54&callback=shield&from=antispam',
  useragent:
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',
  clienttype: '1',
};
sessionId = 'a9b0dbab087648d898d30c27d5a046ad';
res = asef(a, sessionId);
console.log(res);

自行验证一下,可以发现和网页源码加密是一样的

2.1.4 返回结果:info

上面的请求参数用的是ase加密,猜测返回结果是用ase解密,下个断点看看

和上面类似,如下:

2.2 checkInfoTp

2.2.1 整体分析

请求参数如下:

  • sessionId: 和getInfoTp中的一样,来自网页
  • responseId: getInfoTp的返回值
  • dInfo: 与getInfoTp请求参数相同
  • data:轨迹等值加密而成

请求的具体位置如下:

调用函数的位置如下:

跟栈,我们可以看到data是根据sessionId和轨迹进行aes加密的

至此,我们大致梳理了整个流程。

2.3 补充

2.3.1 滑块

关于滑块: 滑块距离的识别方式还是比较多,可以有如下:

  • opencv
  • ddddocr
  • 打码平台

需要注意,在本例中,我们获得的是原始图片,需要进行缩放(缩小处理),如下:

2.3.2 轨迹

轨迹生成可以用贝塞尔曲线,简单处理一下就好


至此,完成了对整个加密逻辑的梳理。

完结,撒花!!!

相关推荐
@卞3 分钟前
C语言常见概念
c语言·开发语言
一只小阿乐19 分钟前
react 封装弹框组件 传递数据
前端·javascript·react.js
wjs202423 分钟前
Eclipse 关闭项目详解
开发语言
沐知全栈开发25 分钟前
《隐藏(Hide)》
开发语言
lkbhua莱克瓦2430 分钟前
Java基础——方法
java·开发语言·笔记·github·学习方法
533_42 分钟前
[element-plus] el-tree 动态增加节点,删除节点
前端·javascript·vue.js
catchadmin42 分钟前
PHP 依赖管理器 Composer 2.9 发布
开发语言·php·composer
禁止摆烂_才浅1 小时前
前端开发小技巧-【JavaScript】- 获取元素距离 document 顶部的距离
前端·javascript·react.js
wshzd1 小时前
LLM之Agent(二十九)|LangChain 1.0核心组件介绍
前端·javascript·langchain
程序猿_极客1 小时前
Vue 2脚手架从入门到实战核心知识点全解析(day6):从工程结构到高级通信(附代码讲解)
前端·javascript·vue.js·vue2学习笔记