Пример #1
0
 def getAccessSmaliSet(self):
     """ check smalilist to build access num to name map """
     for s in self.smaliList:
         sName = Smali.getSmaliName(s)
         aSmali = AccessSmali(sName)
         mode = 0
         method = ""
         for line in open(os.path.join(self.path, s), 'r'):
             if (mode == 0):
                 match = patternMethodBegin.match(line)
                 if(match):
                     method = Method(match.group("accessnum"), match.group("parameterlist"), match.group("returntype"))
                     mode = 1
             elif (mode == 1):
                 match = patternMethodEnd.match(line)
                 if(match):
                     method.endMethod()
                     mode = 0
                     aSmali.addMethod(method.accessNum, method.accessName)
                 else:
                     match = patternMethodAnnotation.match(line)
                     if(match):
                         continue
                     match = patternMethodCall.match(line)
                     if(match):
                         method.addCallLine(match.group("operation"), match.group("operationobject"), match.group(0))
                     else:
                         method.addMethodLine(line)
         if (aSmali.getMethodNumSetLen() > 0):
             aSmali.createNumMap()
             self.accessSmaliSet[sName] = aSmali
Пример #2
0
    def doNumToName(self):
        allMethodCallNumMap = {}
        for sName in self.accessSmaliSet.keys():
            callNumMap = self.accessSmaliSet[sName].methodCallNumMap
            for callNum in callNumMap.keys():
                if callNum not in allMethodCallNumMap.keys():
                    allMethodCallNumMap[callNum] = callNumMap[callNum]
                else:
                    raise ValueError("method call num map duplicate")

        for s in self.smaliList:
            sFile = File(os.path.join(self.path, s))
            sName = Smali.getSmaliName(s)
            if sName in self.accessSmaliSet.keys():
                sFile.replaces(self.accessSmaliSet[sName].methodDefNumMap)
            sFile.replaces(allMethodCallNumMap)
Пример #3
0
    def doNameToNum(self):
        allMethodCallNameMap = {}
        for aSmali in self.accessSmaliSet.keys():
            self.accessSmaliSet[aSmali].createNameMap()
            callNameMap = self.accessSmaliSet[aSmali].methodCallNameMap
            for callName in callNameMap.keys():
                if callName not in allMethodCallNameMap.keys():
                    allMethodCallNameMap[callName] = callNameMap[callName]
                else:
                    raise ValueError("method call name map duplicate")

        for s in self.smaliList:
            sFile = File(os.path.join(self.path, s))
            sName = Smali.getSmaliName(s)
            if sName in self.accessSmaliSet.keys():
                sFile.replaces(self.accessSmaliSet[sName].methodDefNameMap)
            sFile.replaces(allMethodCallNameMap)
Пример #4
0
    def doNameToNum(self):
        allMethodCallNameMap = {}
        for aSmali in self.accessSmaliSet.keys():
            self.accessSmaliSet[aSmali].createNameMap()
            callNameMap = self.accessSmaliSet[aSmali].methodCallNameMap
            for callName in callNameMap.keys():
                if callName not in allMethodCallNameMap.keys():
                    allMethodCallNameMap[callName] = callNameMap[callName]
                else:
                    raise ValueError("method call name map duplicate")

        for s in self.smaliList:
            sFile = File(os.path.join(self.path, s))
            sName = Smali.getSmaliName(s)
            if sName in self.accessSmaliSet.keys():
                sFile.replaces(self.accessSmaliSet[sName].methodDefNameMap)
            sFile.replaces(allMethodCallNameMap)