目录

文章目录

  • 目录
  • 前言
  • 目标网站
  • 请求流程
  • 请求分析
    • getInfoTp 接口
    • getInfoTp 接口
  • 最终结果

前言

本文只是简单地分析了安居客滑块验证码,没有涉及爬虫部分哦。

目标网站

完整 URL:
aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/aGlzdG9yeT1hSFIwY0hNNkx5OXphR0Z1WjJoaGFTNWhibXAxYTJVdVkyOXRMMk52YlcxMWJtbDBlUzkyYVdWM0x6RXlOekV6TWc9PSZuYW1lc3BhY2U9YW5qdWtlX3hpYW9xdV9wYyZzZXJpYWxJRD0yZDZjYTQ3YTE3ODhkMjdjNTcwMmM4YTQzMTczNjYyNl8wZjk4ZGM1YmI4NTA0YWIwODlhYmNlZjlmYTBlNzI5YiZjYWxsYmFjaz1zaGllbGQmZnJvbT1hbnRpc3BhbQ==

简化 URL:aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0=

请求流程

  1. https://verifycode.58.com/captcha/getInfoTp (获取验证码图片等信息)
  2. https://verifycode.58.com/captcha/dctrace(8次,暂无紧要)
  3. https://verifycode.58.com/captcha/checkInfoTp(校验是否成功)

请求分析

getInfoTp 接口

请求参数

sessionId: 4cc3cd35a39c4eb4b03680e0812f6b98 在访问验证码页面的HTML代码里包含sessionId
showType: embed 固定
track: 固定
clientType: 1 固定
clientId: 1 固定
language: zh-CN 固定
dInfo: 0zKKrvsczg7QXGpGHiLxEepUoismp8P1rvEnnE8n95JH8Sril...省略 貌似不校验

请求响应

{"code":0,"data":{"ntpStatus":1,"ntp":"0","status":0,"responseId":"cea3453145194aaa88ce0f6b3171dad8","info":"I1vWKDGkPlxzM/1krtxMm8mDmkMZ1cfhpygfkAyS2lb1l3kC7gOr5NSjtPoUQAVDyu65emjI7u0D...省略"},"message":"成功"
}

sessionId 在访问验证码页面的 HTML 代码里包含,直接使用正则提取即可

dInfo 直接使用 DevTools 工具中的 search 搜索 dInfo:,直接就会定位到下图位置

直接下断重新刷新页面,会断在下图位置,直接在 控制台 打印 l[_0x1vk[7]][_0x1vk[164]]((0,i)(), r[_0x1vk[104]]) 输出看下内容

发现好像就是 dInfo 参数,

发现关键字 AESEncrypt ,那么就破案了,但是也要继续跟进验证下,主要看下 AES 加密的 内容keymodepadding 等信息,方便我们自己加密测试是否与网站的结果是一样的

发现 sessionId ,很眼熟,就是上面最开始在验证码页面获取的,可以把这行代码整理下,整理如下

l[_0x1vk[7]][_0x1vk[164]]((0,i)(), r[_0x1vk[104]])
l[_0x1vk[7]][_0x1vk[164]](i(), r[_0x1vk[104]])

这样就稍微清楚些, l[_0x1vk[7]][_0x1vk[164]] 这个函数主要有两个参数,第一个是 i(),第二个是 r[_0x1vk[104]](也就是sessionId),那么先看下 i()是什么,老样子,在控制台打印输出下即可

接着进入加密函数看下

e = e[_0x1vk[388]](_0x1vk[23])[_0x1vk[745]](function(t, e, n) {return n % 2 == 0 ? t + _0x1vk[23] : t + e;
}, _0x1vk[23])

e 是对传入的 sessionId 做了一些处理,比如 9d811d9936354dcf90c2410390f7a5e1 处理后变成了 d1d965df02130751

e = r[_0x1vk[683]](e)

ee 进行了处理又重新赋值给了 e那么 e 就是 AES 的 key

t = _0x1vk[70] == typeof t ? t : JSON[_0x1vk[720]](t)

t 把 第一个参数转换成字符串

t = s[_0x1vk[746]](t, e, {iv: e,mode: u[_0x1vk[747]][_0x1vk[748]],padding: f
}),

AES 对象,声明了 ivkey ,两者一样,modeCBCpaddingPkcs7

e = o[_0x1vk[720]](t[_0x1vk[749]])

对第一个参数进行加密

encodeURIComponent)(e)

对加密后的内容再次进行 URL 编码,到此 dInfo 参数处理完成,然后自己使用库进行 AES 加密即可,使用 Python 实现并请求接口返回数据如下

发现返回后的数据是加密的,使用 AES 解密即可

getInfoTp 接口

请求参数

sessionId: 98533e7b1323471c82f42bda694af2aa 同上
responseId: b0f1474ffe8a41a8bbe225f9daa22e23 接口1返回的
dInfo: 9bGgD6bvcFdJCXEikdLVj48M39SK6%2FI%2FsZwk1iqjrY5Ky%2BtqN7Pk%2BsHpRLRQxuNk...省略
language: zh-CN 固定
data: IsRd8Fl22naf8FS6...省略

请求响应

{"code":0,"data":{"ischange":false,"status":1},"message":"校验失败"
}

dInfo 与上面接口 1 的处理方式一样

这里主要看下 t ,打断点依次调用栈往上找, 找到了下图位置

熟悉的配方 AES,看下都加密了什么内容

c[_0xw19[162]](r[_0xw19[7]][_0xw19[164]](e, c[_0xw19[25]][_0xw19[104]]));

e 为轨迹相关的数据,c[_0xw19[25]][_0xw19[104]])sessionId,下面是 e 的内容,包含了一个 x坐标track轨迹p坐标

'{"x":77,"track":"16,22,1|17,22,17|18,22,22|19,22,29|20,22,34|21,22,37|22,22,42|23,22,46|24,22,51|25,22,53|26,22,58|27,22,62|27,23,64|28,23,66|29,23,68|30,23,72|31,23,76|32,23,80|33,23,85|34,23,88|35,23,91|36,23,98|37,23,103|38,23,107|39,23,109|40,23,110|41,23,112|42,23,113|43,23,116|44,24,119|45,24,124|46,24,124|47,24,128|48,24,133|49,24,134|50,24,135|51,24,138|52,24,141|53,24,144|54,24,147|55,24,149|56,24,153|57,24,158|58,24,159|59,24,164|60,24,167|61,24,172|62,24,175|63,24,179|64,24,183|65,24,187|66,24,189|67,24,194|68,24,198|69,24,202|70,24,209|71,24,211|72,24,220|73,24,225|74,24,231|75,24,231|76,24,236|77,24,245|78,24,254|79,24,256|80,24,263|81,24,271|82,24,277|83,24,280|84,24,287|85,24,293|86,24,298|87,24,301|88,24,307|89,24,313|90,24,319|91,24,323|92,24,333|93,24,353|93,24,448|","p":[0,0]}'

最终结果

代码 GitHub 地址:关注【趣码周】公众号获取


微信公众号:【趣码周

[JS逆向案例]安居客滑块分析相关推荐

  1. JS逆向-韵达快递滑块分析

    嗯,我们今天我们要分析的是一个滑块案例,简单的记录下,确实挺简单的. 链接地址:http://ydgw.yundasys.com:31620/view/zxfuwu/sfastgood.html 这是 ...

  2. js逆向案例-某数美

    目录 一.案例分析 二.fveify校验分析-滑块/点选 1.滑块 2.点选 三.动态的js参数名以及密钥获得方式 四.DES/滑块缺口/轨迹xyt代码 一.案例分析 点击查看案例网址 如图regis ...

  3. Js逆向教程17-极验滑块 实现加密算法的逻辑

    Js逆向教程17-极验滑块 实现加密算法的逻辑 还是和上节课一样,针对这个网址 https://www.geetest.com/demo/slide-float.html 一.加密算法的结果查看 计算 ...

  4. Python爬虫之Js逆向案例(2)-某乎搜索

    Python爬虫之Js逆向案例(2)-知乎搜索 声明:某乎加密逆向分析仅用于研究和学习 大家好,今天继续分享关于某乎关键词搜索接口为案例的Js逆向实战.如果你是一名新手,而且还没有来得及看上一篇< ...

  5. Python爬虫之Js逆向案例(6)-某道翻译

    Python爬虫之Js逆向案例(6)-有道翻译 声明:某道翻译加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,距离上次分享js逆向案例已经有一个月了,在这期间每次在快要揭秘出来时.整理文章 ...

  6. Python爬虫之Js逆向案例(8)-某乎x-zst-81之webpack

    声明:某乎加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,相信各位童鞋通过上期<Python爬虫之Js逆向案例(7)-知hu最新x-zse-96之rpc方案>这篇文章了解了什么 ...

  7. JS逆向案例文章推荐

    1.JS逆向语法学习分享 2.JS逆向案例 阿J的CSDN 成功你要成仁啊的CSDN mkdir700的CSDN 渔滒的CSDN 咸鱼学python 白白嫩嫩的简书 考古学家的CSDN 太阳花田向日葵 ...

  8. 安居客爬虫+分析+回归

    安居客爬虫+分析+回归 工具:Pycharm,Win10,Python3.6.4 这次我们要做的是安居客西安地区房源爬虫,然后数据分析,并做一个简单的回归分析. 我们之前的爬虫和简单的数据分析已经说了 ...

  9. 凡科网JS逆向后跳出的滑块验证(base64图片解码之后的破解滑块验证)

    目录 1.前提和大概思路概述 2. 转换思路selenium和验证滑块图片的获取处理 3.总结 1.前提和大概思路概述 只是学习的途中有一些新的发现,分享给大家,希望对你们有帮助. 凡科网的JS逆向的 ...

最新文章

  1. asp.net mvc jqgrid 同一个页面查询不同的表,jqgrid显示不同表的表头和数据并且分页...
  2. 第二章:Android游戏开发之前台渲染
  3. Hibernate连接数据库
  4. 【HDU - 2612】Find a way(bfs)
  5. gps test free android,GPSTest | F-Droid - Free and Open Source Android App Repository
  6. Mysql 常用show命令
  7. 大数据之-Hadoop3.x_MapReduce_outputformat案例需求分析---大数据之hadoop3.x工作笔记0121
  8. 用户登入验证码代码示例
  9. jsp 文件使用 include指令 导入 jspf 分析,及导入jspf 文件后出现乱码问题
  10. GCD and LCM HDU 4497 数论
  11. KPI and evaluation decouple verification
  12. redirect_uri域名与后台配置不一致
  13. c语言设计一个语音识别程序,用 C# 开发自己的语音识别程序
  14. 车载蓝牙通话支持电话本PBAP功能的说明
  15. 1021.Deepest Root
  16. vue3项目源码汇集
  17. EXCELL XLToolbox科研作图插件
  18. LeetCode 力扣C++题解 575. 分糖果
  19. 【JZOJ4597】现世斩
  20. vue3 Composition ApI总结

热门文章

  1. WorkNC批处理功能使人机结合——批量计算工作目录应用
  2. 蓝牙适配器(Bluetooth)
  3. iOS 利用余弦函数实现卡片浏览工具
  4. 苹果怎么办到?AI技术让HomePod语音助理Siri听到
  5. linux以太网(二)
  6. 100个人回答五道题
  7. UCC28951QPWRQ1 IC REG CTRLR 24TSSOP 稳压器
  8. 一、Sprig MVC简介
  9. Linux--存储结构与磁盘划分
  10. 明天就是立春果盛建议晚睡早起防寒保暖