开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1932|回复: 3
收起左侧

[技术专题] KS某聚星登录算法分析

[复制链接]
结帖率:75% (21/28)
发表于 2024-7-21 23:32:16 | 显示全部楼层 |阅读模式   山东省济宁市
在这篇文章中,我们将详细解析某手某聚星的登录算法,涵盖从抓包到定位加密入口、再到分析加密算法的每一步,最后通过Python实现整个加密过程。

第一步:抓包-登录
1.png
在抓包过程中,我们捕获到了如下请求,需重点关注的是 password 和 account 的加密算法。

第二步:定位加密入口
2-1.png
2-2.png

通过搜索 password 和 account,发现结果较多,改为直接搜索URL请求中的关键词 /loginAccount/v2。

2-3.png
这里搜索结果就1个
2-4.png
进去看看
3-0.png
看到在Fr函数中,看到熟悉的account和password,这个函数接受一个对象e作为参数,包含了用户的登录信息,包括phone、account、countryCode、password和captchaToken,直接下断点调试。
3-1.png


果然断下来了,为了理解Fr函数的完整功能,我们需要深入分析Hn函数
3-2.png
这个调用了Un和Fn函数,通过代码我可以看到:

3-3.png

调用Un函数:生成当前的时间戳,用于标记请求的时间。
调用Fn函数:生成一个长度为10的随机字符串,作为nonce,增加请求的唯一性和安全性。
3-4.png
通过调试我们发现调用Zn对象的encrypt方法分别对密码、账号、手机号和邮箱进行加密处理,至此,加密的核心入口找到了。
3-5.png
第三步:分析加密算法
继续深入分析Zn对象的encrypt方法
4-1.png
e.password是待加密的密码
4-2.png
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
}


详细总结

对象初始化与公钥设置:

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

加密方法 encrypt:

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

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

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

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

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

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




5-001.png

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

评分

参与人数 1好评 +1 精币 +5 收起 理由
外星人群控 + 1 + 5 感谢分享,很给力!~

查看全部评分


结帖率:100% (1/1)

签到天数: 8 天

发表于 2024-8-24 08:30:07 | 显示全部楼层   香港特别行政区*
这个解决了我的燃眉之急。
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2024-8-10 09:14:22 | 显示全部楼层   陕西省渭南市
有没有写快手协议的大佬  加我 1810920691
需要找团队做定制需求,支持平台结算,骗子勿扰,小白勿扰
回复 支持 反对

使用道具 举报

发表于 2024-8-9 08:59:41 | 显示全部楼层   安徽省滁州市
不错不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表