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)
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)
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
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
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 )
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)
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 ]
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]
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)
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 )
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 ]
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]