def processPackageInfo(self, binData, start, length):
        start += length
        length = 2
        minVrsn = Util.convertDataToPrint(binData, start, length)

        start += length
        length = 2
        majVrsn = Util.convertDataToPrint(binData, start, length)
        print('        package version ', majVrsn + '.' + minVrsn)

        start += length
        length = 2
        aidLength = (int)(Util.convertDataToPrint(binData, start, length), 16)
        print('        package aid length, ', aidLength)

        aid = ''
        index = 0
        while index < aidLength:
            start += length
            length = 2
            aid += '0x' + Util.convertDataToPrint(binData, start, length) + ':'
            index += 1
        print('        package aid ' + aid)

        return start, length
Ejemplo n.º 2
0
    def customComponentInfo(self, start, length):
        start += length
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('        custom component tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('        custom component size, ' + "0x" + size)

        start += length
        length = 2
        aidLength = Util.convertDataToPrint(self.binData, start, length)
        print('        custom component aid length, ' + "0x" + aidLength)

        aid = ''
        for item in range((int)(aidLength, 16)):
            start += length
            length = 2
            aid += '0x' + Util.convertDataToPrint(self.binData, start,
                                                  length) + ':'

        print('        custom component aid ' + aid)

        return start, length
    def processClassExportInfo(self, start, length):
        start += length
        length = 4
        classOffset = Util.convertDataToPrint(self.binData, start, length)
        print('        class_offset, ', classOffset)

        start += length
        length = 2
        static_field_count = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('        static_field_count, ', static_field_count)

        start += length
        length = 2
        static_method_count = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('        static_method_count, ', static_method_count)

        index = 0
        while index < static_field_count:
            start += length
            length = 4
            static_field_offsets = Util.convertDataToPrint(
                self.binData, start, length)
            print('        static_field_offsets, ', static_field_offsets)

        index = 0
        while index < static_method_count:
            start += length
            length = 4
            static_method_offsets = Util.convertDataToPrint(
                self.binData, start, length)
            print('        static_method_offsets, ', static_method_offsets)

        return start, length
    def processClassComp(self, descCmp):
        classCount = 0

        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 4
        sigLength = (int)(Util.convertDataToPrint(self.binData, start, length))
        print('    signature pool length, ', sigLength)

        while ((sigLength) > 0):
            #define when package defines any remote interfaces or remote classes.
            start, length = self.typeDescriptor(start, length)
            sigLength -= 1

        #get class count from descriptor component
        while (classCount < descCmp.getClassCount()):
            print('    class, ', classCount + 1)
            start, length = self.interfaceClassInfo(start, length)
            classCount += 1
            print(' ')
    def classRefInfo(self, start, length, prnt):
        start, length = self.classRefProcess(self.binData, start, length, prnt)

        start += length
        length = 2
        padding = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('               padding ' + padding), prnt)

        return start, length
Ejemplo n.º 6
0
    def processIntegerInfo(self, binData, start, length):
        infTag = Util.convertDataToPrint(binData, start, length)
        print('            tag, ' + infTag)

        start += length
        length = 8
        value = Util.convertDataToPrint(binData, start, length)

        print('            bytes, ' + value)
        return start, length
Ejemplo n.º 7
0
   def ilookupswitch(self, index, byteCode, start, prnt): 
       Util.printOnConsole(('              '+ self.ByteCodeTable[byteCode]), prnt) 
       start += 2
       length = 4
       
       start += length
       length = 4
       npairs = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
 
       return (5 + (npairs*6))
    def processMethodComp(self, cpCmp, prnt):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('    tag, ' + infTag), prnt)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('    size, ' + "0x" + size), prnt)

        start += length
        length = 2
        hndlrCount = (int)(Util.convertDataToPrint(self.binData, start,
                                                   length), 16)
        Util.printOnConsole(
            ('    exception handlers count, ' + str(hndlrCount)), prnt)

        while ((hndlrCount) > 0):
            start, length = self.processExceptionHandlerInfo(
                cpCmp, start, length, prnt)
            hndlrCount -= 1

        byteCodeCount = (int)(size, 16) - (start)
        start, length = self.parseMethodInfo(start, length, byteCodeCount,
                                             prnt)
    def instanceFieldRefInfo(self, start, length, prnt):

        start, length = self.classRefProcess(self.binData, start, length, prnt)

        start += length
        length = 2
        token = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('               instance field token, ' + token),
                            prnt)

        return start, length
Ejemplo n.º 10
0
    def processClassRefInfo(self, binData, start, length):
        infTag = Util.convertDataToPrint(binData, start, length)
        print('            tag, ' + infTag)

        start += length
        length = 4
        nameIndex = Util.convertDataToPrint(binData, start, length)

        print('            name index into the constant_pool table, ' +
              nameIndex)
        return start, length
    def superMethoddRefInfo(self, start, length, prnt):

        start, length = self.classRefProcess(self.binData, start, length, prnt)

        start += length
        length = 2
        token = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('               super method token, ' + token),
                            prnt)

        return start, length
Ejemplo n.º 12
0
    def itableswitch(self, index, byteCode, start, prnt): 	
        Util.printOnConsole(('              '+ self.ByteCodeTable[byteCode]), prnt)
        start += 2
        length = 4
        
        start += length
        length = 8
        low = (int)(Util.convertDataToPrint(self.binData, start, length), 16)

        start += length
        length = 8        
        high = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
        arrsize = high - low + 1;  
        return (11 + (arrsize*2))
    def typeDescriptor(self, start, length):
        start += length
        length = 2
        nibbleCount = (int)(Util.convertDataToPrint(self.binData, start,
                                                    length), 16)

        indx = 0
        while (indx < ((nibbleCount + 1) / 2)):
            start += length
            length = 1
            typeNibble = (int)(Util.convertDataToPrint(self.binData, start,
                                                       length), 16)
            if (0x1 == typeNibble):
                print('        The type is void')
            if (0x2 == typeNibble):
                print('        The type is boolean')
            if (0x3 == typeNibble):
                print('        The type is byte')
            if (0x4 == typeNibble):
                print('        The type is short')
            if (0x5 == typeNibble):
                print('        The type is int')
            if (0x6 == typeNibble):
                print('        The type is reference')
                start, length = ConstantPoolComp().classRefProcess(
                    self.binData, start, length, 'printOnConsole')
                #padding
                start += length

            if (0xA == typeNibble):
                print('        The type is array of boolean')
            if (0xB == typeNibble):
                print('        The type is array of byte')
                #padding
                start += length

            if (0xC == typeNibble):
                print('        The type is array of short')
            if (0xD == typeNibble):
                print('        The type is array of int')
            if (0xE == typeNibble):
                print('        The type is array of reference')
                start, length = ConstantPoolComp().classRefProcess(
                    self.binData, start, length, 'printOnConsole')
                #padding
                start += length

        return start, length
Ejemplo n.º 14
0
    def processUtf8Info(self, binData, start, length):
        infTag = Util.convertDataToPrint(binData, start, length)
        print('            tag, ' + infTag)

        start += length
        length = 4
        byteLenth = Util.convertDataToPrint(binData, start, length)
        print('            string length, ' + byteLenth)
        nameBytes = ''
        for item in range((int)(byteLenth, 16)):
            start += length
            length = 2
            nameBytes += chr(
                int(Util.convertDataToPrint(binData, start, length), 16))

        print('            string, ' + nameBytes)
        return start, length
    def arrayInitValues(self, start, length, valueSize):
        start += length
        length = 4
        count = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
        print('        count, ', count)

        index = 0
        print('        initial values of the array, ')
        while (index < count):
            start += length
            length = valueSize
            value = (int)(Util.convertDataToPrint(self.binData, start, length),
                          16)
            print('                                ', value)
            index += 1

        return start, length
    def processStaticFieldComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 4
        imageSize = (int)(Util.convertDataToPrint(self.binData, start, length),
                          16)
        print('    image_size, ', imageSize)

        start += length
        length = 4
        refCount = (int)(Util.convertDataToPrint(self.binData, start, length),
                         16)
        print('    reference_count, ', refCount)

        start += length
        length = 4
        arrayInitCount = (int)(Util.convertDataToPrint(self.binData, start,
                                                       length), 16)
        print('    array_init_count, ', arrayInitCount)

        index = 0
        while index < arrayInitCount:
            start, length = self.arrayInitInfo(start, length)
            index += 1

        start += length
        length = 4
        defaultValueCount = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('    default_value_count, ', defaultValueCount)

        start += length
        length = 4
        nonDefaultValueCount = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('    non_default_value_count, ', nonDefaultValueCount)

        index = 0
        print('        non-default values of the array, ')
        while index < nonDefaultValueCount:
            start += length
            length = 2
            value = (int)(Util.convertDataToPrint(self.binData, start, length),
                          16)
            print('                                ', value)
            index += 1
    def classRefProcess(self, binData, start, length, prnt):
        start += length
        length = 4
        classRef = Util.convertDataToPrint(binData, start, length)
        extrnalRef = ((int(Util.convertDataToPrint(binData, start, 2), 16)
                       & 0x80) == 0x80)
        if (extrnalRef):
            packageToken = Util.convertDataToPrint(classRef, 0, 2)
            Util.printOnConsole(
                ('               Package Token: ' + packageToken), prnt)
            classToken = Util.convertDataToPrint(classRef, 2, 2)
            Util.printOnConsole(('               Class Token: ' + classToken),
                                prnt)
        else:
            Util.printOnConsole(
                ('               Internal Class Ref: ' + classRef), prnt)

        return start, length
    def processUTF8Info(self, start, length):
        start += length
        length = 4
        string_length = (int)(Util.convertDataToPrint(self.binData, start,
                                                      length), 16)
        #print('        string length, ',string_length)

        name = ''
        index = 0
        while index < string_length:
            start += length
            length = 2
            name += chr(
                int(Util.convertDataToPrint(self.binData, start, length), 16))
            index += 1
        print('                      ' + name)

        return start, length
Ejemplo n.º 19
0
    def processAppletComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print ('    tag, '+infTag)
            
        start += length 
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, '+"0x"+size)
        
        start += length 
        length = 2
        count = Util.convertDataToPrint(self.binData, start, length)
        print('    count, ', count)

        for item in range((int)(count, 16)):
            start, length = self.processAppletsInfo(start, length)
    def processPackageNameInfo(self, start, length):
        start += length
        length = 2
        nameLength = (int)(Util.convertDataToPrint(self.binData, start,
                                                   length), 16)
        print('            package name length ', nameLength)

        name = ''
        index = 0
        while index < nameLength:
            start += length
            length = 2
            name += chr(
                int(Util.convertDataToPrint(self.binData, start, length), 16))
            index += 1
        print('            package name ' + name)

        return start, length
Ejemplo n.º 21
0
 def parse(self):
     dao = Dao()
     sql = "select id , href from tb_cinfo"
     res = dao.executeQuerySql(sql)
     for r in res:
         cinfoId = r[0]
         cinfoHref = r[1]
         soup = Util.urlToSoup(cinfoHref)
         #获取上层歌单的描述信息
         cinfoDesc = soup.select("#intro")[0].get_text()
         sql = 'insert ignore into tb_cinfo (descri) values ("%s")' % (
             cinfoDesc)
         dao.executeSql(sql)
         #获取歌曲的信息
         musicList = soup.find(id="musicList")
         lis = musicList.select("li")
         for li in lis:
             li.select("p")
             musicName = li.select("p[class=m_name]")[0].select("a")[0].get(
                 "title")
             songer = li.select("p[class=s_name]")[0].select("a")[0].get(
                 "title")
             al = li.select("p[class=a_name]")[0].select("a")
             if al.__len__() == 0:
                 album = None
             else:
                 album = li.select("p[class=a_name]")[0].select("a")[0].get(
                     "title")
             musicHref = li.select("p[class=m_name]")[0].select("a")[0].get(
                 "href")
             musicId = musicHref[26:-1]
             mp3Url = Util.idToMp3Url(int(musicId))
             #插入歌曲信息
             sql = 'insert ignore into tb_music (id,name,songer,album,href,mp3) values(%d,"%s","%s","%s","%s","%s")' % (
                 int(musicId), musicName, songer, album, musicHref, mp3Url)
             #插入歌曲与cinfo关联信息
             sql1 = 'insert ignore into cinfo_music (cinfo_id,music_id) values (%d,%d)' % (
                 int(cinfoId), int(musicId))
             dao.executeSql(sql)
             dao.executeSql(sql1)
             print(
                 "id=%d,name=%s,songer=%s,  album=%s, cinfoHref=%s  musicHref=%s,  mp3=%s"
                 % (int(musicId), musicName, songer, album, cinfoHref,
                    musicHref, mp3Url))
Ejemplo n.º 22
0
    def processFieldInfo(self, binData, start, length, exportFieldsCount):
        for item in range((int)(exportFieldsCount, 16)):
            start += length
            length = 2
            token = Util.convertDataToPrint(binData, start, length)
            print('        Field token ', token)

            start += length
            length = 4
            accessFlag = (int)(Util.convertDataToPrint(binData, start, length),
                               16)
            print('        access_flag ', accessFlag)
            if ((accessFlag & 0x0001) == 0x0001):
                print('            access modifier of the  field is - public')
            if ((accessFlag & 0x0004) == 0x0004):
                print(
                    '            access modifier of the  field is - protected')
            if ((accessFlag & 0x0008) == 0x0008):
                print('            access modifier of the  field is - static')
            if ((accessFlag & 0x0010) == 0x0010):
                print('            access modifier of the  field is - final')

            start += length
            length = 4
            nameIndex = Util.convertDataToPrint(binData, start, length)
            print('        name index into the constant_pool table, ' +
                  nameIndex)

            start += length
            length = 4
            descriptorIndex = Util.convertDataToPrint(binData, start, length)
            print('        descriptor index into the constant_pool table, ',
                  descriptorIndex)

            start += length
            length = 4
            attributesCount = Util.convertDataToPrint(binData, start, length)
            print('        number of additional attributes of this field, ',
                  attributesCount)

            start, length = self.processAttributesinfo(binData, start, length,
                                                       attributesCount)
        return start, length
Ejemplo n.º 23
0
    def processAppletsInfo(self, start, length):        
        start += length 
        length = 2
        aidLength = Util.convertDataToPrint(self.binData, start, length)
        print('        applet aid length, '+"0x"+aidLength)  

        aid=''
        for item in range((int)(aidLength, 16)):
            start += length 
            length = 2
            aid += '0x' + Util.convertDataToPrint(self.binData, start, length) + ':'
            
        print('        applet aid - '+ aid)
        
        start += length 
        length = 4
        offset = Util.convertDataToPrint(self.binData, start, length)
        print('        install method offset into the info item of the Method Component, ', offset)
        
        return start, length
    def processDebugComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 4
        string_count = (int)(Util.convertDataToPrint(self.binData, start,
                                                     length), 16)
        print('    string_count, ', string_count)

        index = 0
        while (index < string_count):
            start, length = self.processUTF8Info(start, length)
            index += 1
Ejemplo n.º 25
0
    def processExportComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 2
        class_count = (int)(Util.convertDataToPrint(self.binData, start,
                                                    length), 16)
        print('    class_count, ', class_count)

        index = 0
        while (index < class_count):
            start, length = self.processClassExportInfo(start, length)
            index += 1
Ejemplo n.º 26
0
    def staticFieldSizeInfo(self, start, length):
        start += length
        length = 4
        image_size = Util.convertDataToPrint(self.binData, start, length)
        print('        static field image size ', image_size)

        start += length
        length = 4
        array_init_count = Util.convertDataToPrint(self.binData, start, length)
        print(
            '        number of arrays initialized in all of the constructors in this package ',
            array_init_count)

        start += length
        length = 4
        array_init_size = Util.convertDataToPrint(self.binData, start, length)
        print(
            '        total number of bytes in all of the arrays initialized ',
            array_init_size)

        return start, length
Ejemplo n.º 27
0
    def processAttributesinfo(self, binData, start, length, attributesCount):
        for item in range((int)(attributesCount, 16)):
            start += length
            length = 4
            attributeIndex = Util.convertDataToPrint(binData, start, length)
            print('        attribute index into the constant_pool table,  ',
                  attributeIndex)

            start += length
            length = 8
            attributeLength = Util.convertDataToPrint(binData, start, length)
            print('        attribute_length ', attributeLength)

            start += length
            length = 4
            constantVlaueIndex = Util.convertDataToPrint(
                binData, start, length)
            print('        constantvlaue index into the constant_pool table ',
                  constantVlaueIndex)

        return start, length
Ejemplo n.º 28
0
    def processMethodInfo(self, binData, start, length, exportMethodsCount):
        for item in range((int)(exportMethodsCount, 16)):
            start += length
            length = 2
            token = Util.convertDataToPrint(binData, start, length)
            print('        Method token ', token)

            start += length
            length = 4
            accessFlag = (int)(Util.convertDataToPrint(binData, start, length),
                               16)
            print('        access_flag ', accessFlag)
            if ((accessFlag & 0x0001) == 0x0001):
                print('            access modifier of the  method is - public')
            if ((accessFlag & 0x0004) == 0x0004):
                print(
                    '            access modifier of the  method is - protected'
                )
            if ((accessFlag & 0x0008) == 0x0008):
                print('            access modifier of the  method is - static')
            if ((accessFlag & 0x0010) == 0x0010):
                print('            access modifier of the  method is - final')
            if ((accessFlag & 0x0400) == 0x0400):
                print(
                    '            access modifier of the  method is - abstract')

            start += length
            length = 4
            nameIndex = Util.convertDataToPrint(binData, start, length)
            print('        name index into the constant_pool table ',
                  nameIndex)

            start += length
            length = 4
            descriptorIndex = Util.convertDataToPrint(binData, start, length)
            print('        descriptor index into the constant_pool table, ',
                  descriptorIndex)

        return start, length
    def processReferenceLocationComp(self, cpComp, mtComp):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print ('    tag, '+infTag)
            
        start += length 
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, '+"0x"+size)
        
        start += length 
        length = 4
        byteIndexCount = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
        print('    byte_index_count, ', byteIndexCount)

        index = 0
        offsetinMethodInfo = 0
        while index < byteIndexCount:
            start += length 
            length = 2
            offsetToByteIndices = Util.convertDataToPrint(self.binData, start, length)
            print ('    offset_to_byte_indices, '+ offsetToByteIndices)
            offsetinMethodInfo += (int)(offsetToByteIndices, 16)
            if(offsetinMethodInfo == 255):
                continue
            print ('    offset to index in method info, which points to an entry in the constant pool ', offsetinMethodInfo)
            cpIndex = mtComp.getByteFromMethodInfo(offsetinMethodInfo)
            print ('    entry in the constant pool pointed by bytecode index ', cpIndex)
            cpComp.parseTheInfoForTheGivenIndex(cpIndex, 'printOnConsole')
            index += 1
            
        print(' ')
        start += length 
        length = 4
        byte2IndexCount = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
        print('    byte2_index_count, ', byte2IndexCount)

        index = 0
        offsetinMethodInfo = 0
        while index < byte2IndexCount:
            start += length 
            length = 2
            offsetToByte2Indices = Util.convertDataToPrint(self.binData, start, length)
            print ('    offset_to_byte2_indices, '+offsetToByte2Indices)
            offsetinMethodInfo += (int)(offsetToByte2Indices, 16)
            if(offsetinMethodInfo == 255):
                continue
            print ('    offset to index in method info, which points to an entry in the constant pool ', offsetinMethodInfo)
            cpIndex = mtComp.getByteFromMethodInfo(offsetinMethodInfo)
            print ('    entry in the constant pool pointed by bytecode index ', cpIndex)
            cpComp.parseTheInfoForTheGivenIndex(cpIndex, 'printOnConsole')
            index += 1
    def processCPComp(self, prnt):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('    tag, ' + infTag), prnt)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('    size, ' + "0x" + size), prnt)

        start += length
        length = 4
        count = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
        Util.printOnConsole(('    count, ' + str(count)), prnt)

        indx = 0
        while (indx < (count)):
            start += length
            length = 2
            self.constantPoolTable.update({indx: start})
            start, length = self.parseTheInfoForTheGivenIndex(indx, prnt)
            indx += 1