Skip to content

Latest commit

 

History

History
260 lines (190 loc) · 5.84 KB

File metadata and controls

260 lines (190 loc) · 5.84 KB

本地签名器测试指南

环境要求

要运行测试,你需要安装 .NET SDK:

检查当前环境

# 检查运行时
dotnet --list-runtimes

# 检查 SDK
dotnet --list-sdks

当前系统状态:

  • ✅ 已安装运行时: .NET 6.0.11 和 7.0.20
  • ❌ 未安装 SDK: 需要安装才能编译项目

安装 .NET SDK

下载并安装 .NET 6 SDK: https://dotnet.microsoft.com/download/dotnet/6.0

或使用命令安装:

winget install Microsoft.DotNet.SDK.6

编译和运行测试

安装 SDK 后:

# 1. 进入项目目录
cd d:\Code\Lagrange.Core

# 2. 编译测试项目
dotnet build Lagrange.Core.Test\Lagrange.Core.Test.csproj

# 3. 运行测试
dotnet run --project Lagrange.Core.Test\Lagrange.Core.Test.csproj

手动测试代码示例

如果暂时无法编译,可以查看以下代码示例理解如何使用:

示例 1: 基础使用

using Lagrange.Core.Common;
using Lagrange.Core.Common.Interface;
using Lagrange.Core.Utility.Sign;

// 1. 创建设备信息
var deviceInfo = BotDeviceInfo.GenerateInfo();

// 2. 创建本地签名器
var localSigner = new LocalSigner(
    deviceId: deviceInfo.Guid.ToByteArray(),
    appVersion: "3.0.6",
    appId: 537234773
);

// 3. 配置 Bot
var config = new BotConfig
{
    Protocol = Protocols.Linux,
    CustomSignProvider = localSigner,  // 使用本地签名器
    AutoReconnect = true,
    GetOptimumServer = true
};

// 4. 创建 Bot 实例
var keystore = new BotKeystore(0, "");  // 0 表示使用二维码登录
var bot = BotFactory.Create(config, deviceInfo, keystore);

// 5. 登录
var qrCode = await bot.FetchQrCode();
if (qrCode != null)
{
    await File.WriteAllBytesAsync("qr.png", qrCode.Value.QrCode);
    Console.WriteLine($"二维码已保存,请扫码: {qrCode.Value.Url}");
    
    var success = await bot.LoginByQrCode();
    Console.WriteLine(success ? "登录成功!" : "登录失败");
}

示例 2: 混合签名器

using Lagrange.Core.Utility.Sign;

var deviceInfo = BotDeviceInfo.GenerateInfo();

// 1. 创建远程签名器(如果有可用的)
var remoteSigner = new UrlSigner("http://your-sign-server:8080/sign");

// 2. 创建本地签名器作为备用
var localSigner = new LocalSigner(deviceInfo.Guid.ToByteArray());

// 3. 创建混合签名器
var hybridSigner = new HybridSigner(
    primarySigner: remoteSigner,    // 优先使用远程
    fallbackSigner: localSigner      // 失败时使用本地
);

// 4. 使用混合签名器
var config = new BotConfig
{
    Protocol = Protocols.Linux,
    CustomSignProvider = hybridSigner
};

var bot = BotFactory.Create(config, deviceInfo, new BotKeystore(0, ""));

示例 3: 自定义签名器

using Lagrange.Core.Utility.Sign;

// 继承 SignProvider 实现自己的签名逻辑
public class MyCustomSigner : SignProvider
{
    public override byte[]? Sign(string cmd, uint seq, byte[] body, 
                                  out byte[]? extra, out string? token)
    {
        // 你的签名逻辑
        extra = null;
        token = null;
        
        if (!WhiteListCommand.Contains(cmd))
            return null;
        
        // 实现签名算法
        return YourSignAlgorithm(cmd, seq, body);
    }
    
    private byte[] YourSignAlgorithm(string cmd, uint seq, byte[] body)
    {
        // 你的实现
        throw new NotImplementedException();
    }
}

// 使用自定义签名器
var config = new BotConfig
{
    CustomSignProvider = new MyCustomSigner()
};

预期结果

成功情况

如果本地签名器工作正常,你会看到:

=== 本地签名器测试 ===
⚠️ 警告: 本地签名器是简化实现,可能无法完全替代真实签名服务器

✓ 本地签名器已创建
✓ Bot 配置已创建(使用本地签名器)
✓ Bot 实例已创建

开始登录(使用二维码)...
⚠️ 注意: 如果登录失败,可能是因为本地签名器无法通过腾讯的验证

[Information] 正在获取二维码...
二维码 URL: https://...
二维码已保存到: qr-local-signer-test.png
请使用 QQ 扫码登录...

[Information] 等待扫码...
[Information] 扫码成功,正在登录...

✓✓✓ 登录成功! ✓✓✓
Bot UIN: 1234567890
Bot Name: 你的昵称

失败情况

如果本地签名器无法通过验证:

[Error] 签名验证失败
[Error] 服务器拒绝连接
✗ 登录失败

可能的原因:
1. 本地签名器无法通过腾讯的验证
2. 网络问题
3. 账号被风控

故障排查

问题 1: 编译错误

错误: No .NET SDKs were found

解决: 安装 .NET 6 SDK

winget install Microsoft.DotNet.SDK.6

问题 2: 登录失败

可能原因:

  1. 本地签名器无法通过腾讯验证(最可能)
  2. 网络连接问题
  3. 协议版本不匹配

解决方案:

  1. 使用混合签名器,配合真实的签名服务器
  2. 尝试使用 unidbg-fetch-qsign
  3. 切换到 OpenShamrock 或 Chronocat

问题 3: 账号被风控

症状: 需要滑块验证、短信验证或直接提示风险

解决:

  1. 更换协议类型(Windows/MacOS/Linux)
  2. 使用真实的签名服务器
  3. 等待一段时间后再试
  4. 使用新账号测试

下一步

  1. 安装 .NET SDK 后重新运行测试
  2. 查看日志输出 了解失败原因
  3. 准备备用方案 (签名服务器或替代项目)
  4. 加入社区 获取更多帮助: https://t.me/+6HNTeJO0JqtlNmRl

补充说明

  • 本地签名器是实验性功能
  • 不保证能够正常工作
  • 建议仅用于学习和测试
  • 生产环境请使用真实的签名服务器

技术细节

本地签名器的实现位于:

  • Lagrange.Core\Utility\Sign\LocalSigner.cs
  • Lagrange.Core\Utility\Sign\HybridSigner.cs

测试代码位于:

  • Lagrange.Core.Test\Tests\LocalSignerTest.cs

文档:

  • LocalSignerExample.md - 基础使用指南
  • AdvancedSignerGuide.md - 高级技术路线