frida / frida-java-bridge

Java runtime interop from Frida
324 stars 120 forks source link

ClassNotFoundException when Java.registerClass() declaring more than 2 fields #296

Closed LanceaKing closed 4 months ago

LanceaKing commented 1 year ago

This code works normally:

Java.perform(() => {
    const MyRunnable = Java.registerClass({
        name: "re.frida.MyRunnable",
        implements: [Java.use("java.lang.Runnable")],
        fields: {
            a: "int",
            b: "int",
            // c: "int"
        },
        methods: {
            run() {
                // ...
            }
        }
    })
})

This code raise java.lang.ClassNotFoundException:

Java.perform(() => {
    const MyRunnable = Java.registerClass({
        name: "re.frida.MyRunnable",
        implements: [Java.use("java.lang.Runnable")],
        fields: {
            a: "int",
            b: "int",
            c: "int"
        },
        methods: {
            run() {
                // ...
            }
        }
    })
})
Error: java.lang.ClassNotFoundException: Didn't find class "re.frida.MyRunnable" on path: DexPathList[[],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64]]
LanceaKing commented 1 year ago

@oleavr Frida version is 16.1.2

eybisi commented 4 months ago

I encountered the same issue. Introducing 3rd field, throws ClassNotFoundException