吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10454|回复: 92
上一主题 下一主题
收起左侧

[Android 原创] 用Fiddler实现某干教网App学习记录修改(秒刷学时)

    [复制链接]
跳转到指定楼层
楼主
swordwind 发表于 2022-12-5 23:11 回帖奖励
本帖最后由 swordwind 于 2022-12-5 23:15 编辑

        注册吾爱这么长时间来,一直是看别人的帖子,这几天居家办公,闲时也学着用Fiddler做了一下安卓的App抓包分析,找来找去,还是用最“熟悉”的某干教网来练手了。最终效果是在Fiddler的帮助下,实现网上学习课程暂停后直接退出即完成学习(学时到手),无视课程所需学习时间。

        这就是今天的主角,相关部门人员每年有50个学时的线上学习任务,大多数课都是要看几十分钟到2、3个小时的视频不等。看完诸多大神关于Fiddler的帖子以后,感觉本地学习的数据必定是上传到服务器进行记录,理论上让用Fiddler作中转代{过}{滤}理,截获相关信息并篡改后,直接告诉服务器我已经学完这门课不是就OK了吗?说干就干。新手小白动手实践起来!

1.准备工作
        首先当然是下载安装和配置Fiddler,基本上是按照论坛里bigbirdl大神写的教程一步一步做的,https://www.52pojie.cn/thread-1171662-1-1.html
        因为我用的是MACOS,只能在虚拟机里进行安装,需要注意的是因为Fiddler所运行的主机(既我的Windows虚拟机)需要和手机在同一个局域网(Wifi)里,所以在虚拟机的网络设置里,需要改为“桥接网络(Wifi)”,否则无法正常抓取手机上的数据包。Fiddler设置好并运行后如下图

        另外,个人习惯是把“Rules”菜单下的“Hide CONNECTs”选项给勾选上,这样可以不看建立连接用的数据包(这些数据包里没有我们关心的数据),避免刷屏。另外,抓手机的数据包里,可以暂停本机(电脑)数据包的抓取,方法是单击一下左下角的那个“Capturing”字样处,该处无显示时即可。
2.开始抓包
        手机打开某干教网程序,登录后进入在线学习页面,在开始学习前,可以在Fiddler当前Session列表(即显示一大堆已经抓到的数据包相关信息的窗口)里按“Ctrl+X”快捷键把之前操作过程中抓到的数据清除,准备寻找和分析学习记录上传的相关数据包。

        选了一个2学时的课程,获得学时需要1小时2分24秒。老实说课讲得都非常好,但是我们只要学时,就对不起王老师了😂。开始播放后,我点击了暂停(实际上在后来的分析中发现,App会定时自动回传学习记录,也会在用户暂停的时候马上回传一次学习记录)。Fiddler上马上抓到了一系列数据包,我们来逐个看一看。

        先是几个"isLogin",应该是判断登录信息是否过期的,跳过。然后重点来了,这个"addStudyRecord.json"你们觉得可疑不可疑?这命名简直太规范了,还有下面那个"addNtStudyTime.json",初步锁定就是这两个文件之一了,至于后面的coursedetail这些课程信息相关的,直接忽略不计了。然后分别点开两个包观察了一下,addNtStudyTime.json里并没有相关数据,而addStudyRecord.json这个请求里,可以看到如上图中的studyRecordList这个值,里面的字段也很好辨认(确实是命名很规范),前面是课程和学生的ID,然后是进入视频的时间accessTimeStr、退出(暂停)时间exitTimeStr,接下来是playlength和playTime这两个字段,从两个字段的值可以明显看出来应该是playlength,因为它的值正好就是退出时间减进入时间,单位看来是秒。那么只要把这个值改为我们想要的时长,在服务器端不作数据验证(比如用exitTime减accessTime,算一下是否和playlength一致)的情况下,应该就可以达到我们速刷的目的了。
3.手动修改数据包
        在Fiddler里设置断点,当App向服务器上传数据的时候截获并暂停,待我们修改相关数据以后再放行。

        上面两个图中的办法都可以,也可以参考右图上的快捷键,我们需要设的断点是“Before Requests”,也就是App的请求发出前。然后回到手机上,恢复播放后再一次暂停。这时Fiddler上会显示有请求被截获并暂停,一开始可能并没有我们关心的addStudyRecord请求,可以直接点工具栏上的“Go”(绿色小三角那个图标)放行,直到addStudyRecord出现,直接双击该数据包session,在右边的窗口中修改。

        将playlength改为3600(即1小时),修改完以后一定要按“回车”(好像要这样才能保存修改,新手小白表示不明真相),之后点“Go”放行。在手机上看一下,修改生效了。

        学习进度从0%直接到96%了,实际上刚才修改的时候再多改一点(比如7200秒),就能直接学完课程拿学时。至此,目的达到,学时到手。不过还没完,还有一个小彩蛋。
4.自动修改数据包
        既然上一章叫手动修改数据包,当然会有一个自动修改数据包的彩蛋。虽然能够直接修改学习时长,比拿手机看1小时快多了,但是还是需要反复操作,挺麻烦不是。Fiddler还有一个很强大的功能,可以自动修改request数据(response当然也能)。进入Fiddler的Rules菜单,点击Customize Rules...,快捷键CTRL+R,进入Fiddler ScriptEditor,直接修改Fiddler的自动化脚本。

        方便起见,几张图我就放一起了。在Fiddler ScriptEditor中进入Go菜单下的to OnBeforeRequest,跳转到相应的函数里,然后在函数的最后面加上如下代码。
[JavaScript] 纯文本查看 复制代码
if (oSession.fullUrl.Contains("http://mstudy-bjce.bjdj.gov.cn/mobile/module/mobile/mobileinterface/v1/mobilecourse/addStudyRecord.json")){
                        var reqStr=oSession.GetRequestBodyAsString();
                        //将playlength中的值修改
                        var prevInd=reqStr.indexOf('playlength%22%3A')+16;
                        var nextInd=reqStr.indexOf('%2C%22playTime');
                        var myReqStr=reqStr.substring(0,prevInd)+'3600'+reqStr.substr(nextInd);
                        Fiddler.FiddlerApplication.Log.LogString(myReqStr);
                        oSession.utilSetRequestBody(myReqStr);}

        需要说明的是if判断里的那个URL是在抓到addStudyRecord数据包后,右击该数据包,选择copy菜单下的Just URL,然后再粘贴出来的,也就是只针对这个请求进行修改。实际上,我自己在写这段代码的时候遇到很多麻烦,首先是RequestBody的值我一开始一直以为是JSON格式,但后来仔细看了一下数据包的TextView,发现并非如此。想用正则来替换playlength部分,在网上查了半天,发现Fiddler Script好像并不支持正则(如果有大神知道如何用正则烦请告知为谢),于是就只好用了个笨办法,先找到playlength的位置,再找到后面playtime的位置,把两头的字符串都截出来,再加上我想要的学习时长,拼接成想要的RequestBody,然后发送。

免费评分

参与人数 18吾爱币 +20 热心值 +17 收起 理由
qqycra + 1 用心讨论,共获提升!
pojieit + 1 + 1 我很赞同!
lemonrains + 1 + 1 用心讨论,共获提升!
刀尖上跳舞 + 1 我很赞同!
萌新与小白 + 1 + 1 热心回复!
zhangbo093 + 1 + 1 用心讨论,共获提升!教程非常详细,基本涵盖了fiddler所有用法,感谢分享.
picty + 1 + 1 我很赞同!
QingYi. + 3 + 1 我很赞同!
psp7456 + 1 + 1 我很赞同!
52bulesky + 1 + 1 我很赞同!
bearkr + 1 + 1 感谢楼主,用了这么久fiddler才知道还有自动修改脚本!
watcherrr + 1 + 1 用心讨论,共获提升!
oysf179354755 + 1 + 1 热心回复!
gzmars + 1 + 1 我很赞同!
one88736 + 1 + 1 我很赞同!
明月清疯 + 1 + 1 我很赞同!
Arsage + 2 + 1 我很赞同!
hobby + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
zhangbo093 发表于 2022-12-7 20:14
感谢楼主用心分享!教程步骤非常详细,图文并茂,思路清晰。值得学习!
推荐
 楼主| swordwind 发表于 2022-12-16 10:58 |楼主
本帖最后由 swordwind 于 2022-12-16 11:06 编辑
ydjhome 发表于 2022-12-13 18:26
我按照您的教程试着修改我单位的学习记录,抓包后有两个包应该是更新学习记录。
第一个:

从截图来看,应该是第一个包,即update-progress那个request,需要修改的应该是studyTime。
相关数据明显是加密了,但是你可以试试直接把resourceTotalTime的值复制到studyTime里(前者是课程总时长,如果studyTime是我所猜的已学时长的话,那应该就能直接学完)。
PS:保险起见的话,干脆把lessonLocation的值也用resourceTotalTime的值替换掉,这个字段应该是你当前观看视频位置。
沙发
feiyu361 发表于 2022-12-6 11:15
3#
满不懂 发表于 2022-12-6 11:20
这个方法很好,很实用,感谢分享。
4#
bester 发表于 2022-12-6 11:21
fiddler学习教程在哪能看,我B站找的都是,哎 一言难尽
5#
三滑稽甲苯 发表于 2022-12-6 11:50
没记错的话fiddlerScript是基于javascript的,可以网上找找javascript中的正则表达式
6#
elitest 发表于 2022-12-6 12:24
感谢楼主分享!很详细的教程!
7#
12member 发表于 2022-12-6 13:04
谢谢楼主分享
8#
6497649 发表于 2022-12-6 13:44
感谢楼主分享!
9#
lu5156 发表于 2022-12-6 14:13
感谢分享。
10#
wzyl 发表于 2022-12-6 14:31
整理的有头有尾 井然有序 点赞
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 07:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表