如何规避APP模拟定位检测?附Smali代码及已尝试方案
解决模拟定位被目标APP检测的方案
先拆解你提供的Smali代码逻辑:这段代码做了双重模拟定位检测,你之前只处理了其中一处,所以问题没解决:
- 直接调用
Location.isFromMockProvider()判断定位是否来自模拟源 - 读取系统
Settings.Secure.MOCK_LOCATION配置值,验证是否开启模拟定位
以下是针对性的修改方案:
方案1:同时篡改两处检测结果
处理isFromMockProvider()检测
在move-result p1之后强制将p1设为0(表示非模拟定位):
.line 1854 invoke-virtual {p1}, Landroid/location/Location;->isFromMockProvider()Z move-result p1 const/4 p1, 0x0 # 强制覆盖为非模拟定位结果 goto :goto_6
处理系统设置检测
找到字符串比较后的move-result p1,强制将p1设为0,再执行异或操作:
invoke-virtual {p1, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result p1 const/4 p1, 0x0 # 强制让equals结果为false(模拟系统未开启定位) xor-int/2addr p1, v5
或者更直接,跳过整个系统设置读取流程,直接设置p1值:
:cond_d const/4 p1, 0x0 # 跳过系统设置检测,直接设为非模拟状态 xor-int/2addr p1, v5
方案2:直接绕过最终判断逻辑
把最后的条件判断指令改成无条件跳转,不管检测结果如何都走正常流程:
:goto_6 goto :cond_e # 替换原有的if-eqz p1, :cond_e指令
注意:如果目标APP还有其他隐性检测(比如定位移动速度合理性、坐标跳转幅度校验),可能需要额外处理,但针对你提供的这段代码,按上述方式修改即可绕过当前检测。
内容的提问来源于stack exchange,提问作者ankit ankit
相关产品推荐
相关产品推荐

