使用Frida调用getPackageInfo方法时遇TypeError错误求助
Frida hook getPackageInfo 报错 TypeError 解决方法
你在 hook android.app.ApplicationPackageManager 的getPackageInfo方法时触发了错误:TypeError: cannot read property 'getPackageInfo' of undefined,问题出在return this.getPackageInfo.overload('java.lang.String','int').call(this,pname,f);这一行。
错误原因
在Frida通过Java.use生成的类的implementation回调里,this指向当前被hook的实例,但直接通过this.getPackageInfo访问会因为原方法被重载覆盖,导致找不到对应方法引用,进而抛出undefined错误。
修正代码
以下是两种可行的修正方式,推荐第一种更简洁的写法:
Java.perform(()=>{ const jPM=Java.use('android.app.ApplicationPackageManager'); jPM.getPackageInfo.overload('java.lang.String','int').implementation=(pname,f)=>{ console.log("Called => getPackageInfo (Flag="+f+", Pkg="+pname+")"); // 方式1:用$super调用原始方法实现(推荐) return this.$super.getPackageInfo(pname, f); // 方式2:通过类模板的方法指定实例调用 // return jPM.getPackageInfo.overload('java.lang.String','int').call(this, pname, f); } });
说明
$super是Frida提供的语法,用于在hook的方法实现中调用原始的方法逻辑,无需手动指定overload,Frida会自动匹配参数类型。- 如果坚持用overload方式,需要通过
Java.use获取的类模板(即jPM)来调用方法,并将this(当前实例)作为call的第一个参数传入。
内容的提问来源于stack exchange,提问作者na29
相关产品推荐
相关产品推荐

