爬虫逆向实战(三)--天某云登录
一、数据接口分析
主页地址:天某云
1、抓包
通过抓包可以发现登录接口是account/login

2、判断是否有加密参数
- 请求参数是否加密?
通过“载荷”模块可以发现password、comParam_signature、comParam_seqCode是加密的

- 请求头是否加密?
无 - cookie是否加密?
无 - 响应数据是否加密?
无
二、加密位置定位
1、password
(1)查看启动器
查看启动器发现里面包含异步,所以无法正确找到加密位置
(2)搜索关键字
搜索关键字password:发现有一处位置类似加密位置

在此处打上断点,再次点击登录,返现可以断住,并且a.value是明文,断点的一行是加密的,所以可以断定密码是在此处加密的

2、comParam_signature和comParam_seqCode
直接搜索comParam_signature可以发现只有一处位置有,并且是在请求拦截器中

在此处打断点,然后点击登录,发现可以断住,并且生成方法在这一行上方

三、扣js代码
将上方找到的加密位置代码扣出,缺啥补啥即可
源代码:
var CryptoJS = require('crypto-js')function desEncrypt(text, n) {var key = CryptoJS.enc.Utf8.parse(n),srcs = CryptoJS.enc.Utf8.parse(text),// CBC 加密模式,Pkcs7 填充方式encrypted = CryptoJS.TripleDES.encrypt(srcs, key, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return encrypted.toString();
}function password_g() {var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";return e.replace(/\s+/g, "")
}function password_f(e) {var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};if (e && "string" === typeof e) {var t = n.text || "0", r = n.length || 24;if (e.length < r)for (var a = e.length; a < r; a++)e += t;elsee = e.substring(0, r);return e}
}function param_k() {var e, n, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 32,r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 16,a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), o = [];if (r = r || a.length,t)for (e = 0; e < t; e++)o[e] = a[0 | Math.random() * r];elsefor (o[8] = o[13] = o[18] = o[23] = "-",o[14] = "4",e = 0; e < 36; e++)o[e] || (n = 0 | 16 * Math.random(),o[e] = a[19 === e ? 3 & n | 8 : n]);return o.join("")
}function i(t, e) {var n = (65535 & t) + (65535 & e), r = (t >> 16) + (e >> 16) + (n >> 16);return r << 16 | 65535 & n
}function a(t, e) {return t << e | t >>> 32 - e
}function c(t, e, n, r, o, c) {return i(a(i(i(e, t), i(r, c)), o), n)
}function u(t, e, n, r, o, i, a) {return c(e & n | ~e & r, t, e, o, i, a)
}function s(t, e, n, r, o, i, a) {return c(e & r | n & ~r, t, e, o, i, a)
}function f(t, e, n, r, o, i, a) {return c(e ^ n ^ r, t, e, o, i, a)
}function l(t, e, n, r, o, i, a) {return c(n ^ (e | ~r), t, e, o, i, a)
}function param_p(t, e) {var n, r, o, a, c;t[e >> 5] |= 128 << e % 32,t[14 + (e + 64 >>> 9 << 4)] = e;var p = 1732584193, h = -271733879, d = -1732584194, v = 271733878;for (n = 0; n < t.length; n += 16)r = p,o = h,a = d,c = v,p = u(p, h, d, v, t[n], 7, -680876936),v = u(v, p, h, d, t[n + 1], 12, -389564586),d = u(d, v, p, h, t[n + 2], 17, 606105819),h = u(h, d, v, p, t[n + 3], 22, -1044525330),p = u(p, h, d, v, t[n + 4], 7, -176418897),v = u(v, p, h, d, t[n + 5], 12, 1200080426),d = u(d, v, p, h, t[n + 6], 17, -1473231341),h = u(h, d, v, p, t[n + 7], 22, -45705983),p = u(p, h, d, v, t[n + 8], 7, 1770035416),v = u(v, p, h, d, t[n + 9], 12, -1958414417),d = u(d, v, p, h, t[n + 10], 17, -42063),h = u(h, d, v, p, t[n + 11], 22, -1990404162),p = u(p, h, d, v, t[n + 12], 7, 1804603682),v = u(v, p, h, d, t[n + 13], 12, -40341101),d = u(d, v, p, h, t[n + 14], 17, -1502002290),h = u(h, d, v, p, t[n + 15], 22, 1236535329),p = s(p, h, d, v, t[n + 1], 5, -165796510),v = s(v, p, h, d, t[n + 6], 9, -1069501632),d = s(d, v, p, h, t[n + 11], 14, 643717713),h = s(h, d, v, p, t[n], 20, -373897302),p = s(p, h, d, v, t[n + 5], 5, -701558691),v = s(v, p, h, d, t[n + 10], 9, 38016083),d = s(d, v, p, h, t[n + 15], 14, -660478335),h = s(h, d, v, p, t[n + 4], 20, -405537848),p = s(p, h, d, v, t[n + 9], 5, 568446438),v = s(v, p, h, d, t[n + 14], 9, -1019803690),d = s(d, v, p, h, t[n + 3], 14, -187363961),h = s(h, d, v, p, t[n + 8], 20, 1163531501),p = s(p, h, d, v, t[n + 13], 5, -1444681467),v = s(v, p, h, d, t[n + 2], 9, -51403784),d = s(d, v, p, h, t[n + 7], 14, 1735328473),h = s(h, d, v, p, t[n + 12], 20, -1926607734),p = f(p, h, d, v, t[n + 5], 4, -378558),v = f(v, p, h, d, t[n + 8], 11, -2022574463),d = f(d, v, p, h, t[n + 11], 16, 1839030562),h = f(h, d, v, p, t[n + 14], 23, -35309556),p = f(p, h, d, v, t[n + 1], 4, -1530992060),v = f(v, p, h, d, t[n + 4], 11, 1272893353),d = f(d, v, p, h, t[n + 7], 16, -155497632),h = f(h, d, v, p, t[n + 10], 23, -1094730640),p = f(p, h, d, v, t[n + 13], 4, 681279174),v = f(v, p, h, d, t[n], 11, -358537222),d = f(d, v, p, h, t[n + 3], 16, -722521979),h = f(h, d, v, p, t[n + 6], 23, 76029189),p = f(p, h, d, v, t[n + 9], 4, -640364487),v = f(v, p, h, d, t[n + 12], 11, -421815835),d = f(d, v, p, h, t[n + 15], 16, 530742520),h = f(h, d, v, p, t[n + 2], 23, -995338651),p = l(p, h, d, v, t[n], 6, -198630844),v = l(v, p, h, d, t[n + 7], 10, 1126891415),d = l(d, v, p, h, t[n + 14], 15, -1416354905),h = l(h, d, v, p, t[n + 5], 21, -57434055),p = l(p, h, d, v, t[n + 12], 6, 1700485571),v = l(v, p, h, d, t[n + 3], 10, -1894986606),d = l(d, v, p, h, t[n + 10], 15, -1051523),h = l(h, d, v, p, t[n + 1], 21, -2054922799),p = l(p, h, d, v, t[n + 8], 6, 1873313359),v = l(v, p, h, d, t[n + 15], 10, -30611744),d = l(d, v, p, h, t[n + 6], 15, -1560198380),h = l(h, d, v, p, t[n + 13], 21, 1309151649),p = l(p, h, d, v, t[n + 4], 6, -145523070),v = l(v, p, h, d, t[n + 11], 10, -1120210379),d = l(d, v, p, h, t[n + 2], 15, 718787259),h = l(h, d, v, p, t[n + 9], 21, -343485551),p = i(p, r),h = i(h, o),d = i(d, a),v = i(v, c);return [p, h, d, v]
}function param_d(t) {var e, n = [];for (n[(t.length >> 2) - 1] = void 0,e = 0; e < n.length; e += 1)n[e] = 0;var r = 8 * t.length;for (e = 0; e < r; e += 8)n[e >> 5] |= (255 & t.charCodeAt(e / 8)) << e % 32;return n
}function param_h(t) {var e, n = "", r = 32 * t.length;for (e = 0; e < r; e += 8)n += String.fromCharCode(t[e >> 5] >>> e % 32 & 255);return n
}function param_v(t) {return param_h(param_p(param_d(t), 8 * t.length))
}function param_b(t) {return unescape(encodeURIComponent(t))
}function param_m(t) {return param_v(param_b(t))
}function param_g(t) {var e, n, r = "0123456789abcdef", o = "";for (n = 0; n < t.length; n += 1)e = t.charCodeAt(n),o += r.charAt(e >>> 4 & 15) + r.charAt(15 & e);return o
}function param_(t) {return param_g(param_m(t))
}function param_c(t, e, n) {return param_(t)
}function get_password(account, password) {return encodeURI(desEncrypt(password, password_f(password_g(account))))
}function get_params() {var n = (new Date).getTime() - 1884var t = "s54zv9bm1vd5czfujy6nnuxj1l4g2ny6"var r = param_k()var a = param_c(n + r + param_c(r + t + n));return {'referrer': 'wap','mainVersion': 300031500,'comParam_curTime': n,'comParam_seqCode': r,'comParam_signature': a,'isCheck': true,'locale': 'zh-cn',}
}相关文章:
爬虫逆向实战(三)--天某云登录
一、数据接口分析 主页地址:天某云 1、抓包 通过抓包可以发现登录接口是account/login 2、判断是否有加密参数 请求参数是否加密? 通过“载荷”模块可以发现password、comParam_signature、comParam_seqCode是加密的 请求头是否加密? 无…...
不要过于迷恋软件架构,要重视如何设计根据简单和清晰的设计
1. 设计一个计算机系统的目标应该是简单性 。 系统越简单,理解起来就越简单,找到问题就越简单,实现它就越简单。描述的语言越清晰,设计就越容易理解。 干净的设计类似于干净的代码:它易于阅读且易于理解。 2. 如何编…...
Grafana监控 Redis Cluster
Grafana监控 Redis Cluster 主要是使用grafana来实现监控,grafana可以对接多种数据源,在官网中可以找到Redis数据源,需要安装redis data source插件。当然也可以利用Prometheus来做数据源,下面分别记录一下这两种数据源的安装配置…...
k8s 认证和权限控制
k8s 的认证机制是啥? 说到 k8s 的认证机制,其实之前咋那么也有提到过 ServiceAccouont ,以及相应的 token ,证书 crt,和基于 HTTP 的认证等等 k8s 会使用如上几种方式来获取客户端身份信息,不限于上面几种…...
性能优化的重要性
性能优化的重要性 性能优化的重要性摘要引言注意事项代码示例及注释性能优化的重要性 性能优化的重要性在 Java 中的体现响应速度资源利用效率扩展性与可维护性并发性能合理的锁策略线程安全的数据结构并发工具类的应用避免竞态条件和死锁 总结代码示例 博主 默语带您 Go to Ne…...
Leetcode No.53 Maximum Subarray
参考资料: 考点:子串 & 动态规划 & [题干] Input: nums [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: The subarray [4,-1,2,1] has the largest sum 6.1. 心路历程 这道题非常经典,蕴含的思想也是精巧无比。 2. 正解 简单来说官…...
手机出现 不读卡 / 无信号时应该怎么办?
当手机屏幕亮起,一般在屏幕最上方都会有代表手机卡状态的显示,其中网络信号和读卡状态的标识,依旧有很多人分不太清,更不清楚改怎么办了。 1、当我们的手机里有两张卡时,则会有两个信号显示 2、信号状态一般是由短到…...
Linux 内核模块运行机制(10/11)
Linux 内核实现了一个比较酷的功能:支持模块的动态加载和运行。如果你实现了一个内核模块并打算运行它,你并不需要重启系统,直接使用 insmod 命令加载即可,这个模块就像补丁一样打进了 Linux 操作系统,并可以正常运行。…...
MySQL数据库-字符串函数详解
前言 MySQL数据库提供了多种不同类型的函数,用于处理字符串、日期、数值等数据类型,以及实现条件、聚合等操作,下面我们主要介绍字符串函数 CONCAT() 函数 CONCAT() 可用于将多个字符串连接在一起。 示例: SELECT CONCAT(Hell…...
半导体退火那些事(3)
4.半导体退火设备 双腔全自动兼容6-8寸快速退火炉RTP 产地:中国 型号: S803 特点: 室温到1250C,应用于SiC,GaN等第三代半导体领域 简介 (Description) S803系列自动快速退火炉,内置Robot可以自动取放片,适用于最大8英寸 (单片200m…...
1281. 整数的各位积和之差
诸神缄默不语-个人CSDN博文目录 力扣刷题笔记 文章目录 1. 简单粗暴的遍历2. 其实也是遍历,但是用Python内置函数只用写一行 1. 简单粗暴的遍历 Python版: class Solution:def subtractProductAndSum(self, n: int) -> int:he0ji1while n>1:last…...
如何使用Vue和C++实现OJ《从零开始打造 Online Judge》
课程简介 课程链接:https://www.lanqiao.cn/courses/20638 邀请码:x8pGd60V 本课程采用前后端分离架构,基于 Vue.js 和 C 技术,从零开始打造 Online Judge。 课程介绍 OJ 是 Online Judge 系统的简称,用来在线检测…...
在Spring Boot和Vue中实现请求过滤器以验证请求头中的Token
在Spring Boot应用程序中创建一个过滤器类,用于处理请求: Component public class AuthenticationFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException,…...
ThreeJS——在3D地球上标记中国地图板块
Threejs3D地球标记中国地图位置 先看效果 地球预览视频效果 用到的库 TweenJS (动画库)用来做相机转场的动画Jquery(这里只用到一个 each 循环方法,可以使用 js 去写)ThreeJS (3D 地球制作)100000.json(全国城市经纬度)d3.v6.js用来设置平面转3D效果(本来考虑做成…...
第2章 性能测量
理解应用程序性能的第一步是学会对它进行测量。 与绝大多数功能问题相比,性能问题通常很难跟踪和复现。 任何关注过性能评估的人可能都知道公允地进行性能测量并从中得到准确结论是多么困难。 因为在测量中存在误差,性能分析通常需要统计方法进行处理…...
未来,运营的重要性大于产品?
微博上看到某产品大V的一个观点,说在未来,产品运营的重要性会大过产品经理,还挺认同的,谈谈我的想法。 这个观点的核心依据是,目前没有新的产品形态,各种产品解决方案都是标准化的,产品由开疆辟…...
paddle ocr框架识别数字问题和解决方案
识别出的字符串重复 情况1:检测错误,同一个字符串被两次检测到 比如 “12 方案 ” 被识别成:“12” “2方案”,这种可以通过x坐标交叉并且第一个结果最后一个字符与第二个结果第一个字符相同判断 情况2: 识别错误&am…...
构建高性能的MongoDB数据迁移工具:Java的开发实践
随着大数据时代的到来,数据迁移成为许多企业和组织必须面对的挑战之一。作为一种非关系型数据库,MongoDB在应用开发中得到了广泛的应用。为了满足数据迁移的需求,我们需要一个高性能、稳定可靠的MongoDB数据迁移工具。下面将分享使用Java开发…...
2023年国赛数学建模思路 - 案例:最短时间生产计划安排
文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 最短时…...
1572. 矩阵对角线元素的和
题目描述: 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例: 解题思路: 同时求对角线和副对角线上元素的和再减去重合的元素 相关代码…...
Path of Building终极指南:5分钟掌握流放之路最强Build规划工具
Path of Building终极指南:5分钟掌握流放之路最强Build规划工具 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding Path of Building(简称PoB&#x…...
vLLM-v0.17.1实操手册:Prometheus监控指标接入与告警配置
vLLM-v0.17.1实操手册:Prometheus监控指标接入与告警配置 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)开发,现已发展为社区驱动的开源项目。这个框…...
AI神器10秒搞定网申,求职效率翻倍
投简历填表单填到崩溃?这个AI神器帮你10秒搞定网申,海投效率直接拉满! 秋招春招跑过招聘季的朋友,一定都懂这种窒息感: 好不容易筛好了目标公司,点开招聘官网,迎面而来就是几十项的简历表单。姓名、电话、邮箱、教育经历从高中填到大学、实习经历要写清每段的起止时间…...
Qwen3-Reranker-8B实战教程:为LlamaIndex添加Qwen3重排序插件
Qwen3-Reranker-8B实战教程:为LlamaIndex添加Qwen3重排序插件 1. 为什么需要重排序? 如果你用过RAG(检索增强生成)系统,可能会遇到一个常见问题:检索出来的文档,排在最前面的不一定是最相关的…...
WarcraftHelper终极指南:让魔兽争霸3在现代系统完美重生
WarcraftHelper终极指南:让魔兽争霸3在现代系统完美重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的各…...
从零开始学习C++ -- 基础知识
C入门基础1.C的第一个程序2.命名空间2.1 namespace的价值2.2 namespace的定义2.3命名空间使用3.C输入&输出4.缺省参数5.函数重载6.引用6.1引用的概念和定义6.2引用的特性6.3引用的使用6.4const引用6.5指针和引用的关系7.inline8.nullptr1.C的第一个程序 #include <iost…...
Connect to Oracle Database with JDBC Driver
1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...
告别重复造轮子,用快马为openclaw项目生成高效通用解析器提升开发效率
最近在维护一个叫openclaw的开源爬虫项目时,发现每次遇到新网站都要重写解析逻辑,不仅效率低,还容易出错。于是尝试用InsCode(快马)平台生成通用解析器模块,效果出乎意料地好。 痛点与解决方案 重复劳动问题 以前每爬一个新网站&…...
滞回比较器设计实战:从理论到参数优化
1. 滞回比较器基础:从门铃到航天器的抗噪神器 第一次接触滞回比较器是在大学电子设计课上,当时教授用一个生动的例子开场:"想象你家的门铃——如果它对任何风吹草动都响个不停,你会疯掉;但如果连用力敲门都没反应…...
nlp_gte_sentence-embedding_chinese-large在软件测试用例生成中的应用
nlp_gte_sentence-embedding_chinese-large在软件测试用例生成中的应用 1. 引言 软件测试是确保产品质量的关键环节,但传统的手工编写测试用例方式往往效率低下且容易遗漏重要场景。测试工程师需要反复阅读需求文档,手动提取测试要点,这个过…...
