[zt]再谈QQ自动登陆器:提供C#源码下载(下)
上次提到的QQ自动登陆器C++版本,其技术太过低级,但是所用方法在其他的应用中作用强大,尤其是外挂程序。其实就QQ登录来说有其接口的,用C#代码描述就一条语句:
简单吧,看来QQ自动登陆器是没有技术含量了,今天就设计过程中的其他技术作一介绍:
(1)注册表中添加QQ程序路径和登陆器程序打开密码
(2)序列化QQ帐号信息到文件
源码下载
1
Process.Start(qqPath, "/START QQUIN:" + strAcntNum + " PWDHASH:" + strAcntPsw + " /STAT:" + (blAcntSts ? "40" : "41"));
2![]()
其中 qqPath为QQ程序路径,strAcntNum为QQ号码,strAcntPsw为QQ的Hash值,布尔类型blAcntSts为登录状态,即是否隐身。
Process.Start(qqPath, "/START QQUIN:" + strAcntNum + " PWDHASH:" + strAcntPsw + " /STAT:" + (blAcntSts ? "40" : "41"));2

简单吧,看来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![]()
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
else12
{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
else34
{35
return value.ToString();36
}37
}38

(2)序列化QQ帐号信息到文件
1
public 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![]()
28
public 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处理登录密码
public static List<QQAccount> Get(string path)2
{3
if (qqInfoList == null)4
{5
FileStream fs = null;6
try7
{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
catch15
{16
if (fs != null)17
fs.Close();18
return null;19
}20

21
}22
else23
{24
return qqInfoList;25
}26
}27

28
public 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
try35
{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
catch42
{43
if (fs != null)44
fs.Close();45
throw new Exception("Xml serialization failed!");46
}47
} 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![]()
如下提供源码下载,作的粗糙,原谅!如有更好的建议请留言!
public static string HashBase64(string str)2
{3
byte[] result = new byte[str.Length];4
try5
{6
MD5 md = new MD5CryptoServiceProvider();7
result = md.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str));8
return Convert.ToBase64String(result);9
}10
catch11
{12
return "";13
}14
}15

源码下载


浙公网安备 33010602011771号