某手某聚星登录算法分析

news2024/11/15 7:06:08

KS某聚星登录算法分析

  • 某手某聚星登录算法分析
    • 第一步:抓包-登录
    • 第二步:定位加密入口
    • 第三步:分析加密算法
    • 第四步:算法实现

某手某聚星登录算法分析

在这篇文章中,我们将详细解析某手某聚星的登录算法,涵盖从抓包到定位加密入口、再到分析加密算法的每一步,最后通过Python实现整个加密过程。

第一步:抓包-登录

在这里插入图片描述
在抓包过程中,我们捕获到了如下请求,需重点关注的是 password 和 account 的加密算法。

第二步:定位加密入口

在这里插入图片描述
在这里插入图片描述
通过搜索 password 和 account,发现结果较多,改为直接搜索URL请求中的关键词 /loginAccount/v2。
在这里插入图片描述
这里搜索结果就1个
在这里插入图片描述
进去看看
在这里插入图片描述看到在Fr函数中,看到熟悉的account和password,这个函数接受一个对象e作为参数,包含了用户的登录信息,包括phone、account、countryCode、password和captchaToken,直接下断点调试。
在这里插入图片描述
果然断下来了,为了理解Fr函数的完整功能,我们需要深入分析Hn函数
在这里插入图片描述
这个调用了Un和Fn函数,通过代码我可以看到:
在这里插入图片描述
在这里插入图片描述

调用Un函数:生成当前的时间戳,用于标记请求的时间。
调用Fn函数:生成一个长度为10的随机字符串,作为nonce,增加请求的唯一性和安全性。
在这里插入图片描述
通过调试我们发现调用Zn对象的encrypt方法分别对密码、账号、手机号和邮箱进行加密处理,至此,加密的核心入口找到了。

第三步:分析加密算法

继续深入分析Zn对象的encrypt方法
在这里插入图片描述
e.password是待加密的密码
在这里插入图片描述
n是包含时间戳和nonce的选项

公钥设置

var t = new Dn;
return t.setPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjWfCb9IR5pMheXLUHCQko8VddGGDZ2jN0Edj/yQoXl91plE6r/muh1oKeuWtSpDwqDDAO5s3lHYfPFb45eWTky0a4ijOBlGbls5WJBQqoqD3gYTPcZyc1KFmn9wRTbNLMFhWN2kCHzo6YOO9kRcCQdAuXaj2sxFrirdglL8v7I0gp0n2ME+3V4Jwiv86cL24t6DfzxHqW/CO7Q/7P6bE5xVZHkuup7J1vXrjewN0r9nXovmahYlLIop4QuWC6zDVHDSTk/SXifHJBidOgEWHKgQSC5FS3xism5bth8XKWu4WX/z2pND4vA4STNE9LwULQPX2MJFjqUdYG7fBePZnIwIDAQAB")

  • t 是一个新的 Dn 实例,它可能是一个加密库的实例对象。
  • 使用 t.setPublicKey 设置 RSA 公钥,这个公钥用于加密敏感信息。

加密方法 encrypt
encrypt 方法负责对输入数据进行加密:

encrypt: function(e, n) {
    var r = n && n.format || "hex",
        o = e;

  • e 是待加密的字符串。
  • n 是一个包含加密选项的对象,默认格式为 hex。

混合加密
如果指定 isMix 选项,则进行混合加密:

n && n.isMix && (o = function(e, t) {
    var n = t && t.timestamp || Un(),
        r = t && t.nonce || Fn(),
        o = [n, r, e].join("_");
    return {
        timestamp: n,
        nonce: r,
        mixedText: o
    }
}(e, n).mixedText);

  • 生成时间戳(Un)和随机数(Fn)。
  • 将时间戳、随机数和待加密字符串拼接在一起。

RSA 加密

var i = t.encrypt(o),
    a = e,
    s = !0;

  • 使用 t.encrypt 方法对字符串进行 RSA 加密。
  • 如果加密成功,i 将是加密后的字符串。

格式转换,根据选项转换加密后的字符串格式:

return i && (a = function(e, t) {
    switch (t) {
        case "base64":
            return e;
        case "hex":
            return function(e) {
                var t, n = "", r = 0, o = 0;
                for (t = 0; t < e.length && "=" != e.charAt(t); ++t) {
                    var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t));
                    i < 0 || (0 == r ? (n += jn(i >> 2),
                        o = 3 & i,
                        r = 1) : 1 == r ? (n += jn(o << 2 | i >> 4),
                        o = 15 & i,
                        r = 2) : 2 == r ? (n += jn(o),
                        n += jn(i >> 2),
                        o = 3 & i,
                        r = 3) : (n += jn(o << 2 | i >> 4),
                        n += jn(15 & i),
                        r = 0))
                }
                return 1 == r && (n += jn(o << 2)),
                    n
            }(e);
        default:
            return t
    }
}(i, r),
    s = !1),
    {
        encryptText: a,
        ignoreEncrypt: s
    }

详细总结

  1. 对象初始化与公钥设置:

    Zn 对象初始化时,通过 t.setPublicKey 设置了 RSA 公钥,用于后续的加密操作。

  2. 加密方法 encrypt:

    接受两个参数:待加密字符串 e 和加密选项 n。
    默认格式为 hex,但支持 base64 格式。
    支持混合加密(将时间戳和随机数与原始字符串拼接后再加密)。

  3. 混合加密:
    如果启用 isMix 选项,生成时间戳和随机数,并将它们与原始字符串拼接,然后进行加密。

  4. RSA 加密:
    使用 t.encrypt 方法对字符串进行 RSA 加密。

  5. 格式转换:
    根据选项将加密结果转换为 hex 或 base64 格式。

  6. 返回值:
    encryptText:转换后的加密文本。
    ignoreEncrypt:指示是否忽略加密(在混合加密情况下为 false)。

第四步:算法实现

下面通过python实现的算法结果:

在这里插入图片描述

在这里插入图片描述

这就是完整的分析过程,通过详细的步骤,我们深入理解并实现了该登录算法的加密机制。希望对你有所帮助

感谢阅读本文,如有疑问或建议,请在评论区留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv,连续拍摄多张图像求平均值减少噪点

对于照度低或者相机质量差造成的密集的随机小噪点&#xff0c;可以通过拍摄多张图像求平均值的方法来减少噪点&#xff0c;获得较为清晰的画面。 import cv2 import numpy as npclass FilterCamera:def __init__(self, cap, in_frame, num):self.cap cap # 定义的相机self.n…

n6.Nginx 压缩功能

Nginx 压缩功能 Nginx支持对指定类型的文件进行压缩然后再传输给客户端&#xff0c;而且压缩还可以设置压缩比例&#xff0c;压缩后的 文件大小将比源文件显著变小&#xff0c;这样有助于降低出口带宽的利用率&#xff0c;降低企业的IT支出&#xff0c;不过会占用相 应的CPU资…

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”&#xff0c;核心场景的界面响应耗时被拉的越来越长&#xff0c;也让性能优化工作提上了日程&#xff0c;先说结论&#xff0c;经过这一波前后端齐心协力的优化努力&#xff0c;两个核心界面90分位的数据&#xff0c;FCP平…

PDF编辑器的秘密:解锁文档处理的无限可能

PDF这个文件因其跨平台兼容性、保持文档格式不变以及易于传输的特性&#xff0c;成为了工作、学习及日常生活中不可或缺的一部分。但是PDF编辑器可不多&#xff0c;我这次就介绍下我用过好用的PDF编辑器吧。 1福昕PDF编辑器 这个软件功能全面&#xff0c;所以软件本身的安装包…

服务攻防-中间件安全(漏洞复现)

一.中间件-IIS-短文件&解析&蓝屏 IIS现在用的也少了&#xff0c;漏洞也基本没啥用 1、短文件&#xff1a;信息收集 2、文件解析&#xff1a;还有点用 3、HTTP.SYS&#xff1a;蓝屏崩溃 没有和权限挂钩 4、CVE-2017-7269 条件过老 windows 2003上面的漏洞 二.中…

游戏常用运行库安装包 Game Runtime Libraries Package

游戏常用运行库安装包&#xff08;Game Runtime Libraries Package&#xff09;是一个整合了多种游戏所需运行库的安装程序&#xff0c;旨在帮助玩家和开发者解决游戏无法正常运行的问题。该安装包支持从Windows XP到Windows 11的系统&#xff0c;并且具备自动检测系统并推荐合…

threejs零基础搭建3D可视化汽车展厅

前置知识(最下面有完整代码) 每个代码都有注释,零基础也能看懂 中文官方文档教程 创建项目 创建空文件夹 执行如下命令初始化package.json文件 npm init -y安装threejs包 yarn add three安装tween.js动画库,用于做动画 tweenjs文档 yarn add @tweenjs/tween.js安装gui调…

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应 以管理员身份运行 Anaconda Prompt conda update -n root conda conda update --all如果执行完以上步骤 碰到 AttributeError: module ‘pkgutil’ has no attribute ‘ImpImporter’. Did you mean: ‘zipimporter…

python3.10.4——CentOS7安装步骤

目录 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 3.在python官网下载linux系统安装包 4.解析、编译安装python3.10.4 5.创建软链接 6.修改yum相关配置 7.重新检查python版本号 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 yum install wget zlib-devel bz…

因果推断 | 双重机器学习(DML)算法原理和实例应用

文章目录 1 引言2 DML算法原理2.1 问题阐述2.2 DML算法 3 DML代码实现3.1 策略变量为0/1变量3.2 策略变量为连续变量 4 总结5 相关阅读 1 引言 小伙伴们&#xff0c;好久不见呀。 距离上次更新已经过去了一个半月&#xff0c;上次发文章时还信誓旦旦地表达自己后续目标是3周更…

HOST处理器访问PCI设备

HOST处理器对PCI设备的数据访问主要包含两方面内容&#xff0c;一方面是处理器向PCI设备发起存储器和I/O读写请求&#xff1b;另一方面是处理器对PCI设备进行配置读写。 在PCI设备的配置空间中&#xff0c;共有6个BAR寄存器。每一个BAR寄存器都与PCI设备使用的一组PCI总线地址…

RK3568笔记四十一:DHT11驱动开发测试

若该文为原创文章&#xff0c;转载请注明原文出处。 记录开发单总线&#xff0c;读取DHT11温湿度 一、DHT11介绍 DHT11是串行接口&#xff08;单线双向&#xff09;DATA 用于微处理器与 DHT11之间的通讯和同步&#xff0c;采用单总线数据格式&#xff0c;一次通讯时间4ms左右…

无刷电机控制之——帕克变换

前言 克拉克逆变换请参考如下链接 等幅值变换与克拉克逆变换 一、FOC算法流程图 二、帕克变换概念 1、我们需要知道二维坐标系中的I α \alpha α和I β \beta β&#xff0c;这两个变量的变化规律&#xff0c;通俗来讲就是要知道这两个变量是谁输入的、谁控制的&#xff0c…

pytorch学习(十六)conda和pytorch的安装

1.安装anaconda 1.1 首先下载安装包 1&#xff09;进入anaconda官网 Anaconda | The Operating System for AI 2&#xff09;注册一下 3&#xff09;下载 4&#xff09;一直点直到安装完 5&#xff09;配置环境变量 在path路径中加入 Anaconda安装路径 Anaconda安装路径\S…

Redis高级篇—分布式缓存

目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…

zabbix监控Windows机器进程数量

zabbix监控Windows机器进程数量 文章目录 zabbix监控Windows机器进程数量背景前提条件目的实施 背景 一个windows上的进程总是崩溃&#xff0c;总会出现进程不存在的情况&#xff0c;不能实时去服务器上检查&#xff0c;自己不勤快就要动脑子&#xff0c;让自己变的更懒&#…

Java语言程序设计基础篇_编程练习题*15.9 (使用箭头键画线)

*15.9 (使用箭头键画线) 请编写一个程序&#xff0c;使用箭头键绘制线段。所画的线从面板的中心开始&#xff0c;当敲 击向右、向上、向左或向下的箭头键时&#xff0c;相应地向东、向北、向西或向南方向画线&#xff0c;如图 15-26b所示 代码展示&#xff1a;编程练习题15_9D…

汽车电动空调系统

1.电动空调系统概述 电动汽车制冷空调系统与传统汽车制冷空调系统基本原理一样&#xff0c;区别在于电动汽车空调系统采用电动空调压缩机。电动空调压缩机由驱动电机&#xff0c;压缩机&#xff0c;控制器集成。 电动空调压缩机的驱动电机采用体积小&#xff0c;质量轻&#x…

【线性表】:顺序表里一些主要功能的实现

框架 线性表 是 n 个具有相同特征的数据元素的有限序列 常见的线性表&#xff1a;顺序表、链表、栈、队列… 线性表在逻辑上是线性结构&#xff0c;也就是连续的一条直线 但在物理结构上不一定是连续的&#xff0c;线性表在物理上存储时&#xff0c;通常以数组和链式结构的形式…

数据结构(栈及其实现)

栈 概念与结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。 进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出 LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&…