【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 轨迹

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


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

完结,撒花!!!

相关推荐
南城花随雪。几秒前
Spring框架之装饰者模式 (Decorator Pattern)
java·开发语言·装饰器模式
前端郭德纲3 分钟前
ES6的Iterator 和 for...of 循环
前端·ecmascript·es6
究极无敌暴龙战神X6 分钟前
前端学习之ES6+
开发语言·javascript·ecmascript
欲游山河十万里9 分钟前
(02)ES6教程——Map、Set、Reflect、Proxy、字符串、数值、对象、数组、函数
前端·ecmascript·es6
明辉光焱9 分钟前
【ES6】ES6中,如何实现桥接模式?
前端·javascript·es6·桥接模式
虞书欣的612 分钟前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
FHYAAAX19 分钟前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
汉克老师37 分钟前
GESP4级考试语法知识(贪心算法(四))
开发语言·c++·算法·贪心算法·图论·1024程序员节
nameofworld40 分钟前
前端面试笔试(二)
前端·javascript·面试·学习方法·数组去重
爱吃生蚝的于勒1 小时前
C语言最简单的扫雷实现(解析加原码)
c语言·开发语言·学习·计算机网络·算法·游戏程序·关卡设计