Frida Hook Android应用check方法时崩溃,如何修改脚本跳转第二个Activity
问题根因
- Hook方法参数不匹配:目标
check()是无参方法,你重写实现时错误声明了入参v,方法签名不匹配触发崩溃 - 环境兼容冲突:你的模拟器安装了Xposed框架,Frida 15.1.3与Android 7.1 x86环境下的Xposed存在内存访问冲突,触发SIGSEGV错误
- 注入时机错误:
--no-pause参数会让应用在注入完成后立刻启动,部分场景下Hook逻辑还没执行完成就调用了目标方法,也会引发异常
修正后的Frida脚本vault.js
Java.perform(function() { // 等待MainActivity实例加载完成再执行Hook,避免类未加载报错 Java.choose("com.g.fridaplay.MainActivity", { onMatch: function(instance) { console.log("找到MainActivity实例,开始Hook"); var theClass = Java.use("com.g.fridaplay.MainActivity"); // 无参方法重写不要添加多余参数 theClass.check.implementation = function() { console.log("已Hook check()方法,强制返回true"); return true; } }, onComplete: function() { console.log("Hook操作执行完成"); } }); })
调整后的执行步骤
- 先确认frida-server权限和启动正常:
adb shell su chmod 755 /data/local/tmp/frida-server-15.1.3-android-x86 ./data/local/tmp/frida-server-15.1.3-android-x86 &
- 执行Frida命令时去掉
--no-pause参数:
frida -U -l vault.js -f com.g.fridaplay
兼容问题兜底方案
- 如果执行后依然崩溃,建议临时禁用模拟器内的Xposed框架,或者将PC端frida和模拟器内frida-server统一降级到14.2.18版本,该版本对Android7.1 x86环境兼容性更好,无Xposed冲突问题
- 也可以直接反编译APK修改
check方法对应的smali代码,强制返回true后重打包签名运行,也能实现跳转到第二个Activity的需求
内容的提问来源于stack exchange,提问作者Nikita K
相关产品推荐
相关产品推荐

