记一次简单的米游社网页端登录逆向

前言

为什么写这个呢? 放在文章最后

开始逆向

抓包

打开米游社官网 原神社区-米游社 直接开始抓包

可以明显的看到目标链接为https://passport-api.miyoushe.com/account/ma-cn-passport/web/loginByPassword

参数分析

有两个参数需要分析,accountpassword

直接搜索password并在可疑部分加上断点

image-20250315202841156

断在了这里,并accountpassword与账号密码对应正确,那就基本找对了,继续走一步

image-20250315203031052

根据函数名推断a.Z.encrypt就是需要找的加密函数

image-20250315203144027

控制台打印一下,更像了,跳到该函数,打上断点

image-20250315203235391

image-20250315203419641

t

1
2
3
4
5
6
7
8
9
10
{
"errorToast": false,
"errorH5log": true,
"errorH5logAdditionalData": {
"account": "11111111111"
},
"headers": {
"x-rpc-source": "v2.webLogin"
}
}

encrypt函数为

image-20250315203927417

跳入this.getKey()函数

image-20250315204725973

很明显就能看到

1
this.key = new ct

初步推断,这就是公钥参数,进入ct函数,打上断点

没断下来,应该是存储在全局变量了,刷新网页,在打着断点的情况下再次点击登录

image-20250315205135654

断下来了,看到了参数n,尚不能确定,跟栈看看

image-20250315205234310

跟栈发现参数n明文存储在js代码中的

1
i.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDDvekdPMHN3AYhm/vktJT+YJr7\ncI5DcsNKqdsx5DZX0gDuWFuIjzdwButrIYPNmRJ1G8ybDIF7oDW2eEpm5sMbL9zs\n9ExXCdvqrn51qELbqj0XxtMTIpaCHFSI50PfPpTFV9Xt/hmyVwokoOXFlAEgCn+Q\nCgGs52bFoYMtyi+xEQIDAQAB")

观察发现存在换行符,推测为公钥,这样,参数差不多逆向完了,完整代码就不放出了

事出有因

为什么我闲的去逆向一个别人早就逆向完了的网站呢(PS:如果还有问题可以按照我的步骤重新逆向米游社)

起因

已经不能说是几天前了,应该是几个月前(该篇文章写于2025年3月15日晚),我发现有人大范围说Yunzai Bot存在盗取米哈游账号的后门

了解得知,是名为TRSS-Plugin的插件存在米游社登录功能,部分代码截图如下

image-20250315210743994

其中的一部分参数导致部分人认为开发者具有盗取账号的能力

我已阅读并了解了TRSS-Plugin远程命令后门,该篇文章仅澄清所谓米游社盗号问题

其中部分谣言如下

image-20250315210420148

image-20250315210509527

image-20250315210557082

image-20250315210622031

image-20250315210635542

在此,需要澄清几个概念,来让ChatGPT解释一下吧

在米游社登录过程中,BEGIN PUBLIC KEY 代表的是 公钥,而不是密码学中的 盐(Salt)。误认为它是盐是对密码学概念的误解。

1. 公钥(Public Key)

  • 这是 非对称加密(如 RSA、ECC)中的一部分,通常用于加密数据或验证签名。
  • 在客户端登录时,公钥用于 加密用户输入的密码,然后再发送给服务器,以避免密码在传输过程中被截获。
  • 公钥是 公开的,就算泄露也不会影响安全性,关键在于私钥的保护。
  • 服务器端使用对应的 私钥(Private Key) 解密数据,并验证用户身份。

2. 盐(Salt)

  • 盐是用于哈希(Hash)密码的额外随机数据,目的是防止彩虹表攻击。
  • 在存储密码时,通常会使用 哈希算法(如 SHA-256、bcrypt) 处理,盐的作用是增加唯一性,即使两个用户的密码相同,加盐后的哈希结果也不同。
  • 盐通常是 随机生成的,而不是固定值,否则容易被攻击。

公钥和盐的区别

对比项公钥(Public Key)盐(Salt)
作用加密数据,保护传输安全增强哈希安全性,防止彩虹表攻击
是否公开公开(仅公钥)私有(但存储在数据库中,与哈希一起使用)
是否用于哈希
是否用于加密
服务器使用用私钥解密数据结合哈希存储用户密码

为什么公钥不是盐,也不会盗取密码?

  • 公钥 不会参与密码哈希,仅用于 加密密码,确保用户输入的密码在网络传输过程中不会被中间人窃取。
  • 服务器只会存储哈希值,而不会直接存储明文密码,即使数据库泄露,攻击者也无法直接获取用户密码。
  • 盐是用于哈希,而公钥是用于加密,两者在作用上完全不同。

所谓的噪声,处理器速度,电压更是无稽之谈,Web端没有权限读取这些信息,更不可能那这些信息去加密了.

在此呼吁

1. 理性思考,避免盲目跟从
在网络上看到某些说法时,不要急于相信或传播,而是要先了解事实并核实信息来源。如果只是因为看到别人说“有问题”就盲目认同,可能会导致误导甚至制造谣言。

2. 了解技术原理,避免误解

  • BEGIN PUBLIC KEY 是公钥的一部分,主要用于加密传输,而不是存储或处理密码。
  • 在密码学中,公钥加密用于保护数据,而不是泄露数据。它的作用是防止密码在网络传输时被窃取,而不是用来“固定盐”或“存储密码”。
  • 真正的密码存储安全性取决于服务器端的哈希与加盐处理,而不是传输时使用的公钥。

3. 质疑之前,请找证据
如果认为某个机制存在问题,应该提供技术性证据,比如代码分析、流量抓包、数据库泄露报告等,而不是单纯凭借“有人说”或主观猜测。
盲目指责开发者可能会引发不必要的恐慌,也会让真正的安全问题被忽略。

4. 避免传播未经证实的信息
在不了解技术背景的情况下,随意传播“某平台会窃取账号”这样的言论,可能会造成误导。如果信息有误,可能会影响他人的判断,甚至损害平台的声誉。

5. 关注真正的账号安全
与其担心不存在的风险,不如加强自身的安全意识
使用独立、强密码,避免多个网站使用相同密码。
开启二步验证(2FA),即使密码泄露也能保护账号。
警惕钓鱼网站,不要轻易输入账号密码到陌生网页。

总之,保持理性,独立思考,质疑要有依据,传播要负责任。
对于任何技术问题,可以讨论,但要基于事实,而不是臆测,更不能以讹传讹,扭曲事实