查看: 595|回复: 30

新版335注册网页SPR6的,可嵌入到战神登录器的按钮上

[复制链接]

531

时沙

0

精华

10

主题

声望: 1068   虚弱: 0

Lv.4(锻造者)

百夫长

祥龙贺岁(尚美制作)炉石

 楼主| 发表于 2026-1-14 13:02:52 | 显示全部楼层 |阅读模式
      最近更换了登录器,自从更新了23年核心的端再也没有搞过专门的注册端口,战神登录器真是好用,但是老战神不支持SPR6加密,新登录器倒是可以支持,但是唯一的缺点,注册时候只能留8位密钥,个人喜欢追求极致,想要注册的时候留有邮箱,似乎他留有两个网页按钮入口,何不做个嵌入式网址(也算不上嵌入,只能说可以通过战神登录器直接跳转),登录器自带的那个不要勾选了(早知道如此就不更新新的战神登录器了我的DKP啊,顺便记录一下过程)

image.jpg
于是说干就干。由于核心是新的SPR6加密的,表里面有salt列和verifier列,所以一开始可以注册,但是无法登录,一开始走入误区了,一次次测试他的逻辑,自己傻乎乎还在挨个测试:

// 规则说明(逐个测试,从1到6):
// 1 = SRP6a SHA1 (salt + hash1) 用户名:密码 大写(最通用,旧版WOW)
// 2 = SRP6a SHA1 (hash1 + salt) 用户名:密码 大写(老的代码逻辑)
// 3 = SRP6a SHA256 (salt + hash1) 用户名:密码 大写(新版WOW)
// 4 = SRP6a SHA1 (salt + hash1) 密码:用户名 大写(反向拼接)
// 5 = SRP6a SHA1 (salt + hash1) 用户名:密码 小写(大小写差异)
// 6 = SRP6a SHA1 (salt + hash1) 用户名密码 无分隔符 大写(无分隔符)
后来朋友提醒下为啥不从SPR6.cpp去找(我居然没想到,突然感觉自己好傻逼),于是。。。
找到源码:azerothcore-wotlk\src\common\Cryptography\Authentication\SPRA6.cpp
  1. #include "SRP6.h"
  2. #include "CryptoRandom.h"
  3. #include "Util.h"
  4. #include <functional>
  5. using SHA1 = Acore::Crypto::SHA1;
  6. using SRP6 = Acore::Crypto::SRP6;
  7. /*static*/ std::array<uint8, 1> const SRP6::g = { 7 };
  8. /*static*/ std::array<uint8, 32> const SRP6::N = HexStrToByteArray<32>("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7", true);
  9. /*static*/ BigNumber const SRP6::_g(SRP6::g);
  10. /*static*/ BigNumber const SRP6::_N(N);
  11. /*static*/ std::pair<SRP6::Salt, SRP6::Verifier> SRP6::MakeRegistrationData(std::string const& username, std::string const& password)
  12. {
  13.     std::pair<SRP6::Salt, SRP6::Verifier> res;
  14.     Crypto::GetRandomBytes(res.first); // random salt
  15.     res.second = CalculateVerifier(username, password, res.first);
  16.     return res;
  17. }
  18. /*static*/ SRP6::Verifier SRP6::CalculateVerifier(std::string const& username, std::string const& password, SRP6::Salt const& salt)
  19. {
  20.     // v = g ^ H(s || H(u || ':' || p)) mod N
  21.     return _g.ModExp(
  22.         SHA1::GetDigestOf(
  23.             salt,
  24.             SHA1::GetDigestOf(username, ":", password)
  25.         )
  26.     ,_N).ToByteArray<32>();
  27. }
  28. /*static*/ SessionKey SRP6::SHA1Interleave(SRP6::EphemeralKey const& S)
  29. {
  30.     // split S into two buffers
  31.     std::array<uint8, EPHEMERAL_KEY_LENGTH / 2> buf0{}, buf1{};
  32.     for (size_t i = 0; i < EPHEMERAL_KEY_LENGTH / 2; ++i)
  33.     {
  34.         buf0[i] = S[2 * i + 0];
  35.         buf1[i] = S[2 * i + 1];
  36.     }
  37.     // find position of first nonzero byte
  38.     size_t p = 0;
  39.     while (p < EPHEMERAL_KEY_LENGTH && !S[p])
  40.         ++p;
  41.     if (p & 1)
  42.         ++p; // skip one extra byte if p is odd
  43.     p /= 2; // offset into buffers
  44.     // hash each of the halves, starting at the first nonzero byte
  45.     SHA1::Digest const hash0 = SHA1::GetDigestOf(buf0.data() + p, EPHEMERAL_KEY_LENGTH / 2 - p);
  46.     SHA1::Digest const hash1 = SHA1::GetDigestOf(buf1.data() + p, EPHEMERAL_KEY_LENGTH / 2 - p);
  47.     // stick the two hashes back together
  48.     SessionKey K;
  49.     for (size_t i = 0; i < SHA1::DIGEST_LENGTH; ++i)
  50.     {
  51.         K[2 * i + 0] = hash0[i];
  52.         K[2 * i + 1] = hash1[i];
  53.     }
  54.     return K;
  55. }
  56. SRP6::SRP6(std::string const& username, Salt const& salt, Verifier const& verifier)
  57.     : _I(SHA1::GetDigestOf(username)), _b(Crypto::GetRandomBytes<32>()), _v(verifier), s(salt), B(_B(_b, _v)) {}
  58. std::optional<SessionKey> SRP6::VerifyChallengeResponse(EphemeralKey const& A, SHA1::Digest const& clientM)
  59. {
  60.     ASSERT(!_used, "A single SRP6 object must only ever be used to verify ONCE!");
  61.     _used = true;
  62.     BigNumber const _A(A);
  63.     if ((_A % _N).IsZero())
  64.         return std::nullopt;
  65.     BigNumber const u(SHA1::GetDigestOf(A, B));
  66.     EphemeralKey const S = (_A * (_v.ModExp(u, _N))).ModExp(_b, N).ToByteArray<32>();
  67.     SessionKey K = SHA1Interleave(S);
  68.     // NgHash = H(N) xor H(g)
  69.     SHA1::Digest const NHash = SHA1::GetDigestOf(N);
  70.     SHA1::Digest const gHash = SHA1::GetDigestOf(g);
  71.     SHA1::Digest NgHash;
  72.     std::transform(NHash.begin(), NHash.end(), gHash.begin(), NgHash.begin(), std::bit_xor<>());
  73.     SHA1::Digest const ourM = SHA1::GetDigestOf(NgHash, _I, s, A, B, K);
  74.     if (ourM == clientM)
  75.         return K;
  76.     return std::nullopt;
  77. }
复制代码
然后通过这个再去写,基本上就没有问题了。上效果图:
1、我把“账号管理”贴图改成了“角色解卡”,把“赞助服务”改成了“官方网站”,把“官方网站”改成了“账号管理”,美滋滋。
1.png
2、点击“账号管理”弹出如下网页:
2.png
3.png
至于登录器生成修改按钮贴图这个设置可以大家参考论坛里战神登录器教程设置,这里不展开了(按钮贴图我用PS做了,需要的可以私我)。
image.jpg
翠花上酸菜(回点血):
评分可见内容,需要评分 10 DKP 或以上后浏览.评分之前请先检查链接是否失效. 点此评分




评分

参与人数 6DKP +60 收起 理由
qq8742139 + 10
loveme12 + 10
leonsaga + 10
ds1160259981 + 10 为了国王的荣誉!
油腻的中年男 + 10
sangkun + 10

查看全部评分

我希望我的想法,一辈子不受世界的影响~~

135

时沙

0

精华

0

主题

声望: 2984   虚弱: 0

Lv.5(无冕者)

炉石信仰战

发表于 2026-1-15 01:27:04 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2026-1-15 07:55:28 | 显示全部楼层
谢谢分享
[发帖际遇]: 984978882盗窃之翼打造铠甲的源质矿,卖得198 金币,导致之翼大闹破烂市场. 幸运榜 / 衰神榜
回复

使用道具 举报

发表于 2026-1-15 07:56:43 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2026-1-15 08:30:44 | 显示全部楼层
感谢大佬分享
[发帖际遇]: wangzuhe0558开BOSS前大喊德玛西亚引发BOSS狂暴导致灭团,失去3 声望. 幸运榜 / 衰神榜
回复

使用道具 举报

282

时沙

0

精华

2

主题

声望: 762   虚弱: 0

Lv.4(锻造者)

发表于 2026-1-15 08:39:16 | 显示全部楼层
感谢分享。很强
回复

使用道具 举报

1326

时沙

0

精华

2

主题

声望: 1049   虚弱: 0

Lv.5(无冕者)

灵蛇献瑞(尚美制作)炉石

发表于 2026-1-15 08:47:05 | 显示全部楼层
谢谢分享!!
回复

使用道具 举报

982

时沙

0

精华

16

主题

声望: 13206   虚弱: 0

Lv.7(复仇者)

异教徒的惩罚

灵蛇献瑞(尚美制作)祥龙贺岁(尚美制作)炉石信仰战今天也只能打恢复的增强萨吟游牧师潜行者炉石天马卖糖术神雷施

发表于 2026-1-15 08:48:05 | 显示全部楼层
这个配合战神的登陆器  可以用。
[发帖际遇]: 古恩达安拿变质团队大餐宴请全体成员,导致全会食物中毒上泄下吐,失去6 声望. 幸运榜 / 衰神榜
有努力,有回报。
回复

使用道具 举报

1753

时沙

1

精华

35

主题

声望: 27768   虚弱: 0

Lv.8(征服者)

灵蛇献瑞(尚美制作)祥龙贺岁(尚美制作)信仰战假死猎人今天也只能打恢复的增强萨吟游牧师潜行者划水武僧搓水法爷卖糖术神炉石积少成多时沙之瓶炉石天马金鼠(ytfirefox制作) 犇向牛年(尚美制作)金兔迎春(尚美制作)比格沃斯先生雷施伊利丹·怒风莉莉安·沃斯无冕者

发表于 2026-1-15 09:29:58 | 显示全部楼层
感谢分享~~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

560

时沙

0

精华

7

主题

声望: 1264   虚弱: 0

Lv.4(锻造者)

小菜鸡学知识

灵蛇献瑞(尚美制作)炉石

发表于 2026-1-15 10:03:58 | 显示全部楼层
牛逼  对SRP6 进行注册需要实力
[发帖际遇]: sangkun得到一根金属香蕉,与泰奶奶达成某种不可告人的交易,获得132 金币. 幸运榜 / 衰神榜
回复

使用道具 举报

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