二 Sun的逆向之路——FiF口语训练的刷分剖析

闲来无事看了看FiF口语中一些Task的排行榜,翻着翻着意外发现了一个101分的榜首,按理来说满分才只有100分,因此猜想这个分数一定是被动过手脚的,于是来了兴致,从POST请求与APK反编译两个角度分别尝试破解FiF 。
方案一:APK反编译
将FiF的apk文件拖入,发现加载失败,于是拖入jadx,发现原来上了奇虎的加固壳,考虑到只是把玩娱乐,脱壳会大大增加复杂性,于是暂时放弃反编译的想法 。
方案二:POST请求拦截 ?0x01 配置
因为自从用了新电脑就没有抓过包了,因此还是要做一些配置的 。Java Jdk和环境变量的配置工作在此掠过了,但考虑到这次的配置过程还有点不同寻常,所以这里做一下记录 。
运行提示8888端口被占用了,询问是否随机取端口 。考虑到不使用8888可能后面会造成一些不必要的麻烦,于是打开cmd输入 -ano| “8888”,发现原来端口被PID为20348的应用占用了,打开任务管理器的详细信息选卡,发现是,于是结束进程 。

二  Sun的逆向之路——FiF口语训练的刷分剖析

文章插图

二  Sun的逆向之路——FiF口语训练的刷分剖析

文章插图
随后重启,发现没有端口占用提示了 。再次查看8888端口的状态,可以看到这个端口已经成功被监听 。接下来在手机浏览器访问“IP:8888”,安装证书即可,IP可通过控制台指令查看 。至此环境配置结束 。
二  Sun的逆向之路——FiF口语训练的刷分剖析

文章插图
0x02 POST请求拦截
手机端对应设置好HTTP代理后,打开FiF,发现这边的请求很杂乱,这是因为电脑和手机上所有的网络请求都被显示了,于是配置过滤器,只显示抓取Host为的请求,同时通过命令bpc:来设置请求断点 。随便进入一个Task,这里我进的是四级口语模拟题2的Task1 。随便读两句 。
二  Sun的逆向之路——FiF口语训练的刷分剖析

文章插图
随后提交,在上可以看到请求已经被拦截下来了,
【二Sun的逆向之路——FiF口语训练的刷分剖析】
二  Sun的逆向之路——FiF口语训练的刷分剖析

文章插图
对应在右侧的中可以看到对应的:
{"recordPath" : "2811000026000000971\/cc253a5178c44088b736bcb9386f324e\/e7ba561752f34de683f6435e47ced8f6\/t\/0_0.mp3","score" : "0","ansDetail" : "word#0","learn_time" : "2","questionId" : "e7ba561752f34de683f6435e47ced8f6#0#0","accuracy" : "0","fluency" : "0","complete" : "0"}]
显然score代表的就是分数,我们将其修改为101,在中单击Run To 放行修改过的请求,手机端对应有了相应,提示挑战失败,但我们返回列表并刷新,发现实际上数据已经上传成功并在排行榜上显示了 。至此FiF口语的刷分就顺利实现了 。
二  Sun的逆向之路——FiF口语训练的刷分剖析

文章插图
0x03 小结
FiF口语虽然对应用加壳处理了,但是却忘记了对网络请求进行安全加固,导致了刷分的可行性 。希望FiF口语官方对请求参数进行加密或组合加密,或利用sign值算法验证请求的合法性,尽快更新应用并修复此漏洞 。