求教非 Hook 方式实现的位置修改的原理以及检测方式

2020-02-18 10:47:06 +08:00
 gam2046

已知


疑问

通过搜索发现,目前有部分软件

即可实现修改位置。如“神行者”等。

此类软件实现的方法是什么?以及可以如何检测出来?


盲猜的实现方式


应对方案

显然第二点并不是比较好的方案。对于 Hook 类的修改位置,目前已经有比较成熟的检测方法,但是对于这类无需 Hook 的模拟位置,由于我不清楚其原理,是否有大佬能给我科普一下,其实现方式?

10054 次点击
所在节点    Android
5 条回复
wjdimba
2020-02-18 11:02:16 +08:00
自己集成 hook 代码不就好了,不一定要装 xposed 框架
gam2046
2020-02-18 11:18:52 +08:00
@wjdimba 自己集成应该如何实现呢。首先 Zygote 启动是先于目标程序的,因此这段代码无法注入 Zygote 以达到注入所有程序。同时也没有重启 Zygote,重启 Zygote 会导致软重启,实际使用这类软件的时候,并未出现这种情况。

那么看起来,启动目标应用的入口,即使 Root,也无法魔改。所以,我没有猜测到实现方式,也没有搜到类似的开源方案。
wjdimba
2020-02-18 15:29:00 +08:00
android root 之后拦截 binder 调用,就可以修改 imei imsi 通讯录 地理位置等信息的返回
gam2046
2020-02-18 16:24:40 +08:00
@wjdimba 有相关资料科普嘛?

目标应用是由 Zygote fork 出来后 setuid/setgid,然后交由目标程序运行。这个中间是哪里拦截,我没想通。

如果是 ServiceManager 做拦截的话,这部分是 framework 的代码,因此在 Zygote 已经被加载,无法让其返回自己的 Binder 对象。

如果是在目标进程获取到 Binder 对象时,进行替换,那么问题又回去了。目标进程是由 Zygote fork 出来的,中间似乎没有能够插入的机会?(或者是我不知道的途径?
weishu
2020-02-19 14:14:04 +08:00
ptrace zygote

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/645457

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX