Esempio n. 1
0
def model_String_concat(call, resolved_this, resolved_params_list):
    resolve_dict = dict()

    str_list = None
    if isinstance(resolved_this.value, values.MultiValue):
        str_list = resolved_this.value.assignment_list
    else:
        str_list = [resolved_this.value]

    val_list = list()

    for s in str_list:
        if isinstance(s, dextypes.dex_string):
            s = str(s)

        if not isinstance(s, str):
            raise Exception("Not a string! {} - {}".format(s, type(s)))

        if isinstance(resolved_params_list[0].value, values.MultiValue):
            for concat in resolved_params_list[0].value.assignment_list:
                val_list.append(
                    values.AppendValue([s, concat], "Ljava/lang/String;"))
        else:
            val_list.append(
                values.AppendValue([s, resolved_params_list[0].value],
                                   "Ljava/lang/String;"))

    if len(val_list) > 1:
        val = values.MultiValue(val_list)
    else:
        val = val_list[0]

    resolve_dict[RETURN] = val

    return resolve_dict
Esempio n. 2
0
def model_File_init(call, resolved_this, resolved_params_list):
    resolve_dict = dict()

    obj_list = None
    if isinstance(resolved_this.value, values.MultiValue):
        obj_list = resolved_this.value.assignment_list
    else:
        obj_list = [resolved_this.value]

    for obj in obj_list:
        if not isinstance(obj, values.ObjectValue):
            raise Exception("Not an object value! {}".format(obj))

        obj.state[FILE_STATE] = values.AppendValue([], type=None)

        for param in resolved_params_list:
            if isinstance(
                    param.value,
                    values.ObjectValue) and FILE_STATE in param.value.state:
                obj.state[FILE_STATE].extend(param.value.state[FILE_STATE])
            else:
                obj.state[FILE_STATE].append(param.value)

    if len(obj_list) > 1:
        obj = values.MultiValue(obj_list)
    else:
        obj = obj_list[0]

    resolve_dict[resolved_this.reg] = obj

    return resolve_dict
Esempio n. 3
0
def model_Environment_getExternalStorageDirectory(call, resolved_this,
                                                  resolved_params_list):
    resolve_dict = dict()

    obj = values.ObjectModelled(call=call, type="Ljava/io/File;")
    obj.state[FILE_STATE] = values.AppendValue(["<ExternalStorageDirectory>"],
                                               type="Ljava/lang/String;")

    resolve_dict[RETURN] = obj

    return resolve_dict
Esempio n. 4
0
def model_Context_getCacheDir(call, resolved_this, resolved_params_list):
    resolve_dict = dict()

    obj = values.ObjectModelled(call=call, type="Ljava/io/File;")
    obj.state[FILE_STATE] = values.AppendValue(["<CONTEXT_CACHE_DIR>"],
                                               type="Ljava/lang/String;")

    name_param = resolved_params_list[0]
    obj.state[FILE_STATE].append(name_param.value)

    resolve_dict[RETURN] = obj

    return resolve_dict
Esempio n. 5
0
def model_File_getAbsoluteFile(call, resolved_this, resolved_params_list):
    path_result = model_File_getAbsolutePath(call, resolved_this,
                                             resolved_params_list)[RETURN]

    obj = values.ObjectModelled(call=call, type="Ljava/io/File;")
    obj.state[FILE_STATE] = values.AppendValue([], type=None)

    if isinstance(path_result,
                  values.ObjectValue) and FILE_STATE in path_result.state:
        obj.state[FILE_STATE].extend(path_result.state[FILE_STATE])
    else:
        obj.state[FILE_STATE].append(path_result)

    resolve_dict = {RETURN: obj}

    return resolve_dict
Esempio n. 6
0
def model_StringBuilder_toString(call, resolved_this, resolved_params_list):
    resolve_dict = dict()

    obj_list = None
    if isinstance(resolved_this.value, values.MultiValue):
        obj_list = resolved_this.value.assignment_list
    else:
        obj_list = [resolved_this.value]

    val_list = list()

    for obj in obj_list:
        if not isinstance(obj, values.ObjectValue):
            raise Exception("Not an object value! {}".format(obj))

        built_string = list()

        for idx, chunk in enumerate(obj.state[STRINGBUILDER_STATE]):
            if isinstance(chunk, values.Value):
                # need to add some print markers
                #if idx != 0:
                #    built_string += " + "
                built_string.append(chunk)
            else:
                # string
                #if idx != 0:
                #    if isinstance(obj.state[STRINGBUILDER_STATE][idx-1], Value):
                #        # previous chunk was not a string - add a plus
                #        built_string += " + "
                built_string.append(chunk)

        val_list.append(values.AppendValue(built_string, "Ljava/lang/String;"))

    if len(val_list) > 1:
        val = values.MultiValue(val_list)
    else:
        val = val_list[0]

    resolve_dict[RETURN] = val

    return resolve_dict