jebPlugins icon indicating copy to clipboard operation
jebPlugins copied to clipboard

AttributeError: 'NoneType' object has no attribute 'getSourceIndex'

Open salomon1184 opened this issue 9 years ago • 2 comments

AttributeError: 'NoneType' object has no attribute 'getSourceIndex'

salomon1184 avatar Jul 30 '15 03:07 salomon1184

author = 'flanker' ''' Util to extract Source info from dex and restore class name from proguard ''' from jeb.api import IScript from jeb.api.ui import View from collections import defaultdict

class sourceinfofucker(IScript):

def run(self, j):
    self.instance = j
    self.dex = j.getDex()

    pool = defaultdict(list)

    #ignore invalid source, i.e. "proguard" and other self-defined string
    for i in self.dex.getClassSignatures(True):
        cls = self.dex.getClass(i)
        #self.instance.print("Log: %s"%cls.getData())
        if cls is None:
            continue
        sourceIdx = cls.getSourceIndex()
        if sourceIdx != -1:
            source = self.dex.getString(sourceIdx)
            if source == "" or source.lower() == "proguard":
                continue
            if source.endswith(".java"):
                source = source[:-5]
            pool[source].append(i)

    if len(pool.keys()) == 0:
        self.instance.print("fuck! no class source info found.")
    elif len(pool.keys()) <= 2:
        #less than two distinct keys, we're fooled
        self.instance.print("fuck! we're fooled by %s. Stopping now" % pool.keys()[0])
    else:
        self.instance.print("renaming %d classes"%(len(pool.keys())))
        for k, v in pool.iteritems():
            for origin in v:
                #notice some inner class may share same Source Info
                self.instance.print("renaming from %s to %s" % (origin,k))
                self.instance.renameClass(origin, k)
        self.instance.print("renaming done")

        self.instance.getUI().getView(View.Type.JAVA).refresh()
        self.instance.getUI().getView(View.Type.ASSEMBLY).refresh()
        self.instance.getUI().getView(View.Type.CLASS_HIERARCHY).refresh()

salomon1184 avatar Jul 30 '15 03:07 salomon1184

Thanks for the report, can you provide test APK that can reproduce this issue? Thanks.

flankerhqd avatar Jul 30 '15 07:07 flankerhqd