QQ Shortcut 开发手册
--By Null
揭秘 PWDHash
QQ的PWDhash 原本是为实现 QQ 与 TM无缝切换而用的将密码加密传递的参数。使得用户能在 QQ 与 TM 之间快速切换而不用再次输入密码。
现在让我们来看看 QQ 与 IM 是通过怎样的参数来相互切换的,
例如:
D:/QQ2007/QQ.exe /START QQUIN:28681290 PWDHASH:L 8c 9kXaAT0GKNj9pWuZug== /STAT:40
QQ命令行:
QQ.exe /START QQUIN:QQ号 PWDHASH:加密的密码 /STAT:40 (40隐,41正常)
概念:
PWDHASH就是对我们的原始QQ密码进行MD5散列算法处理,得到一个16字节的MD5 HASH 字节组,然后再用BASE64编码对这个HASH字节组做第二次编码得到的。理论上说是无法从PWDHASH反推出原始的QQ密码的。但是,如果密码过于简单,如纯数字之类的,是可能被简单暴力破解的。
快捷方式登录的利与弊
有利的一面:免去输入密码之苦,双击一下就可以登录,同时也可以防止密码被键盘记录软件盗取。
不好的一面:如果是多人共用电脑,或者电脑可以被别人随意使用,那么别人是可以随意登陆你的QQ的。
综上,该方法适合个人电脑用户。
核心代码的实现
1,PWDHash 的生成
明白了 PWDHash 的生成过程,代码就好写了,下面看看我的实现函数:
'''<summary>QQPWDHash 生成函数,传递原始密码,返回加密后的PWDHash 字符串</summary>
'''<param name="PWD">16位以内的QQ 密码</param>
Function PWDHash(ByRef PWD As String) As String
Dim MD5 As New System.Security.Cryptography.MD5CryptoServiceProvider()
Dim PWDBytes() As Byte = (New System.Text.UTF8Encoding).GetBytes(PWD)
Dim MD5Bytes() As Byte = MD5.ComputeHash(PWDBytes)
Return Convert.ToBase64String(MD5Bytes, Base64FormattingOptions.InsertLineBreaks)
End Function
很简单,核心部分只有四句话,下面来详细解释一下。
第一句:
声明一个新的 MD5 类,名字也叫 MD5,并分配空间,在 .net 中,已经集成了多种加密/解密类,不必再为此写一句代码,直接调用就可以了,很方便。
第二句:
声明一个名为 PWDHash 的动态的字节组,它的初值就是原始密码转换为字节组的结果。
第三句:
声明一个名为 MD5Hash 的动态的字节组,它的初值就是将原始密码的字节组经过 MD5 加密后的结果。
第四句:
使用内置Base64 编码函数,把 MD5 加密结果进行 Base64 编码,并转换成字符串形式输出,最后返回。
在 PWDHash 编码过程中,除了输出和输入是字符串形式外,其他变量都是字节组形式的,很多人在用其他开发环境编写的时候,失败了,大都是因为中间的变量类型不正确所致。
2,快捷方式的生成
快捷方式的生成,在 .net 中没有现成的函数,这个操作稍微有点复杂,
A,在解决方案资源管理器中工程名上点右键,选择添加引用
B,在添加引用对话框中选择COM页
C,然后选择"Windows Scripting Host Object Model"并添加
D,在代码页的顶端添加一句:Imports IWshRuntimeLibrary
E,添加以下函数代码
'''<summary>创建快捷方式,返回结果表示是否创建成功</summary>
'''<param name="SaveName">将快捷方式保存到的位置</param>
'''<param name="TargetName">快捷方式指向的目标名</param>
'''<param name="Arguments">执行参数,默认为空</param>
'''<param name="WorkingDirectory">起始位置</param>
'''<param name="WindowStyle">运行方式,1,常规窗口;3,最大化;7最小化.默认为1</param>
'''<param name="Description">备注</param>
'''<param name="IconLocation">图标</param>
Function CreateShortCut(ByVal SaveName As String, ByVal TargetName As String, Optional ByVal Arguments As String = "", Optional ByVal WorkingDirectory As String = "", Optional ByVal WindowStyle As Integer = 1, Optional ByVal Description As String = "Powered By Null", Optional ByVal IconLocation As String = "") As Boolean
If Strings.LCase(Strings.Right(SaveName, 4)) <> ".lnk" Then
SaveName &= ".lnk"
End If
Try
Dim WshShell As New WshShell
Dim ShortCut As IWshRuntimeLibrary.IWshShortcut
ShortCut = CType(WshShell.CreateShortcut(SaveName), IWshRuntimeLibrary.IWshShortcut)
With ShortCut
'目标
.TargetPath = TargetName
'命令行
.Arguments = Arguments
'运行方式
.WindowStyle = WindowStyle
'备注
.Description = Description
'起始位置
.WorkingDirectory = WorkingDirectory
'图标
If IconLocation = "" Then
.IconLocation = TargetName
Else
.IconLocation = IconLocation
End If
.Save()
End With
Return True
Catch ex As System.Exception
Return False
End Try
End Function
函数上面都有关键注释了,这里就不再复述了。
3,QQ 安装路径的获取
主要是通过注册表读取来获取。
在注册表的 HKEY_LOCAL_MACHINE/SOFTWARE/TENCENT/PLATFORM_TYPE_LIST 下面有几个数字的子项,1中的 TypePath 存着 QQ 的安装路径,2中的 TypePath 存着 TM 的安装路径。
'''<summary>从注册表获取QQ路径</summary>
'''<param name="QQPath">返回的路径值,第一维为序号,第二维长度为,0,名称;1,路径</param>
Function GetQQPath(ByRef QQPath(,) As String) As Boolean
Dim HKLM As RegistryKey = Registry.LocalMachine
Dim Software As RegistryKey = HKLM.OpenSubKey("Software")
Dim PLATFORM_TYPE_LIST As RegistryKey = Software.OpenSubKey("TENCENT/PLATFORM_TYPE_LIST")
If PLATFORM_TYPE_LIST IsNot Nothing AndAlso PLATFORM_TYPE_LIST.SubKeyCount > 0 Then
Dim SubCount As Integer = PLATFORM_TYPE_LIST.SubKeyCount
Dim tmpKey As RegistryKey
Dim i As Integer = 0
Dim SubKey(SubCount - 1) As String
ReDim QQPath(SubCount - 1, 1)
SubKey = PLATFORM_TYPE_LIST.GetSubKeyNames
For i = 0 To SubCount - 1
tmpKey = PLATFORM_TYPE_LIST.OpenSubKey(SubKey(i))
QQPath(i, 0) = tmpKey.GetValue("TypeName")
QQPath(i, 1) = tmpKey.GetValue("TypePath")
tmpKey.Close()
Next
PLATFORM_TYPE_LIST.Close()
Software.Close()
HKLM.Close()
Return True
End If
QQPath = Nothing
Return False
End Function
借助 MSDN,上面的源代码不难不懂。
4.其他
其他运行过程代码,请参见源文件。
资源
该程序以及源文件下载:
http://docrackit.googlepages.com/QQShortcut_Scr.rar
http://hi.baidu.com/hetaoos/blog/item/02a6b40e672d6ae637d1223f.html
我的博客:
界面预览