Frida:更改调用枚举的方法的值

问题描述 投票:0回答:1

希望修改从枚举类型调用的方法的返回值。我能够调用该方法并将枚举值正确显示到控制台中,但随后它会导致应用程序崩溃,并抱怨兼容的实现。下面的示例代码有错误:

Java.perform(() => {
const Class = Java.use('com.package.class');
Class.getMethod.implementation = function() {
 
var str = this.getMethod();
 
send('getMethod() value for enum is: ' + str);
 
};
});
[Pixel 5::com.package ]-> message: {'type': 'send', 'payload': 'getMethod() value for enum is: EnumContent'} data: None
Error: Implementation for getMethod expected return value compatible with [Lcom.com.package.EnumType;
    at ne (frida/node_modules/frida-java-bridge/lib/class-factory.js:674)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/class-factory.js:651)
Process terminated

我的最终目标是获取初始枚举值,更改方法摄取的枚举返回值并将结果显示在控制台中。

我在这里找到了一些参考:https://github.com/frida/frida/issues/1256和这里:https://neo-geo2.gitbook.io/adventures-on-security/frida-scripting -guide/enums 但最终未能成功提供帮助。

编辑: 用一个例子来详细说明。假设您正在尝试使用如下所示的 JS 脚本和 return 或 console.log:

Java.perform(() => {
var enumContent = Java.use('com.some.package.Enum');
return enumContent.values();
)};

Java.perform(() => {
var enumContent = Java.use('com.some.package.Enum');
console.log(enumContent.A.value);
)};

假设您的 Java 代码如下所示:

package com.some.package;

import kotlin.Metadata;

public enum Enum {
    A,
    B,
    C,
    D
}

编辑2:

这是该课程的片段。

package com.package.class;
[TRUNCATED]
...
[TRUNCATED]
    @NotNull
    public final Enum[] getMethod() {
        return this.selection;
    }
}
security frida mobile-security
1个回答
0
投票

您的主要问题是,如果您挂钩 Java 方法,您会自动替换该方法。因此,如果该方法具有

void
以外的返回类型,您就被迫以某种方式提供与返回类型匹配的返回值:

不确定以下代码是否直接有效,但它演示了为什么您必须返回一个新的

Enum[]

Java.perform(() => {
    const myClass = Java.use('com.package.class');
    const enumContent = Java.use('com.some.package.Enum');
    myClass.getMethod.implementation = function() {
        var str = this.getMethod();
        send('getMethod() value for enum is: ' + str);

        // you need to return a value of the type Enum[]
        return Java.array('com.some.package.Enum', [ enumContent.A.value ]);
    };
});
© www.soinside.com 2019 - 2024. All rights reserved.