手机QQ2009聊天记录分析及提取
这是我的最早一个像程序的程序。
十月十三号用上手机QQ2009了,一看,果然更花哨了。但以前写的手机QQ聊天记录提取程序用不上了,莫办法,重新分析。
一手机QQ2009聊天记录文件的存放位置
C:/System/data/Tencent/QQ/自己的QQ号码/好友的QQ号码/msg.info
假如手机QQ装在E盘的把,上面盘符改成E就是了。
二手机QQ2009聊天记录文件的字符编码
手机QQ2009聊天记录文件的字符编码还是和手机QQ2008聊天记录文件的字符编码一样的,用的是UTF-16
三手机QQ2009聊天记录文件结构分析
和手机QQ2008聊天记录文件不一样了!
注:我用的是十六进制分析
消息分位发送消息和接收消息
发送消息
发送消息的十六进制表示以a8 ??(??表示一个十六进制数)标记开始并以它标记结束,接着用四个字节记录这条消息的序列,接着空出六个字节来,下一个字节是十六进制的80,说明消息是发送消息,从此以后位消息内容,直到,消息结束标记a8 ??。
例如:
发送消息 “不”字的消息的十六进制
a8 024a d5 0a d3 00 00 00 00 00 00800d 4ea8 02
注: a8 02 中的 02 是随机的,但前后统一。
接收消息
发送消息的十六进制表示以a8 ??标记开始并以它标记结束,接着用四个字节记录这条消息的序列,接着空出六个字节来,下一个字节是十六进制的00,说明消息是发送消息,从此以后位消息内容,直到,消息结束标记a8 ??。
接收消息 “不”字的消息的十六进制
a8 064a d5 0a bf 00 00 00 00 00 00000d 4ea8 06
注: a8 06 中的 06 是随机的,但前后统一。
四 提取手机QQ2009的聊天记录
经过分析,提取就简单了。
需要提取手机QQ2009聊天记录的友友可以把你的msg.info文件发给俺:
最后,这是为了师太写的,嘿嘿。
分析有误的地方请指出,一起分享;代码写得差了,请多指教。
补:上网一看,汗,要把手机QQ2008以前聊天记录的导入到手机QQ2009里面来还没人做,俺继续研究,应该不难,手机QQ2008的聊天记录俺有分析及提取的程序,嘿嘿。
下面是提取手机QQ2009聊天记录的Python语言代码:
# Encoding:UTF-8
# FileName:PickupMobileQQ2009Message
# Date:2009_10_14
# from DMQCR.convert import OtoA
# I write this module for convert the expression code to char code
def pickup(path):
fp = file(path)
wfp = file(path.replace("info", "txt"), "a")
while True :
mark = fp.read(2) # one message's start and end mark
if not mark:
break
fp.read(10) # the ten chars are useless for pickup.
flag = fp.read(1) # send flag 80 end,00 receive
message = ""
while True:
t = fp.read(2)
if mark != t:
message += t
else:
message = message.replace("\x20\x00", "")
message = message.decode("UTF-16") # if you have some function to convert the expression code to char code,plaese change this line "message=functionname(massage).decode("UTF-16")"
if "\x80" == flag:
wfp.write("SEND:" + message.encode("UTF-8") + "\r\n")
print "SEND: ", message
else:
wfp.write("RECEIVE: " + message.encode("UTF-8") + "\r\n")
print "RECEIVE:", message
pass # you can do more
del message
break
fp.close()
wfp.close()
del mark, flag, wfp, fp
if __name__ == "__main__":
print "Running--------"
pickup("e:\\msg.info")
print ":-" * 20