首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 打造 QQ 自動登入器:命令列參數 + MD5/Base64 加密 + 序列化持久化完整實作

     編輯:關於C#

核心原理:QQ 命令列協議

QQ 支援以命令列方式自動登入:


QQ路徑 /start QQUIN:帳號 PWDHASH:加密密碼 /stat:登入模式
  • PWDHASH = Base64(MD5(密碼, UTF-8))
  • /stat:41 正常登入,40 隱身登入。

架構分層

檔案職責
QQLoginForm.cs主視窗:輸入帳密、選模式、讀寫設定、啟動登入
ConfigForm.cs設定視窗:指定 QQ 安裝路徑
EncodeHash.csMD5+Base64 加密、Base64 編解碼
SerializeHelper.csBinaryFormatter 序列化 UserInfo 到 UserInfo.bin
UserInfo.cs資料實體:帳號、密碼、模式、路徑,標記 [Serializable]

關鍵程式碼亮點

1. 登入指令組裝與 Process 啟動


private void LoginQQ(string user, string pwd, string type, string path)
{
    var psi = new ProcessStartInfo("cmd.exe")
    {
        UseShellExecute = false,
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        CreateNoWindow = true
    };
    var proc = Process.Start(psi);
    proc.StandardInput.WriteLine($"{path} /start QQUIN:{user} PWDHASH:{EncodeHash.pwdHash(pwd)} /stat:{type}");
    proc.StandardInput.WriteLine("exit");
}

2. 密碼加密:MD5 → Base64


public static string pwdHash(string pwd)
{
    using (var md5 = MD5.Create())
    {
        byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(pwd));
        return Convert.ToBase64String(hash);
    }
}

3. 序列化持久化(含多使用者擴充預留)


public static void SerializeUserInfo(UserInfo ui)
{
    using (var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "UserInfo.bin", FileMode.Create))
        new BinaryFormatter().Serialize(fs, ui);
}

public static UserInfo DeserializeUserInfo()
{
    string path = AppDomain.CurrentDomain.BaseDirectory + "UserInfo.bin";
    if (!File.Exists(path)) return null;
    using (var fs = new FileStream(path, FileMode.Open))
        return (UserInfo)new BinaryFormatter().Deserialize(fs);
}
// 另提供 List 版本 SerializeList/DeserializeList 供未來多帳號擴充

4. 熱鍵輸入限制:僅允許數字


private void txtUser_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((e.KeyChar < '0' || e.KeyChar > '9') && e.KeyChar != 8)
        e.Handled = true;
}

安全性提醒

  • 密碼以明文儲存於二進位檔,生產環境請改用 ProtectedData (DPAPI) 或 AES 加密後再序列化。
  • QQ 協議可能隨版本變更,建議改用官方 OpenAPI (OAuth) 實作正規登入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved