锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务,锦州广厦维修电脑,公司IT外包服务
topFlag1 设为首页
topFlag3 收藏本站
 
maojin003 首 页 公司介绍 服务项目 服务报价 维修流程 IT外包服务 服务器维护 技术文章 常见故障
锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务技术文章
用Fiddler实现某干教网App学习记录修改

作者: 佚名  日期:2023-07-26 13:58:50   来源: 本站整理

 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,然后发送。



热门文章
  • 打印机点击OK才能进纸不点ok,它就...
  • 笔记本连投影自动扩展非复制【解决...
  • 显卡显示器刷新率与游戏帧率FPS的关...
  • 大华录像机添加海康摄像头的方法
  • 废旧手机会泄露隐私 恢复手机出厂设...
  • Win11默认输入法怎么设置?Win11开...
  • 用Fiddler实现某干教网App学习记录...
  • 病毒分析小白尝鲜-GANDCRAB勒索家族...
  • 隐马尔可夫模型及其算法
  • 华硕 GTX1050Ti Expedition 和 STR...
  • 显卡维修经验分享,RTX3080,描述为...
  • 蓝天主板改集显维修
  • 锦州广厦电脑上门维修

    报修电话:13840665804  QQ:174984393 (联系人:毛先生)   
    E-Mail:174984393@qq.com
    维修中心地址:锦州广厦电脑城
    ICP备案/许可证号:辽ICP备2023002984号-1
    上门服务区域: 辽宁锦州市区
    主要业务: 修电脑,电脑修理,电脑维护,上门维修电脑,黑屏蓝屏死机故障排除,无线上网设置,IT服务外包,局域网组建,ADSL共享上网,路由器设置,数据恢复,密码破解,光盘刻录制作等服务

    技术支持:微软等