C#实现的QQ登录器

前几天看到一篇文章说通过DOS命令就可以登陆QQ,在运行里试了一下,真的可以 代码如下: QQ路径 /start QQUIN:QQ号 PWDHASH:经过MD5BASE64双充加密的QQ密码  /stat:登陆类型 今天就想做个QQ登录器试一下,信息保存尝试使用了序列化,发现功能真的太强大了,刚才整理了一下,现在完工,里面做了大量的注释,放出代码,文章最下面有打包的下载: QQLoginForm.cs窗体
using  System; using  System.Collections.Generic; using  System.ComponentModel; using  System.Data; using  System.Drawing; using  System.Text; using  System.Windows.Forms; using  System.Security.Cryptography; using  System.Diagnostics; namespace  QQLogin {          public partial class QQLoginForm : Form     {         public QQLoginForm()         {             InitializeComponent();         }                  UserInfo ui;         private void button1_Click(object sender, EventArgs e)         {              //单用户登陆             if (ui == null)             {                 ui = new UserInfo();//如果没有提取出来对象,就创建一个             }             if (ui != null)             {                 ui.Username = this.txtUser.Text.Trim();                 ui.Password = this.txtPwd.Text;                 ui.Type = this.cboType.Text == "正常" ? "41" : "40";                 if (this.ValidateInput())                 {//验证是否输入完全                     if (string.IsNullOrEmpty(ui.Path))                     {//判断是否有QQ路径,如果没有就打开对话框来选择一下                         DialogResult dr = this.opfQQ.ShowDialog();                         if (dr == DialogResult.OK)                         {                             ui.Path = opfQQ.FileName;//将选择的路径赋值给对象                             this.LoginQQ(ui.Username, ui.Password, ui.Type, ui.Path);//登陆QQ                         }                     }                     else                     {                         this.LoginQQ(ui.Username, ui.Password, ui.Type, ui.Path);                     }                 }                 SerializeHelper.SerializeUserInfo(ui);//每次登陆都序列化保存一次                            }         }         private bool ValidateInput()         {//验证是否输入完整             if (this.txtUser.Text == "")             {                 this.txtUser.Focus();                 return false;             }             else if(this.txtPwd.Text=="")             {                 this.txtPwd.Focus();                 return false;             }             return true;                  }         private void LoginQQ(string user,string pwd,string type,string path)         {//登陆QQ的命令,通过CMD命令来执行             Process MyProcess = new Process();             //设定程序名             MyProcess.StartInfo.FileName = "cmd.exe";             //关闭Shell的使用             MyProcess.StartInfo.UseShellExecute = false;             //重定向标准输入             MyProcess.StartInfo.RedirectStandardInput = true;             //重定向标准输出             MyProcess.StartInfo.RedirectStandardOutput = true;             //重定向错误输出             MyProcess.StartInfo.RedirectStandardError = true;             //设置不显示窗口             MyProcess.StartInfo.CreateNoWindow = true;             //执行强制结束命令             MyProcess.Start();             MyProcess.StandardInput.WriteLine(path+" /start QQUIN:"+user+" PWDHASH:" + EncodeHash.pwdHash(pwd) + "  /stat:"+type);//直接结束进程ID             MyProcess.StandardInput.WriteLine("Exit");         }                  private void btnExit_Click(object sender, EventArgs e)         {             Application.Exit();         }         private void txtUser_KeyPress(object sender, KeyPressEventArgs e)         {             if ((e.KeyChar < '0' || e.KeyChar > '9')&&e.KeyChar!=8)             {//只能输入数字和退格键                 e.Handled = true;             }         }         private void QQLoginForm_Load(object sender, EventArgs e)         {             LoadInfo();//单用户获取         }         private void LoadInfo()         {//单用户获取             ui = SerializeHelper.DeserializeUserInfo();//返回获取后对象             if (ui != null)             {                 this.txtUser.Text = ui.Username;//填充文本框                 this.txtPwd.Text = ui.Password;//填充密码框                 this.cboType.SelectedIndex = ui.Type == "41" ? 0 : 1;//选择登陆方式             }             else             {                 this.cboType.SelectedIndex = 0;             }         }         private void btnConfig_Click(object sender, EventArgs e)         {             ConfigForm cf = new ConfigForm();             cf.ShowDialog();             LoadInfo();         }             } }
ConfigForm.cs 配置窗体
using  System; using  System.Collections.Generic; using  System.ComponentModel; using  System.Data; using  System.Drawing; using  System.Text; using System.Windows.Forms; namespace  QQLogin {     public partial class ConfigForm : Form     {         UserInfo ui;         public ConfigForm()         {             InitializeComponent();         }         private void txtPath_Click(object sender, EventArgs e)         {//点击一次文本框,弹出一次对话框来选择QQ路径             DialogResult dr = this.opfQQ.ShowDialog();             if (dr == DialogResult.OK)             {                 this.txtPath.Text = opfQQ.FileName;                             }         }                 private bool ValidateInput()         {//验证是否输入完整             if (this.txtUser.Text == "")             {                 this.txtUser.Focus();                 return false;             }             else if (this.txtPwd.Text == "")             {                 this.txtPwd.Focus();                 return false;             }             else if (this.txtPath.Text == "")             {                 return false;             }             return true;         }         private void btnCancel_Click(object sender, EventArgs e)         {             this.Close();         }         private void ConfigForm_Load(object sender, EventArgs e)         {             LoadInfo();         }                  private void btnSave_Click(object sender, EventArgs e)         {             ui = new UserInfo();             ui.Username = this.txtUser.Text.Trim();             ui.Password = this.txtPwd.Text;             ui.Type = this.cboType.Text == "正常" ? "41" : "40";             ui.Path = this.txtPath.Text;             if (this.ValidateInput())             {                 SerializeHelper.SerializeUserInfo(ui);                                 this.Close();             }                      }         private void LoadInfo()         {             ui = SerializeHelper.DeserializeUserInfo();             if (ui != null)             {                 this.txtUser.Text = ui.Username;                 this.txtPwd.Text = ui.Password;                 this.cboType.SelectedIndex = ui.Type == "41" ? 0 : 1;                 this.txtPath.Text = ui.Path;             }             else             {                 this.cboType.SelectedIndex = 0;             }         }     } }
EncodeHash.cs 加密类
using  System; using  System.Collections.Generic; using  System.Text; using  System.Security.Cryptography; namespace  QQLogin {     /// <summary>     /// 编码加密类     /// </summary>     class EncodeHash     {         /// <summary>         /// 通过MD5加密后返回加密后的BASE64密码         /// </summary>         /// <param name="pwd">要加密的内容</param>         /// <returns>通过MD5加密后返回加密后的BASE64密码</returns>                  public static string pwdHash(string pwd)         {//使用MD5的16位加密后再转换成BASE64             System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();//实例化一个md5对像              // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择               byte[] s = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(pwd));             return Convert.ToBase64String(s);         }         /// <summary>         /// 返回MD5的32位加密后的密码         /// </summary>         /// <param name="inputString">要加密的内容</param>         /// <returns>加密后的结果</returns>         public static string StringToMD5Hash(string inputString)         {                          MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();             byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString));             StringBuilder sb = new StringBuilder();             for (int i = 0; i < encryptedBytes.Length; i++)             {                 sb.AppendFormat("{0:x2}", encryptedBytes[i]);             }             return sb.ToString();         }                  /// <summary>         /// Base64编码         /// </summary>         /// <param name="code"></param>         /// <returns></returns>         public static string EncodeBase64(string code)         {             string encode = "";             byte[] bytes = System.Text.Encoding.Default.GetBytes(code);             try             {                 encode = Convert.ToBase64String(bytes);             }             catch             {                 encode = code;             }             return encode;         }                  /// <summary>         /// Base64解码         /// </summary>         /// <param name="code_type"></param>         /// <param name="code"></param>         /// <returns></returns>         public static string DecodeBase64(string code_type, string code)         {             string decode = "";             byte[] bytes = Convert.FromBase64String(code);             try             {                 decode = Encoding.GetEncoding(code_type).GetString(bytes);             }             catch             {                 decode = code;             }             return decode;         }     } }
SerializeHelper.cs 序列化类,打算做多用户登录器呢,就预留了两个用来序列化集合的方法
using  System; using  System.Collections.Generic; using  System.Text; using  System.Windows.Forms; using System.Runtime.Serialization.Formatters.Binary;//序列化 using  System.IO; namespace  QQLogin {     /// <summary>     /// 序列化帮助类     /// </summary>     class SerializeHelper     {         /// <summary>         /// 使用反序列化方式读取信息         /// </summary>         /// <returns></returns>         public static  UserInfo DeserializeUserInfo()         {//将用户信息使用反序列化方式提取             UserInfo ui = null;             try             {                 FileStream fileStream = null;                 fileStream = new FileStream(Application.StartupPath + "//UserInfo.bin", FileMode.Open);                 BinaryFormatter bf = new BinaryFormatter();                 ui = (UserInfo)bf.Deserialize(fileStream);                 fileStream.Close();             }             catch (Exception ex)             {             }             return ui;         }         /// <summary>         /// 序列化UserInfo对象         /// </summary>         /// <param name="ui">传入要序列化的UserInfo对象</param>         public static void SerializeUserInfo(UserInfo ui)         {//将用户信息使用序列化方式保存             try             {                 FileStream fileStream = null;                 fileStream = new FileStream(Application.StartupPath + "//UserInfo.bin", FileMode.Create);                 BinaryFormatter bf = new BinaryFormatter();                 bf.Serialize(fileStream, ui);                 fileStream.Close();             }             catch (Exception ex)             {                 MessageBox.Show(ex.Message);             }         }         /// <summary>         /// 反序列化UserInfo泛型集合对象         /// </summary>         /// <returns></returns>         public static List<UserInfo> DeserializeList()         {//将用户信息使用反序列化方式提取             List<UserInfo> lst = null;             FileStream fileStream = null;             try             {                 fileStream = new FileStream(Application.StartupPath + "//UserInfo.bin", FileMode.Open);                 BinaryFormatter bf = new BinaryFormatter();                 lst = (List<UserInfo>)bf.Deserialize(fileStream);                 fileStream.Close();                              }             catch (Exception ex)             {                 MessageBox.Show(ex.Message);             }                                                       return lst;         }         /// <summary>         /// 序列化UserInfo泛型集合对象         /// </summary>         /// <param name="ui">传入要序列化的List<UserInfo>对象</param>         public static void SerializeList(List<UserInfo> lst)         {//将用户信息使用序列化方式保存             FileStream fileStream = null;             try             {                 fileStream = new FileStream(Application.StartupPath + "//UserInfo.bin", FileMode.Create);                 BinaryFormatter bf = new BinaryFormatter();                 bf.Serialize(fileStream, lst);                 fileStream.Close();             }             catch (Exception ex)             {                 MessageBox.Show(ex.Message);             }         }     } }
UserInfo.cs用户信息类
using  System; using  System.Collections.Generic; using  System.Text; namespace  QQLogin {     /// <summary>     /// 用户信息类     /// </summary>     [Serializable]     class UserInfo     {         private string username;         public string Username         {             get return username; }             set { username = value; }         }         private string password;         public string Password         {             get return password; }             set { password = value; }         }         private string type;         public string Type         {             get return type; }             set { type = value; }         }         private string path;         public string Path         {             get return path; }             set { path = value; }         }     } }
下载地址: http://www.cnblogs.com/Files/mgod/QQLogin.rar
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值