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

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


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

完结,撒花!!!

相关推荐
Lee川1 小时前
解锁 JavaScript 的灵魂:深入浅出原型与原型链
javascript·面试
swipe1 小时前
从原理到手写:彻底吃透 call / apply / bind 与 arguments 的底层逻辑
前端·javascript·面试
Lee川4 小时前
探索JavaScript的秘密令牌:独一无二的`Symbol`数据类型
javascript·面试
Lee川4 小时前
深入浅出JavaScript事件机制:从捕获冒泡到事件委托
前端·javascript
光影少年4 小时前
async/await和Promise的区别?
前端·javascript·掘金·金石计划
codingWhat4 小时前
如何实现一个「万能」的通用打印组件?
前端·javascript·vue.js
前端Hardy6 小时前
别再无脑用 `JSON.parse()` 了!这个安全漏洞你可能每天都在触发
前端·javascript·vue.js
前端Hardy6 小时前
别再让 `console.log` 上线了!它正在悄悄拖垮你的生产系统
前端·javascript·vue.js
csdn飘逸飘逸7 小时前
Autojs基础-用户界面(ui)
javascript
炫饭第一名7 小时前
速通Canvas指北🦮——图形、文本与样式篇
前端·javascript·程序员