删除QQ的登陆记录
软件世界
QQ的安全性问题是个老话题了,但很多朋友的QQ号还是不断被盗,最近有位朋友因为不想让别人知道自己在本台计算机上登录过,问我如何将运行QQ时出现的下拉列表框中自己的QQ号删除(在这里提醒一下,删除QQ目录下以自己QQ号为名的文件夹只能删除你的聊天记录,别人还是可以看到你在本机上登录过)?我在注册表和QQ的安装目录进行了地毯式搜索之后,总算找到了方法。
分析过程
原来,在本台机器上登录过的所有QQ号码全记录在“C:\Programfiles\Tencent\dat\oicq2000.cfg”文件中(此处因安装目录不同而有所不同)。其实只要将其删除,下次运行QQ就会出现第一次在本机上运行QQ时的注册向导,也就将所有的登录记录都删除了。但如果只想删除其中的一个号码呢?经过对oicq2000.cfg这个二进制的文件的研究,我终于用VB写出一个程序实现了这个功能。
先用16进制的方式打开此文件,可以看到,前面8个字节全是0,是配置文件空留出来的文件头。接下来的第9个字节到第12个字节这4个字节记录的是一共有多少个QQ号在本机上登录过,所以在删除一个QQ号的时候,要记得将这个字节减1。再往后的4个字节就是QQ的位数,如11594288,就是8位。接下来的字节就是你的QQ号了。知道了原理之后我们就开始动手吧。
具体实现
1.新建一个工程,点“工程→添加模块”菜单,改模块名为DelQQRec。
2.点“工程菜单→工程属性”,设工程名为DelQQLog,设启动对象为Sub main。
3.删除form1窗体(因为本程序只对文件进行后台操作,无须窗体就可运行)。
4.在模块中输入下列程序代码:
Option Explicit
Dim QQDir As String
Dim QQNumber As String
Sub Main()
On Error GoTo FileNotFound
Dim QQPos As Long
QQDir = InputBox("请输入QQ的安装文件夹:", "欢迎使用", "C:\Program Files\Tencent")
If QQDir = "" Then End
QQNumber = InputBox("请输入QQ号码", "删除登录记录")
If QQNumber = "" Then End
QQPos = SearchQQ(QQNumber)
If QQPos <> -1 Then
If MsgBox("要同时删除" & QQNumber & "的聊天记录吗?", vbYesNo + vbInformation, "聊天记录") = vbYes Then DeleteChat QQNumber
DeleteQQ QQPos
Else
MsgBox "没有找到" & QQNumber & "在本台计算机上的登录信息", vbOKOnly + vbQuestion, "找不到"
End
FileNotFound:
If Err = "76" Then MsgBox "QQ的文件夹输入有误。", vbOKOnly + vbCritical, "有点问题": End
End If
End Sub
Private Function SearchQQ(QQNum As String) As Long '用于实现QQ号的查找,找到了返回它在文件中的位置,没有找到则返回-1
Dim QQLen As Integer, BeginPos As Long, SingleNum As String * 1, GetedNum As String
Dim i As Integer
Open QQDir & "\dat\oicq2000.cfg" For Binary As #1 '打开oicq2000.cfg文件
BeginPos = 13
While Not EOF(1)
Get #1, BeginPos, QQLen
If QQLen = Len(QQNumber) Then '判断QQ的位数是否相同
BeginPos = BeginPos + 4
For i = 1 To QQLen
Get #1, BeginPos, SingleNum
BeginPos = BeginPos + 1
If Mid(QQNumber, i, 1) <> SingleNum Then Exit For
Next
If i > Len(QQNumber) Then
SearchQQ = BeginPos - QQLen - 4 '找到则返回它在文件中的位置
Close #1
Exit Function
Else
BeginPos=BeginPos+(QQLen - i)
End If
Else
BeginPos=BeginPos+4 + QQLen
End If
Wend
SearchQQ = -1
Close #1
End Function
Private Sub DeleteQQ(WritePos As Long) '删除QQ记录
Dim Temp As Byte, QQLen As Integer, TotalNum As Byte, i As Long, FileLong As Long
Open QQDir & "\dat\oicq2000.cfg" For Binary As #2
Open QQDir & "\dat\oicq2000.tmp" For Binary As #3
Get #2, WritePos, QQLen
Get #2, 9, TotalNum
FileLong= LOF(2) - QQLen - 4
For i = 1 To WritePos - 1
Get #2, i, Temp
Put #3, i, Temp
Next
For i = WritePos To FileLong
Get #2, i + 4 + QQLen, Temp
Put #3, i, Temp
Next
Put #3,9,TotalNum - 1'总数减1
Close #2, #3
Kill QQDir &"\dat\oicq2000.cfg"
Name QQDir & "\dat\oicq2000.tmp" As QQDir & "\dat\oicq2000.cfg"
MsgBox"QQ号码为:"& QQNumber & "的信息已经清除", vbOKOnly + vbInformation, "谢谢使用"
End Sub
Private Sub DeleteChat(QQNum As String)
Kill QQDir & "\" & QQNum & "\" & "*.*"
RmDir QQDir & "\" & QQNum
End Sub
最后编译成EXE文件就行了,可以作为一个小软件来使用。本程序在VB5和QQ2000B1220版本下通过。