Exemplo n.º 1
0
    def _build_params(self, v) :
        l = jvm.formatFD(v)
        z = []

        for i in l :
            if isinstance(i, list) :
                z.append( "%s %s%s" % (i[0], random_string(), ''.join(j for j in i[1])) )
            else :
                z.append( "%s %s" % (i, random_string()) )

        return ', '.join(i for i in z)
Exemplo n.º 2
0
    def _build_params(self, v):
        l = jvm.formatFD(v)
        z = []

        for i in l:
            if isinstance(i, list):
                z.append("%s %s%s" %
                         (i[0], random_string(), ''.join(j for j in i[1])))
            else:
                z.append("%s %s" % (i, random_string()))

        return ', '.join(i for i in z)
Exemplo n.º 3
0
    def _generate_native_templates(self, native_lib) :
        name = random_string()
        native_lib[ name ] = {}

        native_lib[ name ]["F_INIT"] = [ 0, random_string(), "V", "()" ]

        buff = "#include <jni.h>\n"

        buff += "JNIEXPORT %s JNICALL Java_AG_%s(JNIEnv *env, jclass cls) {\n" % (native_lib[ name ]["F_INIT"][2], native_lib[ name ]["F_INIT"][1])
        buff += "printf(\"[AndroGuard][native] init.\\n\");\n"
        buff += "}\n"

        native_lib[ name ]["RAW"] = buff
Exemplo n.º 4
0
    def _generate_native_templates(self, native_lib):
        name = random_string()
        native_lib[name] = {}

        native_lib[name]["F_INIT"] = [0, random_string(), "V", "()"]

        buff = "#include <jni.h>\n"

        buff += "JNIEXPORT %s JNICALL Java_AG_%s(JNIEnv *env, jclass cls) {\n" % (
            native_lib[name]["F_INIT"][2], native_lib[name]["F_INIT"][1])
        buff += "printf(\"[AndroGuard][native] init.\\n\");\n"
        buff += "}\n"

        native_lib[name]["RAW"] = buff
Exemplo n.º 5
0
    def addVM(self, _vm, _analysis, objects_create) :
        r = random_string()
        self.__info_gc[ r ] = ( _vm, _analysis )

        gc = GenerateCode( self, r, _vm, _analysis, objects_create )
        self.__gc[ r ] = gc
        self.__hi[ r ] = HandleINT( gc )
Exemplo n.º 6
0
    def addVM(self, _vm, _analysis, objects_create):
        r = random_string()
        self.__info_gc[r] = (_vm, _analysis)

        gc = GenerateCode(self, r, _vm, _analysis, objects_create)
        self.__gc[r] = gc
        self.__hi[r] = HandleINT(gc)
Exemplo n.º 7
0
    def addNewField(self, ident, _access, _type) :
        _vm = self.__info_gc[ ident ][0]
        class_name = _vm.get_classes_names()[0]

        name = random_string()
        _vm.insert_field( class_name, name, [ _access, _type ] )

        return [ name, _access, _type ]
Exemplo n.º 8
0
    def addNewField(self, ident, _access, _type):
        _vm = self.__info_gc[ident][0]
        class_name = _vm.get_classes_names()[0]

        name = random_string()
        _vm.insert_field(class_name, name, [_access, _type])

        return [name, _access, _type]
Exemplo n.º 9
0
    def generate_keys(self):
        # get the number of unique keys from paths
        self._generate_keys()

        # associate each keys with a couple of modification :
        #         - inside a class
        #         - inside native/java libs

        lib = self.names_libs["MAIN"]

        name = random_string()
        lib["METHODS"][name] = [0, name, "PUBLIC", "()", "V", ""]
        buff = "System.out.println(\"[AG][java] %s\");\n" % name
        buff += "Throwable t = new Throwable();\n"
        buff += "for ( StackTraceElement s : t.getStackTrace()) {\n"
        buff += "System.out.println( \"s : \" + s.getMethodName() );\n"
        buff += "}\n"
        lib["METHODS"][name][-1] = buff

        for i in self.keys:
            # Fix depedencies library
            self.keys[i][-1].library(
                self.names_libs["MAIN"]["C_INIT"],
                [(x, self.names_libs["MAIN"]["METHODS"][x][3] +
                  self.names_libs["MAIN"]["METHODS"][x][4])
                 for x in self.names_libs["MAIN"]["METHODS"]])

            # Insert new bytecodes
            idx = self.keys[i][-1].get_vm_analysis().prev_free_block_offset(
                self.keys[i][1].get_method(),
                self.keys[i][1].get_bb().start + self.keys[i][1].get_idx())
            path = self.keys[i][1]

            print i, idx

            #l.append( [ "aload_0" ] )
            #      l.append( [ "new", _type ] )
            #            l.append( [ "dup" ] )
            #                  l.append( [ "invokespecial", _type, '<init>', '()V' ] )
            #                        l.append( [ "putfield", _field[0], _field[2] ] )

            instructions = []
            #334: new     #32; //class TCC
            #337: dup
            #338: invokespecial   #33; //Method TCC."<init>":()V
            #341: astore_2
            #342: aload_2
            #343: invokevirtual   #34; //Method TCC.T1:()V
            #346: return
            self.keys[i][-1].insert(path.get_method().get_class_name(),
                                    path.get_method().get_name(),
                                    path.get_method().get_descriptor(), idx,
                                    instructions)
Exemplo n.º 10
0
    def generate_keys(self) :
        # get the number of unique keys from paths
        self._generate_keys()

        # associate each keys with a couple of modification :
        #         - inside a class
        #         - inside native/java libs

        lib = self.names_libs["MAIN"]

        name = random_string()
        lib["METHODS"][name] = [ 0, name, "PUBLIC", "()", "V", "" ]
        buff =  "System.out.println(\"[AG][java] %s\");\n" % name
        buff += "Throwable t = new Throwable();\n"
        buff += "for ( StackTraceElement s : t.getStackTrace()) {\n"
        buff += "System.out.println( \"s : \" + s.getMethodName() );\n"
        buff += "}\n"
        lib["METHODS"][name][-1] = buff

        for i in self.keys :
            # Fix depedencies library
            self.keys[i][-1].library( self.names_libs["MAIN"]["C_INIT"], [ (x, self.names_libs["MAIN"]["METHODS"][x][3] + self.names_libs["MAIN"]["METHODS"][x][4]) for x in self.names_libs["MAIN"]["METHODS"] ] )


            # Insert new bytecodes
            idx = self.keys[i][-1].get_vm_analysis().prev_free_block_offset( self.keys[i][1].get_method(), self.keys[i][1].get_bb().start + self.keys[i][1].get_idx() )
            path = self.keys[i][1]

            print i, idx

        #l.append( [ "aload_0" ] )
        #      l.append( [ "new", _type ] )
        #            l.append( [ "dup" ] )
        #                  l.append( [ "invokespecial", _type, '<init>', '()V' ] )
        #                        l.append( [ "putfield", _field[0], _field[2] ] )

            instructions = []
            #334: new     #32; //class TCC
            #337: dup
            #338: invokespecial   #33; //Method TCC."<init>":()V
            #341: astore_2
            #342: aload_2
            #343: invokevirtual   #34; //Method TCC.T1:()V
            #346: return
            self.keys[i][-1].insert( path.get_method().get_class_name(), path.get_method().get_name(), path.get_method().get_descriptor(), idx, instructions )
Exemplo n.º 11
0
    def _generate_java_templates(self, java_lib, native_lib) :
        name = random_string()
        java_lib[ name ] = {}

        java_lib[ name ]["C_INIT"] = name
        java_lib[ name ]["METHODS"] = {}

        buff = "class %s {\n" % name

        for i in native_lib :
            if "F_" in i :
                if i[0] == 0 :
                    buff += "private native %s %s (%s);\n" % (i[2], i[1], i[3])

        buff += "static { System.loadLibrary(\"libAG.so\"); }\n"

        java_lib[ name ]["RAW"] = buff

        self.names_libs[ "MAIN" ] = java_lib[ name ]
Exemplo n.º 12
0
    def _generate_java_templates(self, java_lib, native_lib):
        name = random_string()
        java_lib[name] = {}

        java_lib[name]["C_INIT"] = name
        java_lib[name]["METHODS"] = {}

        buff = "class %s {\n" % name

        for i in native_lib:
            if "F_" in i:
                if i[0] == 0:
                    buff += "private native %s %s (%s);\n" % (i[2], i[1], i[3])

        buff += "static { System.loadLibrary(\"libAG.so\"); }\n"

        java_lib[name]["RAW"] = buff

        self.names_libs["MAIN"] = java_lib[name]