smali - 如何防止检测到假GPS?
问题描述
我找到了一个检测位置欺骗并返回警告屏幕的应用程序。[1]:https ://i.stack.imgur.com/qbhuU.jpg
然后我尝试对应用程序进行逆向工程并删除isFromMockProvider()
检查位置数据是否来自模拟位置提供程序的功能。我从一个 smali 文件中找到了这些代码行
method public onLocationChanged(Landroid/location/Location;)V
.registers 10
.annotation build Landroidx/annotation/RequiresApi;
api = 0x12
.end annotation
const-string v0, "0"
.line 1
invoke-virtual {p1}, Landroid/location/Location;->isFromMockProvider()Z
move-result v1
const-string v2, "IS_MOCK"
const-string v3, "LIVE_TRACKING_MOCK_LOCATION"
if-eqz v1, :cond_1e
.line 2
new-instance p1, Landroid/content/Intent;
invoke-direct {p1, v3}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
const-string v0, "false"
.line 3
invoke-virtual {p1, v2, v0}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;
.line 4
invoke-static {p0}, Landroidx/localbroadcastmanager/content/LocalBroadcastManager;->getInstance(Landroid/content/Context;)Landroidx/localbroadcastmanager/content/LocalBroadcastManager;
move-result-object v0
invoke-virtual {v0, p1}, Landroidx/localbroadcastmanager/content/LocalBroadcastManager;->sendBroadcast(Landroid/content/Intent;)Z
return-void
.line 5
:cond_1e
new-instance v1, Landroid/content/Intent;
invoke-direct {v1, v3}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
const-string v3, "false"
此处必须进行哪些更改以防止检测到模拟位置?
解决方案
来电
invoke-virtual {p1}, Landroid/location/Location;->isFromMockProvider()Z
move-result v1
1
如果使用模拟提供程序,则返回(true),0
否则返回 (true)。结果存储在v1
.
稍后该值用于条件分支
if-eqz v1, :cond_1e // if v1==0 GOTO cond_1e
因此,只有在没有使用模拟提供程序 (v1=0) 时,它才会跳转到特殊的代码部分。否则,它将继续处理模拟位置的代码部分,这很可能是您不想要的。
因此,您必须调整该检查,为此您有两种可能性:
- 在检查之前用 0覆盖
v1
,例如通过命令const/4 v1, 0x0
- 将条件分支替换
if-eqz v1, :cond_1e
为非条件分支,goto :cond_1e
因此无论值是什么都无关紧要v1
。
推荐阅读
- c# - 将Image解压到内存并加载到picturebox中
- spring-boot - 如何通过勇敢的追踪打印 traceId 和 spanId?
- javascript - 从 Mongo DB 获取数组。未处理的承诺拒绝
- clio-api - API 和 Clio 管理
- reactjs - 我正在尝试在 js 文件中实现一个 Messenger 聊天插件,但我对如何集成它感到困惑
- ms-word - MS Word 等宽字体不是空格的等宽字体
- java - 如何从 JAVAMAIL 中的不同文件夹中获取电子邮件?
- html - 溢出 y 设置为可见但行为类似于滚动
- javascript - Fusioncharts中没有数据显示错误
- android - 这需要很长时间