FakeLocation 逆向分析
前言
看到一篇文章:https://www.52pojie.cn/thread-1955462-1-1.html,是有关 FakeLocation 的逆向分析,以前大学的时候用这个软件还帮别人代跑呢,那时候一直用的别人的破解版,现在跟着 52 的师傅(以下称 mengxinb 师傅)来复现研究一下, 分享并记录以便提高动手能力。
脱壳
一直以来就采用的 360 加固,正常情况 360 加固在模拟器中会闪退,但因为很多人都在模拟器上跑步,因此作者可能加固的时候没开这个选项,所以也可以在模拟器中复现,但是我手机有 root 就直接开干吧。
这里我采用软件君子(B 站主页:https://space.bilibili.com/638226254)视频中分析的 frida
脱壳脚本脱壳(不知道还能活多久),这种方式拖的比较全,前提是没有检测 frida
或者你能绕过,脚本如下:
具体原理我也没研究,先用着,使用算法助手进行导入脚本进行脱壳:
启用并打开应用,显示注入成功,这个时候就已经脱完了:
脱壳的 dex 在 /data/data/<包名>/files/dump_dex_<包名>
下,也就是 /data/data/com.lerist.fakelocation/files/dump_dex_com.lerist.fakelocation
打包成 zip 文件,用 jadx 打开,为后续逆向分析做准备:
控件跟踪
使用专业版功能时(如路线模拟),会出现需要专业版的提示。
根据 mengxinb 师傅的思路,使用算法助手去尝试打印控件的堆栈信息,去追踪判断专业版的逻辑。
启动软件,首先点击路线模拟,然后点击启动模拟,会出现专业版弹窗提示:
查看算法助手日志,搜索关键词专业版,随便点击一个查看详情:
可以看到有一个 onClick
方法,也就是点击启动模拟的时候回调,软件肯定需要判断你是不是专业版,按照这个逻辑,我们先追踪一下它的后面一个方法,也就是图中的方法,长按复制整行:
在 jadx
中搜索方法名:
可以看到方法名为 m9662
,因为软件带了混淆,jadx
默认就开启了反混淆将一些难以阅读的变量和方法名重命名了,看起来没那么难读,这些并不是真实在软件中的方法名。
这个时候用同样的方式搜索 onClick
方法并点击进入,可以看到红框部分的判断:
代码如下:
Frida Hook
其中 m9662
方法是未开通专业版时才调用,因此反过来开通了专业版则不会调用该方法,将 C1834.m9387()
的返回值改为 True
,使用 frida 进行 Hook:
成功绕过专业版功能限制:
双向证书验证
Mengxinb 师傅还分析了如何通过分析网络请求来绕过专业版功能限制,但Fakelocation 使用了双向证书来校验,mengxinb 师傅使用的是手动分析,而我一般首先习惯使用大佬们的脚本。
使用 r0capture 脚本 dump 证书
一把梭:
脚本默认开启 dump 证书:
打开并使用 XCA
导入搞定:
致谢
感谢大佬们开发的工具及脚本:
https://mp.weixin.qq.com/s/JPzjpQ3ZoY7cd5K1ZywTZA
https://github.com/r0ysue/r0capture
mengxinb 师傅的文章:
https://www.52pojie.cn/thread-1955462-1-1.html
软件君子主页:
https://space.bilibili.com/638226254