def AutoReceiveFriends(self, targetQQ): if config.AutoAgreeAddFriend == True: data = Packet.Pack_friendlistGetAutoInfoReq(self, targetQQ) self.FunSend(Coder.hexstr2str(data)) time.sleep(1) data1 = Packet.Pack_ProfileServicePbReqSystemMsgActionFriend( self, targetQQ) self.FunSend(Coder.hexstr2str(data1))
def online(self): self.FunSend(Coder.hexstr2str(self.Pack_OidbSvc_0x7a2_0())) self.Fun_recv() self.FunSend( Coder.hexstr2str(self.Pack_StatSvc_Register(self.qqnum, 7, 11, 0))) self.Fun_recv()
def SendFriendImageMsg(self, targetQQ, ImgName, ImgPath): ImaFileName = ImgName + '.jpg' data = Packet.SendImageMsg(self, '', targetQQ, ImgName, ImaFileName, ImgPath) self.FunSend(Coder.hexstr2str(data))
def login(self, verifyCode=None): '''登录''' #发送登录请求 packet = '' #包头 packet += Coder.trim('00 00 00 08 02 00 00 00 04 00') packet += Coder.num2hexstr(len(self.qqHexstr)/2+4, 4) packet += self.qqHexstr #TEA加密的包体 packet += self.packSendLoginMessage(verifyCode) #总包长 packet = Coder.num2hexstr(len(packet)/2+4, 4) + packet #发送请求 self.socket.sendall(Coder.hexstr2str(packet)) #接收请求 ret = self.socket.recv() pack = HexPacket(Coder.str2hexstr(ret)) #返回包头 pack.shr(4) pack.shr(8) pack.shr(2 + len(self.qqHexstr)/2) #返回包体 self.unpackRecvLoginMessage(pack.remain()) if self.alive: #登录成功 threading.Thread(target=self.startHeart).start() #心跳 return True elif self.verify: #需要验证码 pass else: return False
def login(self, verifyCode=None): '''登录''' #发送登录请求 packet = '' #包头 packet += Coder.trim('00 00 00 08 02 00 00 00 04 00') packet += Coder.num2hexstr(len(self.qqHexstr) / 2 + 4, 4) packet += self.qqHexstr #TEA加密的包体 packet += self.packSendLoginMessage(verifyCode) #总包长 packet = Coder.num2hexstr(len(packet) / 2 + 4, 4) + packet #发送请求 self.socket.sendall(Coder.hexstr2str(packet)) #接收请求 ret = self.socket.recv() pack = HexPacket(Coder.str2hexstr(ret)) #返回包头 pack.shr(4) pack.shr(8) pack.shr(2 + len(self.qqHexstr) / 2) #返回包体 self.unpackRecvLoginMessage(pack.remain()) if self.alive: #登录成功 threading.Thread(target=self.startHeart).start() #心跳 return True elif self.verify: #需要验证码 pass else: return False
def __init__(self): self.stub = self self.msg_count = 1 self.bcd_table = '0123456789ABCDEF' self.keys = "" self.keys = self.keys.replace('\r', '').replace('\n', '').replace(' ', '') self.keys = Coder.hexstr2str(Coder.trim(self.keys))
def Pack_StatSvc_Register(self, Uin, Bid, Status, timeStamp): data = JceFactory.Write_SvcReqRegister(Uin, Bid, Status, timeStamp) bin = out.WriteJceStruct(Coder.hexstr2str(data), 0) map = config.JceMap() map.key_type = config.TYPE_STRING1 map.value_type = config.TYPE_SIMPLE_LIST map.key = "SvcReqRegister" map.value = Coder.hexstr2str(bin) value = out.WriteMap(map, 0) bin = self.Write_RequestPacket(3, 0, 'PushService', 'SvcReqRegister', Coder.hexstr2str(value)) aaa = self.Make_login_sendSsoMsg('StatSvc.register', bin) return self.pack(aaa, 1)
def Pack_sendSsoMsg_simple(self, bin): msg = '' msg += out.WriteJceStruct(Coder.hexstr2str(bin), 0) ##十六进制转换字符串 map = config.JceMap() map.key_type = config.TYPE_STRING1 map.value_type = config.TYPE_SIMPLE_LIST map.key = 'SvcReqGet' map.value = Coder.hexstr2str(msg) ##十六进制转换字符串 value = out.WriteMap(map, 0) data = '' data += self.Write_RequestPacket(3, 1819559151, 'PushService', 'SvcReqGet', Coder.hexstr2str(value)) reee = Coder.num2hexstr(len(data) / 2 + 4, 4) + data return reee
def unpackRecvLoginMessage(data): data = TEA.detea_hexstr(data, '00'*16) pack = HexPacket(data) head = pack.shr(Coder.hexstr2num(pack.shr(4))-4) body = pack.remain(1) #head pack = HexPacket(head) Coder.hexstr2num(pack.shr(4)) #seq pack.shr(4) pack.shr(Coder.hexstr2num(pack.shr(4))-4) Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(4))-4)) #cmd pack.shr(Coder.hexstr2num(pack.shr(4))-4) #body pack = HexPacket(body) pack.shr(4 + 1 + 2 + 10 + 2) retCode = Coder.hexstr2num(pack.shr(1)) if retCode == 0: #登录成功 unpackRecvLoginSucceedMessage(pack.remain())
def SendGroupMemberImageMsg(self, GroupQQ, targetQQ, ImgName, ImgPath): #GroupQQ = '574240651' #targetQQ = '296603528' #ImgName = '936ee06bd035095c991c5a2572614ae4' ImaFileName = ImgName + '.jpg' #ImgPath = '/7b9da5a3-8b5b-462f-a03c-eb9c6f37ebb8A' data = Packet.SendImageMsg(self, GroupQQ, targetQQ, ImgName, ImaFileName, ImgPath) self.FunSend(Coder.hexstr2str(data))
def AutoReceiveAddGroup(self, targetQQ, GroupNumber): if config.AutoAgreeGroup == True: # data = Packet.ProfileServicePbReqSystemMsgNewGroup(self) # self.FunSend(Coder.hexstr2str(data)) # data1 = Packet.Pack_GetSimpleInfo(self,targetQQ) # self.FunSend(Coder.hexstr2str(data1)) # data2 = Packet.Pack_ProfileServicePbReqSystemMsgActionGroup(self,targetQQ,GroupNumber) # self.FunSend(Coder.hexstr2str(data2)) data = Packet.Pack_AutoReceiveGroupRequests( self, targetQQ, GroupNumber) self.FunSend(Coder.hexstr2str(data))
def unpackRecvLoginMessage(self, data): data = TEA.detea_hexstr(data, self.defaultKey) print 'undata:', data pack = HexPacket(data) head = pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) body = pack.remain(1) #head pack = HexPacket(head) Coder.hexstr2num(pack.shr(4)) #seq pack.shr(4) pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(4)) - 4)) #cmd pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) #body pack = HexPacket(body) pack.shr(4 + 1 + 2 + 10 + 2) retCode = Coder.hexstr2num(pack.shr(1)) if retCode == 0: #登录成功 self.unpackRecvLoginSucceedMessage(pack.remain()) print u'登录成功: ', self.nickname print 'qqkey', self.qqkey self.alive = True self.verify = False elif retCode == 2: #需要验证码 self.unpackRecvLoginVerifyMessage(pack.remain()) print self.verifyReason self.alive = False self.verify = True print self.verifyPicHexstr code = self.window.SetVerification(self.verifyPicHexstr) print code self.login(Coder.str2hexstr(code)) else: #登录失败 pack = HexPacket(TEA.detea_hexstr(pack.remain(), self.shareKey)) pack.shr(2 + 1 + 4 + 2) pack.shr(4) #type title = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(2)))) msg = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(2)))) print title, ': ', msg self.alive = False self.verify = False
def unpackRecvLoginMessage(self, data): data = TEA.detea_hexstr(data, self.defaultKey) pack = HexPacket(data) head = pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) body = pack.remain(1) #head pack = HexPacket(head) Coder.hexstr2num(pack.shr(4)) #seq pack.shr(4) pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(4)) - 4)) #cmd pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) #body pack = HexPacket(body) pack.shr(4 + 1 + 2 + 10 + 2) retCode = Coder.hexstr2num(pack.shr(1)) if retCode == 0: #登录成功 self.unpackRecvLoginSucceedMessage(pack.remain()) print u'登录成功: ', self.nickname self.alive = True self.verify = False elif retCode == 2: #需要验证码 self.unpackRecvLoginVerifyMessage(pack.remain()) print self.verifyReason self.alive = False self.verify = True threading.Thread(target=Img.showFromHexstr, args=(self.verifyPicHexstr, )).start() code = raw_input(u'请输入验证码:') self.login(Coder.str2hexstr(code)) else: #登录失败 pack = HexPacket(TEA.detea_hexstr(pack.remain(), self.shareKey)) pack.shr(2 + 1 + 4 + 2) pack.shr(4) #type title = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(2)))) msg = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(2)))) print title, ': ', msg self.alive = False self.verify = False
def unpackRecvLoginMessage(self, data): data = TEA.detea_hexstr(data, self.defaultKey) pack = HexPacket(data) head = pack.shr(Coder.hexstr2num(pack.shr(4))-4) body = pack.remain(1) #head pack = HexPacket(head) Coder.hexstr2num(pack.shr(4)) #seq pack.shr(4) pack.shr(Coder.hexstr2num(pack.shr(4))-4) Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(4))-4)) #cmd pack.shr(Coder.hexstr2num(pack.shr(4))-4) #body pack = HexPacket(body) pack.shr(4 + 1 + 2 + 10 + 2) retCode = Coder.hexstr2num(pack.shr(1)) if retCode == 0: #登录成功 self.unpackRecvLoginSucceedMessage(pack.remain()) print u'登录成功: ', self.nickname self.alive = True self.verify = False elif retCode == 2: #需要验证码 self.unpackRecvLoginVerifyMessage(pack.remain()) print self.verifyReason self.alive = False self.verify = True threading.Thread(target=Img.showFromHexstr, args=(self.verifyPicHexstr, )).start() code = raw_input(u'请输入验证码:') self.login(Coder.str2hexstr(code)) else: #登录失败 pack = HexPacket(TEA.detea_hexstr(pack.remain(), self.shareKey)) pack.shr(2 + 1 + 4 + 2) pack.shr(4) #type title = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(2)))) msg = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(2)))) print title, ': ', msg self.alive = False self.verify = False
def Fun_recv(self): list = [] ret = self.socket.recv() if ret: if ret == '0': return try: retdata = Coder.str2hexstr(ret) while retdata: n = retdata[:8] long = Coder.hexstr2num(n) * 2 list.append(retdata[:long]) retdata = retdata[long:] for item in list: qq = self.qqHexstr + '(.*)' data1 = re.findall(qq, item)[0] data = TEA.detea_hexstr(data1, self.qqkey) pack = HexPacket(data) head = pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) body = pack.remain(1) #head pack = HexPacket(head) Coder.hexstr2num(pack.shr(4)) #seq pack.shr(4) pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) cmd = Coder.hexstr2str( pack.shr(Coder.hexstr2num(pack.shr(4)) - 4)) #cmd print '##################', cmd, '#####################' pack.shr(Coder.hexstr2num(pack.shr(4)) - 4) self.unpack(cmd, body) except: traceback.print_exc() else: print '返回包为空'
def decodeTlv(self, cmd, data): if cmd == Coder.trim('01 6A'): pass elif cmd == Coder.trim('01 06'): pass elif cmd == Coder.trim('01 0C'): pass elif cmd == Coder.trim('01 0A'): self.token004c = data elif cmd == Coder.trim('01 0D'): pass elif cmd == Coder.trim('01 14'): pack = HexPacket(data) pack.shr(6) self.token0058 = pack.shr(Coder.hexstr2num(pack.shr(2))) elif cmd == Coder.trim('01 0E'): self.mst1Key = data elif cmd == Coder.trim('01 03'): self.stweb = data elif cmd == Coder.trim('01 1F'): pass elif cmd == Coder.trim('01 38'): pass elif cmd == Coder.trim('01 1A'): pack = HexPacket(data) pack.shr(2 + 1 + 1) self.nickname = Coder.hexstr2str( pack.shr(Coder.hexstr2num(pack.shr(1)))) elif cmd == Coder.trim('01 20'): self.skey = data elif cmd == Coder.trim('01 36'): self.vkey = data elif cmd == Coder.trim('01 1A'): pass elif cmd == Coder.trim('01 20'): pass elif cmd == Coder.trim('01 36'): pass elif cmd == Coder.trim('03 05'): self.sessionKey = data elif cmd == Coder.trim('01 43'): self.token002c = data elif cmd == Coder.trim('01 64'): self.sid = data elif cmd == Coder.trim('01 18'): pass elif cmd == Coder.trim('01 63'): pass elif cmd == Coder.trim('01 30'): pack = HexPacket(data) pack.shr(2) self.server_time = pack.shr(4) self.ip = Coder.hexstr2ip(pack.shr(4)) elif cmd == Coder.trim('01 05'): pack = HexPacket(data) self.verifyToken1 = pack.shr(Coder.hexstr2num(pack.shr(2))) self.verifyPicHexstr = pack.shr(Coder.hexstr2num(pack.shr(2))) elif cmd == Coder.trim('01 04'): self.verifyToken2 = data elif cmd == Coder.trim('01 65'): pack = HexPacket(data) pack.shr(4) title = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(1)))) msg = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(4)))) self.verifyReason = title + ": " + msg elif cmd == Coder.trim('01 08'): self.ksid = data elif cmd == Coder.trim('01 6D'): self.superKey = data elif cmd == Coder.trim('01 6C'): self.psKey = data else: print 'unknown tlv: ' print cmd, ': ', data
def sendMsg(self, qqnumber, text): data = Packet.Pack_MessageSvc_offlinemsg(self, qqnumber, text) self.FunSend(Coder.hexstr2str(data))
def GetQQnumber(self, phone): data = Packet.Pack_SummaryCardReqSummaryCard(self, phone, self.qqnum) print data self.FunSend(Coder.hexstr2str(data))
def GetGroupInfo(self, GroupNumber): data = Packet.Pack_FriendListServiceServantObj_GetTroopMemberListReq( self, GroupNumber) self.FunSend(Coder.hexstr2str(data))
def GetGroupManager(self, GroupNumbar): data = Packet.Pack_ProfileServiceReqBatchProcess(self, GroupNumbar) self.FunSend(Coder.hexstr2str(data))
def AddfriendGroup(self, name): data = Packet.Pack_friendlistSetGroupReq(self, name) self.FunSend(Coder.hexstr2str(data))
def GetfriendWidget(self): data = Packet.Pack_QzoneNewService_getWidget(self) self.FunSend(Coder.hexstr2str(data))
def decodeTlv(self, cmd, data): if cmd == Coder.trim('01 6A'): pass elif cmd == Coder.trim('01 06'): pass elif cmd == Coder.trim('01 0C'): pass elif cmd == Coder.trim('01 0A'): self.token004c = data elif cmd == Coder.trim('01 0D'): pass elif cmd == Coder.trim('01 14'): pack = HexPacket(data) pack.shr(6) self.token0058 = pack.shr(Coder.hexstr2num(pack.shr(2))) elif cmd == Coder.trim('01 0E'): self.mst1Key = data elif cmd == Coder.trim('01 03'): self.stweb = data elif cmd == Coder.trim('01 1F'): pass elif cmd == Coder.trim('01 38'): pass elif cmd == Coder.trim('01 1A'): pack = HexPacket(data) pack.shr(2 + 1 + 1) self.nickname = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(1)))) elif cmd == Coder.trim('01 20'): self.skey = data elif cmd == Coder.trim('01 36'): self.vkey = data elif cmd == Coder.trim('01 1A'): pass elif cmd == Coder.trim('01 20'): pass elif cmd == Coder.trim('01 36'): pass elif cmd == Coder.trim('03 05'): self.sessionKey = data elif cmd == Coder.trim('01 43'): self.token002c = data elif cmd == Coder.trim('01 64'): self.sid = data elif cmd == Coder.trim('01 18'): pass elif cmd == Coder.trim('01 63'): pass elif cmd == Coder.trim('01 30'): pack = HexPacket(data) pack.shr(2) self.server_time = pack.shr(4) self.ip = Coder.hexstr2ip(pack.shr(4)) elif cmd == Coder.trim('01 05'): pack = HexPacket(data) self.verifyToken1 = pack.shr(Coder.hexstr2num(pack.shr(2))) self.verifyPicHexstr = pack.shr(Coder.hexstr2num(pack.shr(2))) elif cmd == Coder.trim('01 04'): self.verifyToken2 = data elif cmd == Coder.trim('01 65'): pack = HexPacket(data) pack.shr(4) title = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(1)))) msg = Coder.hexstr2str(pack.shr(Coder.hexstr2num(pack.shr(4)))) self.verifyReason = title + ": " + msg elif cmd == Coder.trim('01 08'): self.ksid = data elif cmd == Coder.trim('01 6D'): self.superKey = data elif cmd == Coder.trim('01 6C'): self.psKey = data else: print 'unknown tlv: ' print cmd, ': ', data
def getGroupList(self): """ 获取群列表 """ req = Packet.Pack_FriendListService_GetTroopListReqV2(self) self.FunSend(Coder.hexstr2str(req))
def Addfriend(self, addqqnum, msg): self.Addvalidation = msg data = Packet.Pack_friendlist_getUserAddFriendSetting(self, addqqnum) self.FunSend(Coder.hexstr2str(data))
def AddGroup(self, addgroupnum, msg): data = Packet.Pack_ProfileService_GroupMngReq(self, addgroupnum, msg) self.FunSend(Coder.hexstr2str(data))
def SendGroupMsg(self, qqgroup_number, msg): data = Packet.Pack_MessageSvc_SendGroupMsg(self, qqgroup_number, msg) self.FunSend(Coder.hexstr2str(data))
def getmessage(self): k = '00000023000000174d6573736167655376632e50624765744d73670000000854e96b10' pb = k + PB.getmsg() + '01' body = TEA.entea_hexstr(pb, self.qqkey) value = self.pack(body, 2) self.FunSend(Coder.hexstr2str(value))
def SetGroupCardName(self, name, groupname): data = Packet.Pack_friendlistModifyGroupCardReq(self, name, groupname) self.FunSend(Coder.hexstr2str(data))
def GroupRemovesMember(self, targetQQ, GroupNumber): data = Packet.Pack_GroupRemovesMember(self, targetQQ, GroupNumber) self.FunSend(Coder.hexstr2str(data))
def GetSearchkey(self, key): data = Packet.Pack_SummaryCardServantObj_ReqCondSearch(self, key) self.FunSend(Coder.hexstr2str(data))
def GetNearPeople(self, longitude, latitude): long = int(str(longitude * 1000000)[:9]) lat = int(str(latitude * 1000000)[:8]) data = Packet.Pack_EncounterSvc_ReqGetEncounter(self, long, lat) self.FunSend(Coder.hexstr2str(data))
def GetQzoneAppList(self, targetQQ): data = Packet.Pack_QzoneNewService_getApplist(self, targetQQ) self.FunSend(Coder.hexstr2str(data))