【Android 原创】Fake Location 1.3.2.2专业版破解教程(虚拟定位软件)
2024-8-21 15:11:50 Author: mp.weixin.qq.com(查看原文) 阅读量:23 收藏

作者坛账号:mengxinb

app :Fake Location 1.3.2.2(http://fakeloc.cc/app)
工具:jadx、burp、frida、pycharm、ida、雷电模拟器、算法助手
方法:hook相关代码
难点:加壳、代码混淆、双向证书校验、so层加解密

app界面:

注:软件为360加固,需要先脱壳

1.观察app,发现切换专业版功能后会出现一个“试用专业版”弹窗,我们直接用算法助手定位

2.勾选“控件文本赋值记录”后重新打开app,可以发现算法助手已经捕捉到“试用专业版”的相关信息

3.我们直接将脱壳后的dex文件全部放入jadx中反编译,然后搜索堆栈

4.直接hook该方法,发现确实被调用,而且第一个参数就是“试用专业版”,仔细观察代码,就会发现这是一个配置按钮的方法

5.我们要找的是判断是否为专业版的地方,软件肯定是先判断是否为专业版,然后再根据判断结果执行是否显示“试用专业版”,因此我们得往上继续追

6.定位到方法后,我们可以看到刚才的m2329,仔细观察,可以发现这个方法也还是一个配置方法,根据不同的判断,来配置视图,继续往上追

7.我们追第三个,这个是双类中的方法,因此要先搜类,然后再去里面找方法

8.定位到类后,直接找里面的onPostExecute方法,在此方法里,我们看到了熟悉的m4095,而且它是在一个判断条件里,如果"!C1808.m3820()"为真,那么就执行它并直接返回,而m4095又是一个视图配置方法,那么我们是不是就可以猜测,"!C1808.m3820()"就是一个判断是否为专业版的地方,如果为真,则执行弹出"试用专业版",如果为假,则执行其它

9.我们直接双击m3820追上该方法,直接hook它让它返回true,这样"!C1808.m3820()"就会为假,就能跳过m4095

10.运行代码,成功完成破解,所有功能全部正常使用

绕过双向证书校验

1.我们深入研究软件判断专业版的原理,观察m3820可以发现只有当m3819和m3821都为假时,它才会返回真,而m3819和m3821都是获取时间戳,然后用J去比较大小,只要J大于时间戳,那么它们就都会返回假,从而实现专业版功能

2.直接追key和token看看里面是啥,在这个类中,我们能看到很多跟登录信息相关的东西,可以推测这就是从服务器获取相关信息,重点是key和token的值

3.设置burp代{过}{滤}理抓包后,发现抓不了包,而且app显示”Trust anchor for certification path not found.找不到证书路径的信任密钥。“,显然是app做了证书校验,我们直接用算法助手的”justTrustMe“过证书校验

4.可以发现,软件显示400,并且能抓到app的包,但是显示”400 No required SSL certificate was sent“,因为这是双向证书校验,”justTrustMe“只能过掉单向校验,双向证书校验需要客户端提供证书发给服务器并由服务器进行验证;而这个证书一般都放在软件里面,因此我们需要去找到该证书和密钥然后将它导入到burp才能实现抓包

5.将app后缀修改为zip后全部解压出来;正常来说,证书一般都是存放在assets或者res中,并且证书格式一般为”.crt“、".cer"或者".p12"等等;但是这个app狡猾的一点就是你用常规方法找不到它证书,无论你在文件中搜啥,你都搜不到;这种情况只能去代码中找线索了

  

6.正常来说,有证书那就有对应的密钥,而”KeyStore“就是密钥库,存储了密钥和证书;直接搜关键词”KeyStore“,直接进第一个,可以发现这个方法就是用来配置证书连接的;它会创建两个密钥库并指定为BKS格式,一个放客户端证书密钥,还有一个放服务器端证书密钥,并用密钥保护各自证书;因为”justTrustMe“已经帮我们解决了服务器端的证书,我们只要看客户端的就行;重点观察r2,可以发现它证书居然伪造成.png格式,怪不得怎么搜都搜不到,这个作者真是大大的坏啊;然后我们直接双击"f14125"去看密钥,可以发现密钥就是:“lerist.key.2021”

7.现在密钥有了,证书也有了,但是证书是.png格式,必须将它转换为正常的证书;在代码中我们可以看到密钥库格式为BKS,因此我们也要使用同样的格式将其转换为正常的证书格式;在这里我使用“BouncyCastle”对其进行转换;转换后的证书命名为“keystore.p12”

8.将证书导入到burp中

 

9.重新打开软件开始抓包(算法助手中的”justTrustMe“勾选后打开),可以看到成功绕过双向认证实现抓包

破解so层加密

10.我们登录软件后抓包看看,可以清楚的看到登录包的相关信息,以及服务器返回的响应,在响应中我们能看到key和token,并且是被加密了的,有加密必有解密,软件肯定是要解密服务器的信息然后再拿去比较的

11.我们回到代码查看;j最终是要跟m3838这个时间戳比较,那么j肯定是要被解密后才能去跟一个时间戳作比较,而m4305就是解密的关键

12.直接hook m4305看看它的参数和返回值,参数就是key和token,确实是这个方法解密了,解密后的数据是一个数组,其中第一个时间戳为专业版过期时间,另一个为距今七天后的时间;那么我们就知道这个软件的验证原理了——它从服务器获取两个时间戳,然后分别跟现在的时间戳进行比较,只要从服务器获取的两个时间戳都大于现在的时间戳,那么判断你就是专业版;而它解密的关键就是”LSafety.getObjs“,直接双击跟进看看

13.可以发现它是本地方法,在so层进行解密操作;因此,我们得去找到libsafety.so文件,然后将它拖到ida中查看

14.直接搜"getobjs",双击跟进查看,f5将其转换为伪代码便于查看;可以发现返回的是一个函数;我们继续跟进查看

 

15.跟进后还是返回一个函数,继续跟进;还是函数,接着跟进;最终我们在de()函数中定位到最终解密的地方,并且a2和a3就是传入的key和token

 

16.它是静态注册,我们直接改参数;然后查看解密的具体代码

17.仔细研究后可得——(函数先对key进行base64解码——>获取K_PREFIX和token进行拼接转换生成密钥——>使用DES算法用密钥对key进行解密);整个流程知道了,现在就差K_PREFIX的值了,跟进看看它的值是啥

18.直接一眼就看到了K_PREFIX的值为”Lerist.“,万事具备,只欠东风;直接用py编写解密代码,并进行验证

19.可以看到,成功解密出key的值

20.当然,你也可以编写对应的加密,通过拦截获取token的值,然后修改两个时间戳让其大于现在的时间戳,再对其进行加密,然后发包给软件同样实现破解;破解的方法有很多,不同思路有不同的破解方案

通过研究此款app,我学到了不少东西,无论是双向客户端验证还是so层解密等等,都让我受益匪浅,怎么说呢,逆向的道路永无止境,只有不断学习;此款app是一款非常经典的虚拟定位软件,可以说是同类中的佼佼者,我之前因为步道乐跑还付费用过好几次,确实不错,支持正版,此内容仅供交流学习,不提供任何破解成品;感谢大家支持,一起交流学习

-官方论坛

www.52pojie.cn

👆👆👆

公众号设置“星标”,不会错过新的消息通知
开放注册、精华文章和周边活动等公告


文章来源: https://mp.weixin.qq.com/s?__biz=MjM5Mjc3MDM2Mw==&mid=2651141273&idx=1&sn=c806c2d8eb3c4c42dd5166ea457a946f&chksm=bd50a4cd8a272ddb8f6c3e156cf79d12585df1d20526c8a5c853864c99e62f51645e1993f93d&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh