Exemple #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], misc.random_string(), ''.join(j for j in i[1])) )
            else :
                z.append( "%s %s" % (i, misc.random_string()) )

        return ', '.join(i for i in z)
Exemple #2
0
    def _generate_native_templates(self, native_lib) :
        name = misc.random_string()
        native_lib[ name ] = {}

        native_lib[ name ]["F_INIT"] = [ 0, misc.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
Exemple #3
0
    def addVM(self, _vm, _analysis, objects_create) :
        r = misc.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 )
Exemple #4
0
    def addNewField(self, ident, _access, _type) :
        _vm = self.__info_gc[ ident ][0]
        class_name = _vm.get_classes_names()[0]

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

        return [ name, _access, _type ]
Exemple #5
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 = misc.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 )
Exemple #6
0
    def _generate_java_templates(self, java_lib, native_lib) :
        name = misc.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 ]
def testRandomString():
    s = misc.random_string(10)
    assert type(s) is str
    assert_equals(len(s), 10)