zoukankan      html  css  js  c++  java
  • [zt]再谈QQ自动登陆器:提供C#源码下载(下)

     上次提到的QQ自动登陆器C++版本,其技术太过低级,但是所用方法在其他的应用中作用强大,尤其是外挂程序。其实就QQ登录来说有其接口的,用C#代码描述就一条语句:
    1Process.Start(qqPath, "/START QQUIN:" + strAcntNum + " PWDHASH:" + strAcntPsw + " /STAT:" + (blAcntSts ? "40" : "41"));
    2
    其中 qqPath为QQ程序路径,strAcntNum为QQ号码,strAcntPsw为QQ的Hash值,布尔类型blAcntSts为登录状态,即是否隐身。
        简单吧,看来QQ自动登陆器是没有技术含量了,今天就设计过程中的其他技术作一介绍:
    (1)注册表中添加QQ程序路径和登陆器程序打开密码
     1        public static string SetQQRegistryValue(string key, object value)
     2        {
     3            RegistryKey pregkey = Registry.CurrentUser.OpenSubKey(Constants.STR_QQ_REG_PATH, true);
     4            if (pregkey == null)
     5            {
     6                pregkey = Registry.CurrentUser.CreateSubKey(Constants.STR_QQ_REG_PATH, RegistryKeyPermissionCheck.ReadWriteSubTree);
     7                pregkey.SetValue(key, string.Empty);
     8                pregkey.Close();
     9                return string.Empty;
    10            }

    11            else
    12            {
    13                pregkey.SetValue(key, value);
    14                pregkey.Close();
    15                return value.ToString();
    16            }

    17
    18        }

    19
    20        public static string GetQQRegistryValue(string key)
    21        {
    22            RegistryKey pregkey = Registry.CurrentUser.OpenSubKey(Constants.STR_QQ_REG_PATH, true);
    23            if (pregkey == null)
    24            {
    25                pregkey = Registry.CurrentUser.CreateSubKey(Constants.STR_QQ_REG_PATH, RegistryKeyPermissionCheck.ReadWriteSubTree);
    26            }

    27            object value = pregkey.GetValue(key);
    28            pregkey.Close();
    29            if (value == null)
    30            {
    31                return string.Empty;
    32            }

    33            else
    34            {
    35                return value.ToString();
    36            }

    37        }

    38

    (2)序列化QQ帐号信息到文件
     1public static List<QQAccount> Get(string path)
     2        {
     3            if (qqInfoList == null)
     4            {
     5                FileStream fs = null;
     6                try
     7                {
     8                    XmlSerializer xs = new XmlSerializer(typeof(List<QQAccount>));
     9                    fs = new FileStream(path, FileMode.Open, FileAccess.Read);
    10                    qqInfoList = (List<QQAccount>)xs.Deserialize(fs);
    11                    fs.Close();
    12                    return qqInfoList;
    13                }

    14                catch
    15                {
    16                    if (fs != null)
    17                        fs.Close();
    18                    return null;
    19                }

    20
    21            }

    22            else
    23            {
    24                return qqInfoList;
    25            }

    26        }

    27
    28public static void Set(string path, List<QQAccount> qqList)
    29        {
    30            if (qqList == null)
    31                throw new Exception("Parameter is null!");
    32
    33            FileStream fs = null;
    34            try
    35            {
    36                XmlSerializer xs = new XmlSerializer(typeof(List<QQAccount>));
    37                fs = new FileStream(path, FileMode.Create, FileAccess.Write);
    38                xs.Serialize(fs, qqList);
    39                fs.Close();
    40            }

    41            catch
    42            {
    43                if (fs != null)
    44                    fs.Close();
    45                throw new Exception("Xml serialization failed!");
    46            }

    47        }
    (3)Hash处理登录密码
     1        public static string HashBase64(string str)
     2        {
     3            byte[] result = new byte[str.Length];
     4            try
     5            {
     6                MD5 md = new MD5CryptoServiceProvider();
     7                result = md.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));
     8                return Convert.ToBase64String(result);
     9            }

    10            catch
    11            {
    12                return "";
    13            }

    14        }

    15
    如下提供源码下载,作的粗糙,原谅!如有更好的建议请留言!
    源码下载
  • 相关阅读:
    Sql server 中count(1) 与 sum(1) 那个更快?
    Sql server 中count() 与 sum() 的区别
    ASP.Net Core 运行错误 Http Error 502.5 解决办法
    什么是语法糖?
    int和Integer有什么区别?如何相互转换呢?
    面向对象的基本特征有哪些方面?
    谈谈final finally finalize区别
    Overload和Override的区别
    String s=new String(“xyz”);创建了几个String Object?
    Gc是什么?为什么要有Gc?
  • 原文地址:https://www.cnblogs.com/goody9807/p/1048611.html
Copyright © 2011-2022 走看看