iOS和Android越狱检测总是被绕过怎么办?
最近在给一个金融类App加安全检测,需要判断设备是否越狱或Root。按照网上的方案写了检测已知目录的代码:
function checkJailbreak() {
return fs.existsSync('/Applications/Cydia.app') ||
fs.existsSync('/private/var/stash/cydia.deb');
}
但测试时发现很多用户通过安装”FakeAgent”这类工具就能绕过检测,甚至有些真机根本检测不到。尝试过检查系统证书和未加密存储,但Android端用su命令检测又老报Permission Denied。有没有更可靠的检测方法组合?
几个关键点说一下:第一,别只检测固定路径,要多检查一些常见的越狱特征。第二,尝试执行敏感操作,比如写系统目录,能写进去就说明有问题。第三,结合代码签名验证,fake环境通常过不了这关。
Android这边建议加个定时检测机制,有些工具启动时是正常的,运行一段时间才生效。另外记得混淆你的检测代码,不然很容易被hook掉。
最后提醒一句,安全检测不是万能的,该加密的数据还是要加密,该做风控的要做风控。防君子不防小人,但至少得把门槛提高点。