frida hook android system_server report Error: expected a pointer

Viewed 1425

I am trying to hook android11 system_server On linux. frida version is 14.2.13.

The script as below:

Java.perform(function () {
    var clazz = Java.use("com.android.server.policy.PhoneWindowManager")
    var func = "powerPress"
    console.log(func)
    clazz[func].implementation = function (arg1,arg2,arg3) {
        console.log("Enter " + func + " " + arg1,arg2,arg3)
        this[func](arg1,arg2,arg3)
    }
  }
)

The command to launch frida:

$ frida -U -l script.js -p $(adb shell pidof system_server)
     ____
    / _  |   Frida 14.2.13 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://www.frida.re/docs/home/
Attaching...                                                            
powerPress
Error: expected a pointer
    at value (frida/runtime/core.js:170)
    at yt (frida/node_modules/frida-java-bridge/lib/android.js:889)
    at activate (frida/node_modules/frida-java-bridge/lib/android.js:970)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/android.js:745)
    at forEach (native)
    at St (frida/node_modules/frida-java-bridge/lib/android.js:746)
    at Et (frida/node_modules/frida-java-bridge/lib/android.js:737)
    at vt (frida/node_modules/frida-java-bridge/lib/android.js:696)
    at replace (frida/node_modules/frida-java-bridge/lib/android.js:1021)
    at set (frida/node_modules/frida-java-bridge/lib/class-factory.js:1010)
    at set (frida/node_modules/frida-java-bridge/lib/class-factory.js:925)
    at <anonymous> (/script.js:4)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:16)
    at _performPendingVmOps (frida/node_modules/frida-java-bridge/index.js:238)
    at <anonymous> (frida/node_modules/frida-java-bridge/index.js:213)
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:16)
    at _performPendingVmOpsWhenReady (frida/node_modules/frida-java-bridge/index.js:232)
    at perform (frida/node_modules/frida-java-bridge/index.js:192)
    at <eval> (/script.js:10)
[device]-> Enter powerPress 44442 true 1
Enter powerPress 46290 true 1
Enter powerPress 52580 true 1
Enter powerPress 53910 true 1

The hook looks like work but exception happen!

1 Answers

this is not how you would normaly hook a function have a look on the official docs https://frida.re/docs/android/ try this instead

Java.perform(function () {
    Java.Use("com.android.server.policy.PhoneWindowManager").powerPress.overload().implementation = function(arg1, arg2, arg3){
        console.log("Enter Powerpress :" + arg1,arg2,arg3);
        Java.Use("com.android.server.policy.PhoneWindowManager").powerPress.overload().call(this, arg1,arg2,arg3);
    
  }
)

guessing that you are passing args you will need to specify the type of each arg and pass it to the overload function launch the script it will give you a error and copy paste the correct function overload on both the call line and the implementation line

Related