尝试破解某记账APP的VIP验证,顺带发现了彩蛋

尝试破解某个记账APP的VIP验证顺带发现了彩蛋

1.有个朋友

真·有个朋友发来某个开源的记账软件的 github 链接,要我帮忙打个 APK 出来。

我一看这 Readme 下面不是有市场链接么,就进行了一番礼貌交流。

又过了一会,大爷直接甩一张截图过来,让我给他改 VIP,说是有源码重编一下就好。

可是我仓库里搜 "vip" 没有结果,apk下过来一看淦了。

混淆、资源压缩,可是应用都没接广告 sdk,也不知道应用里提示的 VIP 去广告去了什么。

既然大爷有要求,就得给人家干,这个混淆差点给我整不会了。

2.oO0混淆

混淆

这个混淆麻烦的点在于,jd-gui 没法直接搜索,explorer 里也是找起来麻烦,只能一直 vscode 里面全局搜索。

想着先找到界面按钮再去对应到点击事件,看处理的流程去分析。可是找了好一会都没找到按钮的在哪里加载出来的。。。

中间浪费了一段时间去对着AlertDialog源码研究,没注意 package,光看类名不对了

AlertDialog

AlertDialog被混淆成了OooOOOAlertDialog.Builder变成了OooOOO.OooO00o,我对着AlertController的代码一顿分析

AlertController

3.换个思路

混淆看的太费时间,换个思路先抓包。

结果除了接的第三方统计 SDK 以外,没找到别的网络请求。

购买激活码跳到的第三方发卡平台跳转时只带了一个 token,这是搞的本地校验?

可是本地校验设备id都不传就卖验证码么,和我们的需求一样本地几十万的激活码数据库匹配?

复制了应用的存储看,数据库、cache 和 sp 都没有存东西,懵了。

开始重新看代码,搜 host 相关,才发现应用的 Retrofit 设置了 NO_PROXY 绕过代理,怪不得抓不到包。

NO_PROXY

4.确定机制

抓到真正的包以后,一切就都简单了。

分析数据、构造模拟响应测试,应用验证 VIP 的机制直接确定了。

输入激活码的部分,发送 deviceId 和 验证码,服务器校验之后返回的 json 中会包含请求结果的状态。

状态是成功时,本地存储验证码和设备号,激活成功和每次进入应用后再请求第二个接口去验证,验证接口返回的状态为 true 认为有 VIP。

既然应用只判断接口返回的状态,直接在定义的Response基类里面,把获取状态的值永远返回 true 就好了。

return

想改的细致点可以去找每个解析判断数据的接口,再单独改getSuccess前的判断条件,像这样

return2

总之改起来就一行代码,找了半天出去

5.测试

应用开了资源压缩,用 apktool b 的时候会报错找不到一些 attr,直接编 dex 替换进去再重签名。

安装测试一切正常,发给朋友。

6.彩蛋

抓包的时候还发现启动时应用会单独请求彩蛋接口,返回配置包括烟花和下雪。

模拟相应数据看了下,效果还不错。

7.总结

这次主要是学到了先抓包有时候可以节省很多不必要的步骤。

再就是要注意应用的网络框架配置了绕过代理的情况。

正常的流程不顺利时及时换个思路,不要一条死路走到黑,浪费时间和精力。

posted on 2022-01-07 18:03  maiiiiii  阅读(486)  评论(0编辑  收藏  举报

导航