我的反调试代码在真机测试时总被绕过怎么办?
我在开发电商H5页面时想加反调试功能,写了检查navigator.webdriver和debugger事件监听的代码,但用Xposed模块启动APP后还是能正常调试我的JS。尝试过检测USB调试状态:navigator.userAgent也没法准确判断。有大佬遇到过类似问题吗?
之前试过这种检测方法:
function antiDebug() {
if (window.navigator.webdriver ||
/debugger/.test(window.location.href)) {
alert('检测到调试行为!');
}
}
但用腾讯Bugly的真机平台测试时,弹窗根本没触发,明明打开了开发者工具啊…是不是还需要结合原生层检测?
你可以尝试下面几个方向加强检测:
### 1. 多种检测方式叠加
不要只依赖
navigator.webdriver或 URL 中的关键词,可以多加几个检测点,比如:### 2. 使用定时器循环检测
调试器加载是有延迟的,你可以用定时器一直检测:
### 3. 结合原生层判断
如果你的 H5 是嵌在 APP 里,可以让原生层注入一个标识,比如在 WebView 初始化时加一个自定义 header 或全局变量:
然后再配合 JS 检测:
### 4. 使用混淆和加密
把你的检测函数名、变量名混淆掉,防止被轻易 hook。还可以用 eval、Function 构造器等动态执行代码,增加逆向成本。
### 5. 崩溃检测(比较狠的办法)
可以在关键逻辑里插入
debugger,然后监听 console 方法是否被覆盖,如果发现 console 被代理了,就直接抛错或退出。### 最后吐槽一句
反调试这东西,其实永远防不住高级玩家,只能提高门槛。重点逻辑还是得靠后端兜底,前端只是辅助。别像我一样死磕半天最后发现别人改几行 native 代码就绕过了 😂
试试上面这些方法组合起来用,应该能抗住大部分情况了。有问题再问我。