Flutter应用如何阻止Frida、JSHook,防范生物识别绕过?
如何在Flutter中阻止JSHook、Frida及绕过生物识别的攻击
一、针对Frida/JSHook的检测与拦截
检测调试器附加:通过Flutter平台通道调用原生代码实现调试器检测。Android侧可借助
Debug.isDebuggerConnected()或Debug.waitingForDebugger()判断是否有调试器附加;iOS侧可检查PT_ATTACHED标记。一旦检测到异常,直接触发应用退出或限制核心功能。
Android端示例代码:fun isDebuggerAttached(): Boolean { return Debug.isDebuggerConnected() || Debug.waitingForDebugger() }后续通过MethodChannel在Flutter层调用该方法,执行拦截逻辑。
检测Frida特征:Frida运行时会留下特定进程名、文件路径或内存特征。可在原生层遍历进程,检查是否存在
frida-server、frida-agent等进程;也可扫描内存中是否有Frida注入的动态库。
Android端进程检测示例:fun hasFridaProcess(): Boolean { val fridaProcesses = arrayOf("frida-server", "frida-agent") val runtime = Runtime.getRuntime() val process = runtime.exec("ps") val reader = BufferedReader(InputStreamReader(process.inputStream)) var line: String? while (reader.readLine().also { line = it } != null) { for (name in fridaProcesses) { if (line?.contains(name) == true) { return true } } } return false }禁用动态注入与代码混淆:Android侧开启
ptrace保护,阻止其他进程附加;iOS侧启用Hardened Runtime并开启Disable Debugging选项。同时对Flutter代码进行混淆,执行命令:flutter build --obfuscate --split-debug-info=./debug-info,增加逆向难度。
二、加固生物识别验证
针对指纹绕过问题,需确保验证结果不可篡改:
- 安全回调与令牌校验:不在Flutter层直接处理生物识别结果,由原生层完成验证后返回加密令牌,Flutter将令牌发送至后端校验,后端确认有效性后才允许登录。
- 防止重放攻击:给每个验证令牌添加过期时间,并与设备唯一标识绑定,后端校验时同时验证令牌有效期与设备绑定关系。
- 实时二次校验:在登录等核心操作前,再次调用原生生物识别API,确保验证为实时完成,而非Hook篡改的结果。
三、补充建议
- 定期更新防护策略:Frida等工具会持续更新绕过手段,需定期跟踪最新攻击方式,调整检测逻辑。
- 集成商业加固服务:若自研防护效果有限,可选择支持Flutter的第三方移动安全加固服务,获取代码混淆、动态防护、反调试等专业能力。
内容的提问来源于stack exchange,提问作者Andrian Septiadi
相关产品推荐
相关产品推荐

