예제 #1
0
 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))
예제 #2
0
    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()
예제 #3
0
    def SendFriendImageMsg(self, targetQQ, ImgName, ImgPath):

        ImaFileName = ImgName + '.jpg'

        data = Packet.SendImageMsg(self, '', targetQQ, ImgName, ImaFileName,
                                   ImgPath)
        self.FunSend(Coder.hexstr2str(data))
예제 #4
0
    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
예제 #5
0
파일: AndroidQQ.py 프로젝트: cih315/jqq
    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
예제 #6
0
파일: qq_wallet.py 프로젝트: forqqpick/pyqq
 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))
예제 #7
0
    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)
예제 #8
0
    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
예제 #9
0
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())
예제 #10
0
 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))
예제 #11
0
 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))
예제 #12
0
 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
예제 #13
0
파일: AndroidQQ.py 프로젝트: cih315/jqq
 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
예제 #14
0
 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
예제 #15
0
    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 '返回包为空'
예제 #16
0
파일: AndroidQQ.py 프로젝트: cih315/jqq
 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
예제 #17
0
 def sendMsg(self, qqnumber, text):
     data = Packet.Pack_MessageSvc_offlinemsg(self, qqnumber, text)
     self.FunSend(Coder.hexstr2str(data))
예제 #18
0
 def GetQQnumber(self, phone):
     data = Packet.Pack_SummaryCardReqSummaryCard(self, phone, self.qqnum)
     print data
     self.FunSend(Coder.hexstr2str(data))
예제 #19
0
 def GetGroupInfo(self, GroupNumber):
     data = Packet.Pack_FriendListServiceServantObj_GetTroopMemberListReq(
         self, GroupNumber)
     self.FunSend(Coder.hexstr2str(data))
예제 #20
0
 def GetGroupManager(self, GroupNumbar):
     data = Packet.Pack_ProfileServiceReqBatchProcess(self, GroupNumbar)
     self.FunSend(Coder.hexstr2str(data))
예제 #21
0
 def AddfriendGroup(self, name):
     data = Packet.Pack_friendlistSetGroupReq(self, name)
     self.FunSend(Coder.hexstr2str(data))
예제 #22
0
 def GetfriendWidget(self):
     data = Packet.Pack_QzoneNewService_getWidget(self)
     self.FunSend(Coder.hexstr2str(data))
예제 #23
0
 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
예제 #24
0
 def getGroupList(self):
     """
     获取群列表
     """
     req = Packet.Pack_FriendListService_GetTroopListReqV2(self)
     self.FunSend(Coder.hexstr2str(req))
예제 #25
0
 def Addfriend(self, addqqnum, msg):
     self.Addvalidation = msg
     data = Packet.Pack_friendlist_getUserAddFriendSetting(self, addqqnum)
     self.FunSend(Coder.hexstr2str(data))
예제 #26
0
 def AddGroup(self, addgroupnum, msg):
     data = Packet.Pack_ProfileService_GroupMngReq(self, addgroupnum, msg)
     self.FunSend(Coder.hexstr2str(data))
예제 #27
0
 def SendGroupMsg(self, qqgroup_number, msg):
     data = Packet.Pack_MessageSvc_SendGroupMsg(self, qqgroup_number, msg)
     self.FunSend(Coder.hexstr2str(data))
예제 #28
0
 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))
예제 #29
0
 def SetGroupCardName(self, name, groupname):
     data = Packet.Pack_friendlistModifyGroupCardReq(self, name, groupname)
     self.FunSend(Coder.hexstr2str(data))
예제 #30
0
 def GroupRemovesMember(self, targetQQ, GroupNumber):
     data = Packet.Pack_GroupRemovesMember(self, targetQQ, GroupNumber)
     self.FunSend(Coder.hexstr2str(data))
예제 #31
0
 def GetSearchkey(self, key):
     data = Packet.Pack_SummaryCardServantObj_ReqCondSearch(self, key)
     self.FunSend(Coder.hexstr2str(data))
예제 #32
0
 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))
예제 #33
0
 def GetQzoneAppList(self, targetQQ):
     data = Packet.Pack_QzoneNewService_getApplist(self, targetQQ)
     self.FunSend(Coder.hexstr2str(data))