示例#1
0
def method2format(output, _format="png", mx=None, raw=False):
    """
        Export method to a specific file format

        @param output : output filename
        @param _format : format type (png, jpg ...) (default : png)
        @param mx : specify the MethodAnalysis object
        @param raw : use directly a dot raw buffer
    """
    try:
        import pydot
    except ImportError:
        error("module pydot not found")

    buff = "digraph code {\n"
    buff += "graph [bgcolor=white];\n"
    buff += "node [color=lightgray, style=filled shape=box fontname=\"Courier\" fontsize=\"8\"];\n"

    if raw == False:
        buff += method2dot(mx)
    else:
        buff += raw

    buff += "}"

    d = pydot.graph_from_dot_data(buff)
    if d:
        getattr(d, "write_" + _format)(output)
示例#2
0
def method2format( output, _format="png", mx = None, raw = False ) :
    """
        Export method to a specific file format

        @param output : output filename
        @param _format : format type (png, jpg ...) (default : png)
        @param mx : specify the MethodAnalysis object
        @param raw : use directly a dot raw buffer
    """
    try :
        import pydot
    except ImportError :
        error("module pydot not found")

    buff = "digraph code {\n"
    buff += "graph [bgcolor=white];\n"
    buff += "node [color=lightgray, style=filled shape=box fontname=\"Courier\" fontsize=\"8\"];\n"

    if raw == False :
        buff += method2dot( mx )
    else :
        buff += raw

    buff += "}"

    d = pydot.graph_from_dot_data( buff )
    if d :
        getattr(d, "write_" + _format)( output )
示例#3
0
 def saveSession(self, filepath):
     """Save androguard session."""
     try:
         session_module.Save(self.session, filepath)
     except RuntimeError as e:
         androconf.error(str(e))
         os.remove(filepath)
         androconf.warning("Session not saved")
示例#4
0
 def saveSession(self, filepath):
     '''Save androguard session.'''
     try:
         session_module.Save(self.session, filepath)
     except RuntimeError as e:
         androconf.error(str(e))
         os.remove(filepath)
         androconf.warning("Session not saved")
示例#5
0
 def saveSession(self, path):
     '''Save androguard session.'''
     try:
         self.session.save(path)
     except RuntimeError as e:
         androconf.error(str(e))
         # http://stackoverflow.com/questions/2134706/hitting-maximum-recursion-depth-using-pythons-pickle-cpickle
         androconf.error("Try increasing sys.recursionlimit")
         os.remove(path)
         androconf.warning("Session not saved")
示例#6
0
 def saveSession(self, path):
     '''Save androguard session.'''
     try:
         self.session.save(path)
     except RuntimeError as e:
         androconf.error(str(e))
         # http://stackoverflow.com/questions/2134706/hitting-maximum-recursion-depth-using-pythons-pickle-cpickle
         androconf.error("Try increasing sys.recursionlimit")
         os.remove(path)
         androconf.warning("Session not saved")
示例#7
0
    def __init__(self, _analysis):
        self.__analysis = _analysis

        try:
            from networkx import DiGraph
            from networkx import draw_graphviz, write_dot
        except ImportError:
            error("module networkx not found")

        self.__G = DiGraph()

        for m in self.__analysis.get_methods():
            for bb in m.basic_blocks.get():
                for trace in bb.stack_traces.get():
                    for mre in jvm.MATH_JVM_RE:
                        if mre[0].match(trace[2].get_name()):
                            for i in trace[3].gets():
                                self._add(str(i))
    def __init__(self, _analysis) :
        self.__analysis = _analysis

        try :
            from networkx import DiGraph
            from networkx import draw_graphviz, write_dot
        except ImportError :
            error("module networkx not found")

        self.__G = DiGraph()

        for m in self.__analysis.get_methods() :
            for bb in m.basic_blocks.get() :
                for trace in bb.stack_traces.get() :
                    for mre in jvm.MATH_JVM_RE :
                        if mre[0].match( trace[2].get_name() ) :
                            for i in trace[3].gets() :
                                self._add( str(i) )
示例#9
0
def method2format(output, _format="png", mx=None, raw=None):
    """
        Export method to a specific file format

        @param output : output filename
        @param _format : format type (png, jpg ...) (default : png)
        @param mx : specify the MethodAnalysis object
        @param raw : use directly a dot raw buffer if None
    """
    try:
        import pydot
    except ImportError:
        error("module pydot not found")

    buff = "digraph {\n"
    buff += "graph [rankdir=TB]\n"
    buff += "node [shape=plaintext]\n"

    if raw:
        data = raw
    else:
        data = method2dot(mx)

    # subgraphs cluster
    buff += "subgraph cluster_" + \
        hashlib.md5(output).hexdigest() + " {\nlabel=\"%s\"\n" % data['name']
    buff += data['nodes']
    buff += "}\n"

    # subgraphs edges
    buff += data['edges']
    buff += "}\n"

    d = pydot.graph_from_dot_data(buff)
    if d:
        getattr(d, "write_" + _format.lower())(output)
示例#10
0
def method2format(output, _format="png", mx=None, raw=None):
    """
        Export method to a specific file format

        @param output : output filename
        @param _format : format type (png, jpg ...) (default : png)
        @param mx : specify the MethodAnalysis object
        @param raw : use directly a dot raw buffer if None
    """
    try:
        import pydot
    except ImportError:
        error("module pydot not found")

    buff = "digraph {\n"
    buff += "graph [rankdir=TB]\n"
    buff += "node [shape=plaintext]\n"

    if raw:
        data = raw
    else:
        data = method2dot(mx)

    # subgraphs cluster
    buff += "subgraph cluster_" + hashlib.md5(output).hexdigest(
    ) + " {\nlabel=\"%s\"\n" % data['name']
    buff += data['nodes']
    buff += "}\n"

    # subgraphs edges
    buff += data['edges']
    buff += "}\n"

    d = pydot.graph_from_dot_data(buff)
    if d:
        getattr(d, "write_" + _format.lower())(output)
示例#11
0
def create_system_method_one_score() :
    try :
        import fuzzy
    except ImportError :
        error("please install pyfuzzy to use this module !")

    import fuzzy.System
    import fuzzy.InputVariable
    import fuzzy.fuzzify.Plain
    import fuzzy.OutputVariable
    import fuzzy.defuzzify.COGS
    import fuzzy.set.Polygon
    import fuzzy.set.Singleton
    import fuzzy.set.Triangle
    import fuzzy.Adjective
    import fuzzy.operator.Input
    import fuzzy.operator.Compound
    import fuzzy.norm.Min
    import fuzzy.norm.Max
    import fuzzy.Rule
    
    system = fuzzy.System.System()

    input_Length_MS = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_AndroidEntropy_MS = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_JavaEntropy_MS = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Permissions_MS = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    
    # Input variables

        # Length 
    system.variables["input_Length_MS"] = input_Length_MS
    input_Length_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (50.0, 1.0), (100.0, 0.0)]) )
    input_Length_MS.adjectives[AVERAGE_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(50.0, 0.0), (100.0, 1.0), (150.0, 1.0), (300.0, 0.0)]) )
    input_Length_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(150.0, 0.0), (200.0, 1.0), (300.0, 1.0), (400.0, 0.0)]) )
    input_Length_MS.adjectives[PERFECT_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(350.0, 0.0), (400.0, 1.0), (500.0, 1.0)]) )

        # Android Entropy
    system.variables["input_AndroidEntropy_MS"] = input_AndroidEntropy_MS
    input_AndroidEntropy_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (4.0, 0.0)]) )
    input_AndroidEntropy_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(3.0, 0.0), (4.0, 1.0), (30.0, 1.0)]) )

        # Java Entropy
    system.variables["input_JavaEntropy_MS"] = input_JavaEntropy_MS
    input_JavaEntropy_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (4.0, 0.0)]) )
    input_JavaEntropy_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(3.0, 0.0), (4.0, 1.0), (30.0, 1.0)]) )
    
        # Permissions
    system.variables["input_Permissions_MS"] = input_Permissions_MS
    input_Permissions_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (3.0, 1.0), (4.0, 0.0)]) )
    input_Permissions_MS.adjectives[AVERAGE_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(3.0, 0.0), (4.0, 1.0), (8.0, 1.0), (9.0, 0.0)]) )
    input_Permissions_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(8.0, 0.0), (10.0, 1.0), (12.0, 1.0), (13.0, 0.0)]) )
    input_Permissions_MS.adjectives[PERFECT_SCORE] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(12.0, 0.0), (13.0, 1.0), (20.0, 1.0)]) )
    
    # Output variables
    output_method_score = fuzzy.OutputVariable.OutputVariable(
                                defuzzify=fuzzy.defuzzify.COGS.COGS(),
                                description="method one score",
                                min=0.0,max=100.0,
                             )
    output_method_score.adjectives[NULL_METHOD_SCORE] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(0.0))
    output_method_score.adjectives[AVERAGE_METHOD_SCORE] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(50.0))
    output_method_score.adjectives[HIGH_METHOD_SCORE] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(80.0))
    output_method_score.adjectives[PERFECT_METHOD_SCORE] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(100.0))

    system.variables["output_method_one_score"] = output_method_score
    
    add_system_rule(system, "android entropy null", fuzzy.Rule.Rule(
                                                        adjective=[system.variables["output_method_one_score"].adjectives[NULL_METHOD_SCORE]],
                                                        operator=fuzzy.operator.Input.Input( system.variables["input_AndroidEntropy_MS"].adjectives[LOW_SCORE] ))
    )
    
    add_system_rule(system, "java entropy null", fuzzy.Rule.Rule(
                                                        adjective=[system.variables["output_method_one_score"].adjectives[NULL_METHOD_SCORE]],
                                                        operator=fuzzy.operator.Input.Input( system.variables["input_JavaEntropy_MS"].adjectives[LOW_SCORE] ))
    )
    
    add_system_rule(system, "permissions null", fuzzy.Rule.Rule(
                                                        adjective=[system.variables["output_method_one_score"].adjectives[NULL_METHOD_SCORE]],
                                                        operator=fuzzy.operator.Input.Input( system.variables["input_Permissions_MS"].adjectives[LOW_SCORE] ))
    )
    
    add_system_rule(system, "permissions average", fuzzy.Rule.Rule(
                                                        adjective=[system.variables["output_method_one_score"].adjectives[AVERAGE_METHOD_SCORE]],
                                                        operator=fuzzy.operator.Input.Input( system.variables["input_Permissions_MS"].adjectives[AVERAGE_SCORE] ))
    )
    
    add_system_rule(system, "permissions high", fuzzy.Rule.Rule(
                                                        adjective=[system.variables["output_method_one_score"].adjectives[HIGH_METHOD_SCORE]],
                                                        operator=fuzzy.operator.Input.Input( system.variables["input_Permissions_MS"].adjectives[HIGH_SCORE] ))
    )
   
    add_system_rule(system, "permissions perfect", fuzzy.Rule.Rule(
                                                        adjective=[system.variables["output_method_one_score"].adjectives[PERFECT_METHOD_SCORE]],
                                                        operator=fuzzy.operator.Input.Input( system.variables["input_Permissions_MS"].adjectives[PERFECT_SCORE] ))
    )
   

    add_system_rule(system, "length permissions perfect", fuzzy.Rule.Rule(
                                    adjective=[system.variables["output_method_one_score"].adjectives[PERFECT_METHOD_SCORE]],
                                    operator=fuzzy.operator.Compound.Compound(
                                        fuzzy.norm.Min.Min(),
                                        fuzzy.operator.Input.Input( system.variables["input_Length_MS"].adjectives[PERFECT_SCORE] ),
                                        fuzzy.operator.Input.Input( system.variables["input_Permissions_MS"].adjectives[PERFECT_SCORE] ) )
                                    )
    )

    add_system_rule(system, "length AndroidEntropy perfect", fuzzy.Rule.Rule(
                                    adjective=[system.variables["output_method_one_score"].adjectives[HIGH_METHOD_SCORE]],
                                    operator=fuzzy.operator.Compound.Compound(
                                        fuzzy.norm.Min.Min(),
                                        fuzzy.operator.Input.Input( system.variables["input_Length_MS"].adjectives[PERFECT_SCORE] ),
                                        fuzzy.operator.Input.Input( system.variables["input_AndroidEntropy_MS"].adjectives[HIGH_SCORE] ) )
                                    )
    )
    
    add_system_rule(system, "length JavaEntropy perfect", fuzzy.Rule.Rule(
                                    adjective=[system.variables["output_method_one_score"].adjectives[HIGH_METHOD_SCORE]],
                                    operator=fuzzy.operator.Compound.Compound(
                                        fuzzy.norm.Min.Min(),
                                        fuzzy.operator.Input.Input( system.variables["input_Length_MS"].adjectives[PERFECT_SCORE] ),
                                        fuzzy.operator.Input.Input( system.variables["input_JavaEntropy_MS"].adjectives[HIGH_SCORE] ) )
                                    )
    )

    return system
示例#12
0
def create_system_risk() :
    try :
        import fuzzy
    except ImportError :
        error("please install pyfuzzy to use this module !")

    import fuzzy.System
    import fuzzy.InputVariable
    import fuzzy.fuzzify.Plain
    import fuzzy.OutputVariable
    import fuzzy.defuzzify.COGS
    import fuzzy.defuzzify.COG
    import fuzzy.defuzzify.MaxRight
    import fuzzy.defuzzify.MaxLeft
    import fuzzy.defuzzify.LM
    import fuzzy.set.Polygon
    import fuzzy.set.Singleton
    import fuzzy.set.Triangle
    import fuzzy.Adjective
    import fuzzy.operator.Input
    import fuzzy.operator.Compound
    import fuzzy.norm.Min
    import fuzzy.norm.Max
    import fuzzy.Rule
    import fuzzy.defuzzify.Dict

    system = fuzzy.System.System()

    input_Dangerous_Risk = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Money_Risk = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Privacy_Risk = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Binary_Risk = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Internet_Risk = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Dynamic_Risk = fuzzy.InputVariable.InputVariable(fuzzify=fuzzy.fuzzify.Plain.Plain())
    
    # Input variables

        # Dangerous Risk
    system.variables["input_Dangerous_Risk"] = input_Dangerous_Risk
    input_Dangerous_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (8.0, 1.0), (12.0, 0.0)]) )
    input_Dangerous_Risk.adjectives[AVERAGE_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(8.0, 0.0), (50.0, 1.0), (60.0, 0.0)]) )
    input_Dangerous_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(50.0, 0.0), (85.0, 1.0), (95.0, 0.0)]) )
    input_Dangerous_Risk.adjectives[UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(85.0, 0.0), (100.0, 1.0)]) )

        # Money Risk
    system.variables["input_Money_Risk"] = input_Money_Risk
    input_Money_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (3.0, 0.0)]) )
    input_Money_Risk.adjectives[UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(4.0, 0.0), (5.0, 1.0), (30.0, 1.0)]) )

        # Privacy Risk
    system.variables["input_Privacy_Risk"] = input_Privacy_Risk
    input_Privacy_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (6.0, 1.0), (10.0, 0.0)]) )
    input_Privacy_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(6.0, 0.0), (10.0, 1.0), (20.0, 0.0)]) )
    input_Privacy_Risk.adjectives[UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(15.0, 0.0), (20.0, 1.0), (30.0, 1.0)]) )
    
        # Binary Risk
    system.variables["input_Binary_Risk"] = input_Binary_Risk
    input_Binary_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (6.0, 1.0), (10.0, 0.0)]) )
    input_Binary_Risk.adjectives[AVERAGE_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(6.0, 0.0), (10.0, 1.0), (15.0, 0.0)]) )
    input_Binary_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(10.0, 0.0), (20.0, 1.0), (24.0, 0.0)]) )
    input_Binary_Risk.adjectives[UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(23.0, 0.0), (30.0, 1.0), (40.0, 1.0)]) )

        # Internet Risk
    system.variables["input_Internet_Risk"] = input_Internet_Risk
    #input_Internet_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (1.0, 1.0)]) )
    input_Internet_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(1.0, 0.0), (5.0, 1.0), (30.0, 1.0)]) )

        # Dynamic Risk
    system.variables["input_Dynamic_Risk"] = input_Dynamic_Risk
    input_Dynamic_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (3.0, 0.0)]))
    input_Dynamic_Risk.adjectives[UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(4.0, 0.0), (5.0, 1.0), (50.0, 1.0)]) )

    # Output variables
    output_malware_risk = fuzzy.OutputVariable.OutputVariable(
                            defuzzify=fuzzy.defuzzify.COGS.COGS(),
                            description="malware risk",
                            min=0.0,max=100.0,
                        )
    
    #output_malware_risk = fuzzy.OutputVariable.OutputVariable(defuzzify=fuzzy.defuzzify.Dict.Dict())

    output_malware_risk.adjectives[NULL_MALWARE_RISK] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(0.0))
    output_malware_risk.adjectives[AVERAGE_MALWARE_RISK] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(30.0))
    output_malware_risk.adjectives[HIGH_MALWARE_RISK] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(60.0))
    output_malware_risk.adjectives[UNACCEPTABLE_MALWARE_RISK] = fuzzy.Adjective.Adjective(fuzzy.set.Singleton.Singleton(100.0))
    
    system.variables["output_malware_risk"] = output_malware_risk

    # Rules
    #RULE 0: DYNAMIC 
    add_system_rule(system, "r0", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[NULL_MALWARE_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Dynamic_Risk"].adjectives[LOW_RISK] )
                    )
    )
    
    add_system_rule(system, "r0a", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[UNACCEPTABLE_MALWARE_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Dynamic_Risk"].adjectives[UNACCEPTABLE_RISK] )
                    )
    )
    

    #RULE 1: MONEY
    add_system_rule(system, "r1", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[NULL_MALWARE_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Money_Risk"].adjectives[LOW_RISK] )
                    )
    )

    add_system_rule(system, "r1a", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[UNACCEPTABLE_MALWARE_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Money_Risk"].adjectives[UNACCEPTABLE_RISK] )
                    )
    )
    
    #RULE 3 : BINARY
    add_system_rule(system, "r3", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[AVERAGE_MALWARE_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Binary_Risk"].adjectives[AVERAGE_RISK] )
                    )
    )
    
    add_system_rule(system, "r3a", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[HIGH_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Binary_Risk"].adjectives[HIGH_RISK] )
                    )
    )

    add_system_rule(system, "r3b", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[UNACCEPTABLE_MALWARE_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Binary_Risk"].adjectives[UNACCEPTABLE_RISK] )
                    )
    )
    
    # PRIVACY + INTERNET
    add_system_rule(system, "r5", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[HIGH_MALWARE_RISK]],
                                        operator=fuzzy.operator.Compound.Compound(
                                            fuzzy.norm.Min.Min(),
                                            fuzzy.operator.Input.Input( system.variables["input_Privacy_Risk"].adjectives[LOW_RISK] ),
                                            fuzzy.operator.Input.Input( system.variables["input_Internet_Risk"].adjectives[HIGH_RISK] ) )
                    )
    )
    add_system_rule(system, "r5a", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[UNACCEPTABLE_MALWARE_RISK]],
                                        operator=fuzzy.operator.Compound.Compound(
                                            fuzzy.norm.Min.Min(),
                                            fuzzy.operator.Input.Input( system.variables["input_Privacy_Risk"].adjectives[HIGH_RISK] ),
                                            fuzzy.operator.Input.Input( system.variables["input_Internet_Risk"].adjectives[HIGH_RISK] ) )
                    )
    )
    
    add_system_rule(system, "r6", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[HIGH_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Dangerous_Risk"].adjectives[HIGH_RISK] )
                    )
    )
    
    add_system_rule(system, "r6a", fuzzy.Rule.Rule(
                                        adjective=[system.variables["output_malware_risk"].adjectives[UNACCEPTABLE_RISK]],
                                        operator=fuzzy.operator.Input.Input( system.variables["input_Dangerous_Risk"].adjectives[UNACCEPTABLE_RISK] )
                    )
    )


    return system
示例#13
0
def create_system_method_one_score():
    try:
        import fuzzy
    except ImportError:
        error("please install pyfuzzy to use this module !")

    import fuzzy.System
    import fuzzy.InputVariable
    import fuzzy.fuzzify.Plain
    import fuzzy.OutputVariable
    import fuzzy.defuzzify.COGS
    import fuzzy.set.Polygon
    import fuzzy.set.Singleton
    import fuzzy.set.Triangle
    import fuzzy.Adjective
    import fuzzy.operator.Input
    import fuzzy.operator.Compound
    import fuzzy.norm.Min
    import fuzzy.norm.Max
    import fuzzy.Rule

    system = fuzzy.System.System()

    input_Length_MS = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_AndroidEntropy_MS = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_JavaEntropy_MS = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Permissions_MS = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())

    # Input variables

    # Length
    system.variables["input_Length_MS"] = input_Length_MS
    input_Length_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (50.0, 1.0), (100.0, 0.0)]))
    input_Length_MS.adjectives[AVERAGE_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(50.0, 0.0), (100.0, 1.0), (150.0, 1.0),
                                   (300.0, 0.0)]))
    input_Length_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(150.0, 0.0), (200.0, 1.0), (300.0, 1.0),
                                   (400.0, 0.0)]))
    input_Length_MS.adjectives[PERFECT_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(350.0, 0.0), (400.0, 1.0), (500.0, 1.0)]))

    # Android Entropy
    system.variables["input_AndroidEntropy_MS"] = input_AndroidEntropy_MS
    input_AndroidEntropy_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (4.0, 0.0)]))
    input_AndroidEntropy_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(3.0, 0.0), (4.0, 1.0), (30.0, 1.0)]))

    # Java Entropy
    system.variables["input_JavaEntropy_MS"] = input_JavaEntropy_MS
    input_JavaEntropy_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (4.0, 0.0)]))
    input_JavaEntropy_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(3.0, 0.0), (4.0, 1.0), (30.0, 1.0)]))

    # Permissions
    system.variables["input_Permissions_MS"] = input_Permissions_MS
    input_Permissions_MS.adjectives[LOW_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (3.0, 1.0), (4.0, 0.0)]))
    input_Permissions_MS.adjectives[AVERAGE_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(3.0, 0.0), (4.0, 1.0), (8.0, 1.0),
                                   (9.0, 0.0)]))
    input_Permissions_MS.adjectives[HIGH_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(8.0, 0.0), (10.0, 1.0), (12.0, 1.0),
                                   (13.0, 0.0)]))
    input_Permissions_MS.adjectives[PERFECT_SCORE] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(12.0, 0.0), (13.0, 1.0), (20.0, 1.0)]))

    # Output variables
    output_method_score = fuzzy.OutputVariable.OutputVariable(
        defuzzify=fuzzy.defuzzify.COGS.COGS(),
        description="method one score",
        min=0.0,
        max=100.0,
    )
    output_method_score.adjectives[
        NULL_METHOD_SCORE] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(0.0))
    output_method_score.adjectives[
        AVERAGE_METHOD_SCORE] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(50.0))
    output_method_score.adjectives[
        HIGH_METHOD_SCORE] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(80.0))
    output_method_score.adjectives[
        PERFECT_METHOD_SCORE] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(100.0))

    system.variables["output_method_one_score"] = output_method_score

    add_system_rule(
        system, "android entropy null",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_method_one_score"].
            adjectives[NULL_METHOD_SCORE]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_AndroidEntropy_MS"].
                            adjectives[LOW_SCORE])))

    add_system_rule(
        system, "java entropy null",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_method_one_score"].
            adjectives[NULL_METHOD_SCORE]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_JavaEntropy_MS"].
                            adjectives[LOW_SCORE])))

    add_system_rule(
        system, "permissions null",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_method_one_score"].
            adjectives[NULL_METHOD_SCORE]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Permissions_MS"].
                            adjectives[LOW_SCORE])))

    add_system_rule(
        system, "permissions average",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_method_one_score"].
            adjectives[AVERAGE_METHOD_SCORE]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Permissions_MS"].
                            adjectives[AVERAGE_SCORE])))

    add_system_rule(
        system, "permissions high",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_method_one_score"].
            adjectives[HIGH_METHOD_SCORE]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Permissions_MS"].
                            adjectives[HIGH_SCORE])))

    add_system_rule(
        system, "permissions perfect",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_method_one_score"].
            adjectives[PERFECT_METHOD_SCORE]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Permissions_MS"].
                            adjectives[PERFECT_SCORE])))

    add_system_rule(
        system, "length permissions perfect",
        fuzzy.Rule.Rule(
            adjective=[
                system.variables["output_method_one_score"].
                adjectives[PERFECT_METHOD_SCORE]
            ],
            operator=fuzzy.operator.Compound.Compound(
                fuzzy.norm.Min.Min(),
                fuzzy.operator.Input.Input(system.variables["input_Length_MS"].
                                           adjectives[PERFECT_SCORE]),
                fuzzy.operator.Input.Input(
                    system.variables["input_Permissions_MS"].
                    adjectives[PERFECT_SCORE]))))

    add_system_rule(
        system, "length AndroidEntropy perfect",
        fuzzy.Rule.Rule(
            adjective=[
                system.variables["output_method_one_score"].
                adjectives[HIGH_METHOD_SCORE]
            ],
            operator=fuzzy.operator.Compound.Compound(
                fuzzy.norm.Min.Min(),
                fuzzy.operator.Input.Input(system.variables["input_Length_MS"].
                                           adjectives[PERFECT_SCORE]),
                fuzzy.operator.Input.Input(
                    system.variables["input_AndroidEntropy_MS"].
                    adjectives[HIGH_SCORE]))))

    add_system_rule(
        system, "length JavaEntropy perfect",
        fuzzy.Rule.Rule(
            adjective=[
                system.variables["output_method_one_score"].
                adjectives[HIGH_METHOD_SCORE]
            ],
            operator=fuzzy.operator.Compound.Compound(
                fuzzy.norm.Min.Min(),
                fuzzy.operator.Input.Input(system.variables["input_Length_MS"].
                                           adjectives[PERFECT_SCORE]),
                fuzzy.operator.Input.Input(
                    system.variables["input_JavaEntropy_MS"].
                    adjectives[HIGH_SCORE]))))

    return system
示例#14
0
def create_system_risk():
    try:
        import fuzzy
    except ImportError:
        error("please install pyfuzzy to use this module !")

    import fuzzy.System
    import fuzzy.InputVariable
    import fuzzy.fuzzify.Plain
    import fuzzy.OutputVariable
    import fuzzy.defuzzify.COGS
    import fuzzy.defuzzify.COG
    import fuzzy.defuzzify.MaxRight
    import fuzzy.defuzzify.MaxLeft
    import fuzzy.defuzzify.LM
    import fuzzy.set.Polygon
    import fuzzy.set.Singleton
    import fuzzy.set.Triangle
    import fuzzy.Adjective
    import fuzzy.operator.Input
    import fuzzy.operator.Compound
    import fuzzy.norm.Min
    import fuzzy.norm.Max
    import fuzzy.Rule
    import fuzzy.defuzzify.Dict

    system = fuzzy.System.System()

    input_Dangerous_Risk = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Money_Risk = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Privacy_Risk = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Binary_Risk = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Internet_Risk = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())
    input_Dynamic_Risk = fuzzy.InputVariable.InputVariable(
        fuzzify=fuzzy.fuzzify.Plain.Plain())

    # Input variables

    # Dangerous Risk
    system.variables["input_Dangerous_Risk"] = input_Dangerous_Risk
    input_Dangerous_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (8.0, 1.0), (12.0, 0.0)]))
    input_Dangerous_Risk.adjectives[AVERAGE_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(8.0, 0.0), (50.0, 1.0), (60.0, 0.0)]))
    input_Dangerous_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(50.0, 0.0), (85.0, 1.0), (95.0, 0.0)]))
    input_Dangerous_Risk.adjectives[
        UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Polygon.Polygon([(85.0, 0.0), (100.0, 1.0)]))

    # Money Risk
    system.variables["input_Money_Risk"] = input_Money_Risk
    input_Money_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (3.0, 0.0)]))
    input_Money_Risk.adjectives[UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(4.0, 0.0), (5.0, 1.0), (30.0, 1.0)]))

    # Privacy Risk
    system.variables["input_Privacy_Risk"] = input_Privacy_Risk
    input_Privacy_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (6.0, 1.0), (10.0, 0.0)]))
    input_Privacy_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(6.0, 0.0), (10.0, 1.0), (20.0, 0.0)]))
    input_Privacy_Risk.adjectives[
        UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Polygon.Polygon([(15.0, 0.0), (20.0, 1.0), (30.0, 1.0)]))

    # Binary Risk
    system.variables["input_Binary_Risk"] = input_Binary_Risk
    input_Binary_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (6.0, 1.0), (10.0, 0.0)]))
    input_Binary_Risk.adjectives[AVERAGE_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(6.0, 0.0), (10.0, 1.0), (15.0, 0.0)]))
    input_Binary_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(10.0, 0.0), (20.0, 1.0), (24.0, 0.0)]))
    input_Binary_Risk.adjectives[
        UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Polygon.Polygon([(23.0, 0.0), (30.0, 1.0), (40.0, 1.0)]))

    # Internet Risk
    system.variables["input_Internet_Risk"] = input_Internet_Risk
    #input_Internet_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective( fuzzy.set.Polygon.Polygon([(0.0, 1.0), (1.0, 1.0)]) )
    input_Internet_Risk.adjectives[HIGH_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(1.0, 0.0), (5.0, 1.0), (30.0, 1.0)]))

    # Dynamic Risk
    system.variables["input_Dynamic_Risk"] = input_Dynamic_Risk
    input_Dynamic_Risk.adjectives[LOW_RISK] = fuzzy.Adjective.Adjective(
        fuzzy.set.Polygon.Polygon([(0.0, 1.0), (2.0, 1.0), (3.0, 0.0)]))
    input_Dynamic_Risk.adjectives[
        UNACCEPTABLE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Polygon.Polygon([(4.0, 0.0), (5.0, 1.0), (50.0, 1.0)]))

    # Output variables
    output_malware_risk = fuzzy.OutputVariable.OutputVariable(
        defuzzify=fuzzy.defuzzify.COGS.COGS(),
        description="malware risk",
        min=0.0,
        max=100.0,
    )

    #output_malware_risk = fuzzy.OutputVariable.OutputVariable(defuzzify=fuzzy.defuzzify.Dict.Dict())

    output_malware_risk.adjectives[
        NULL_MALWARE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(0.0))
    output_malware_risk.adjectives[
        AVERAGE_MALWARE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(30.0))
    output_malware_risk.adjectives[
        HIGH_MALWARE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(60.0))
    output_malware_risk.adjectives[
        UNACCEPTABLE_MALWARE_RISK] = fuzzy.Adjective.Adjective(
            fuzzy.set.Singleton.Singleton(100.0))

    system.variables["output_malware_risk"] = output_malware_risk

    # Rules
    #RULE 0: DYNAMIC
    add_system_rule(
        system, "r0",
        fuzzy.Rule.Rule(
            adjective=[
                system.variables["output_malware_risk"].
                adjectives[NULL_MALWARE_RISK]
            ],
            operator=fuzzy.operator.Input.Input(
                system.variables["input_Dynamic_Risk"].adjectives[LOW_RISK])))

    add_system_rule(
        system, "r0a",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].
            adjectives[UNACCEPTABLE_MALWARE_RISK]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Dynamic_Risk"].
                            adjectives[UNACCEPTABLE_RISK])))

    #RULE 1: MONEY
    add_system_rule(
        system, "r1",
        fuzzy.Rule.Rule(
            adjective=[
                system.variables["output_malware_risk"].
                adjectives[NULL_MALWARE_RISK]
            ],
            operator=fuzzy.operator.Input.Input(
                system.variables["input_Money_Risk"].adjectives[LOW_RISK])))

    add_system_rule(
        system, "r1a",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].
            adjectives[UNACCEPTABLE_MALWARE_RISK]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Money_Risk"].
                            adjectives[UNACCEPTABLE_RISK])))

    #RULE 3 : BINARY
    add_system_rule(
        system, "r3",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].
            adjectives[AVERAGE_MALWARE_RISK]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Binary_Risk"].
                            adjectives[AVERAGE_RISK])))

    add_system_rule(
        system, "r3a",
        fuzzy.Rule.Rule(
            adjective=[
                system.variables["output_malware_risk"].adjectives[HIGH_RISK]
            ],
            operator=fuzzy.operator.Input.Input(
                system.variables["input_Binary_Risk"].adjectives[HIGH_RISK])))

    add_system_rule(
        system, "r3b",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].
            adjectives[UNACCEPTABLE_MALWARE_RISK]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Binary_Risk"].
                            adjectives[UNACCEPTABLE_RISK])))

    # PRIVACY + INTERNET
    add_system_rule(
        system, "r5",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].
            adjectives[HIGH_MALWARE_RISK]
        ],
                        operator=fuzzy.operator.Compound.Compound(
                            fuzzy.norm.Min.Min(),
                            fuzzy.operator.Input.Input(
                                system.variables["input_Privacy_Risk"].
                                adjectives[LOW_RISK]),
                            fuzzy.operator.Input.Input(
                                system.variables["input_Internet_Risk"].
                                adjectives[HIGH_RISK]))))
    add_system_rule(
        system, "r5a",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].
            adjectives[UNACCEPTABLE_MALWARE_RISK]
        ],
                        operator=fuzzy.operator.Compound.Compound(
                            fuzzy.norm.Min.Min(),
                            fuzzy.operator.Input.Input(
                                system.variables["input_Privacy_Risk"].
                                adjectives[HIGH_RISK]),
                            fuzzy.operator.Input.Input(
                                system.variables["input_Internet_Risk"].
                                adjectives[HIGH_RISK]))))

    add_system_rule(
        system, "r6",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].adjectives[HIGH_RISK]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Dangerous_Risk"].
                            adjectives[HIGH_RISK])))

    add_system_rule(
        system, "r6a",
        fuzzy.Rule.Rule(adjective=[
            system.variables["output_malware_risk"].
            adjectives[UNACCEPTABLE_RISK]
        ],
                        operator=fuzzy.operator.Input.Input(
                            system.variables["input_Dangerous_Risk"].
                            adjectives[UNACCEPTABLE_RISK])))

    return system