通过Fiddler(手动&脚本)实现阅读APP任意收费内容&图书馆自习室预约位置降维打击

前期准备工作及抓包原理简介

关于Fiddler和手机的配置可以看我上一篇博客最全从零配置Fiddler实现抓取app数据
至于抓包的原理说简单了就两个字"代理",也就是中介,你访问任何网站都经过这个代理服务器。
就像是中介知道你想要大概什么样的房,预算大概有多少钱(你发送的请求(Request));
他也能知道那边都有些什么样的房,打算卖多少钱(你所能接受到的响应(Response))。
Fiddler最可怕的就是它还能骗买家、骗买家,你看上一套房,你告诉中介你能出120w,他却跟卖家说你最多出110w(修改请求报文)。
同样的,卖家本来是打算115w卖的,他却告诉你卖家报价120w才卖(修改响应报文)。
如果最终谈拢了,就是卖家把房子卖了110w,你出了120w,中介净赚10w,还不算中介费。maye,现实其实是一来一回的讲价,但是我把自己绕晕了,哈哈哈,所以就用最简单的,只还一次价举例。对不起中介大哥了,只是为了举例子,现实中我相信买家和卖家也不会一次面都不见的吧?(我也不清楚),但是Fiddler在这里就是可以让买家(客户端)和卖家(服务端)不进行任何直接通讯,完全隔开并修改请求和响应。

破解收费app

先澄清一下是为了练手随便下的一个软件,并不是刚需,因为我是不会在iPad上编程的,所以对该软件并没有任何恶意,只是为了熟悉Fiddler,在我对我们学校预约系统分析之后有点力不从心(微信小程序有微信的API,难度大很多),所以先拿简单的来练练手。同时我也不建议各位拿这个干不好的事情哈。
大家都是程序员,开发不易,就不公开app的名字啦,这是一款可以阅读python相关书籍和运行简单python程序的软件,希望大家尽可能的还是支持下开发人员,破解软件仅为学习。如果该app作者能够看到这篇博客的话,给点建议,您开发的软件挺不错的,体验很好,真的!但是您软件里的书籍,大多都是网上开源的书,在价格上希望您能做出一定调整,这款app的功能和UI我个人都是非常喜欢的,如果在大一不准带电脑又在自学python的话我是肯定会愿意为此买单的,但是需要一个合适的价格,而且我相信会有很多人愿意为此买单的。

分析接口

为了方便分析,在获取有用数据之前可以清空之前抓到的数据,清空完马上点进你想进的网址或者界面,可以更容易的找到你想要的数据。清空方法如下图,也可以选中其中一条数据之后按Ctrl+x。
在这里插入图片描述

  • 然后随便点进去一本书,可以看到只有前三章免费,需要充钱或者开通会员才能继续阅读。
    在这里插入图片描述
    几乎在点开书籍的同时可以在fiddler中看到下面两条数据(在抓包前我清空了,点开后马上看就这两条数据,所以很快就能断定我想要的数据就在这里),是一个JSON文件,打开一看很容易找到里面有一个叫做isBuy的key,它的value为0。也很容易想到是否可以通过把isBuy改成1骗过app的前端,让前端以为我已经购买了这本书,从而实现所谓的破解。
    在这里插入图片描述

拦截响应(Response)并修改

退回书籍菜单,重新打开书籍之前可以清空一下数据,并按下图设置,这样就能拦截响应了。然后再打开书籍。
在这里插入图片描述
成功获取到数据,按下图修改Response :
在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

手动修改破解成功

一定记得关闭下载/响应拦截可以看到原本关着的锁打开啦,这个时候只要不退出去就能一直看直到看完这本书啦
在这里插入图片描述

脚本实现自动破解

上述方法虽然可以实现阅读收费内容,但每次退出重进(也可以一直放在后台不关闭)都需要重新修改一次,作为程序员,咱怎么能这么容易满足是吧,fiddler提供了自定义脚本,可以自己用JScript.NET定制化。
FiddlerScript 是用 JScript.NET 语言写的, 它是.NET 里的一种编程语言,可称是 JScript 的后继者,写起来有点类似 C#。
打开Fiddler脚本编辑器,可以通过Rule-Customize Rule,或者用快捷键Ctrl+R。

在这里插入图片描述
将这个函数修改如下:(因为没学过JScript.NET,如果注释有错误还请一定要在下面留言告知,是对我莫大的帮助)

	static function OnBeforeResponse(oSession: Session) {
		if (m_Hide304s && oSession.responseCode == 304) {
			oSession["ui-hide"] = "true";
		}
		
		//过滤请求,判断该请求是否为打开书本的请求
		var isOpenTheBook = false;
		//oSession应该是Session派生出来的一个类
		if(("ws.60he.com" == oSession.hostname) && (true == oSession.fullUrl.Contains("book.htm?method=item&userId")) ) {
			isOpenTheBook = true;
		}
		
		if (isOpenTheBook) {
			//获取url中的JSON字符串
			var responseStringOriginal = oSession.GetResponseBodyAsString();
			//FiddlerObject.log(responseStringOriginal);    // 可在控制台中输出Log,可用于调试
			
			//将字符串Decode成byte型
			var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
			
			responseJSON.JSONObject['book']['isBuy'] = 1;	//将是否购买了的标志位Set
			 
			Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject); 
			//JsonEncode的入口参数为json:object
			//没学过JScript的渣渣不懂为啥要用.JSONObject
			//FiddlerObject.log(responseJSON.JSONObject.GetType()); 
			//用log方式查看到了responseJSON.JSONObject是System.Collections.Hashtable类型
			//responseJSON是Fiddler.WebFormats.JSON+JSONParseResult类型
			//就想Python里的字典也是用的Hash,必须用哈希表才能快速索引,才能修改,JSON源文件无法通过key-value的方式索引。
			var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
			oSession.utilSetResponseBody(responseStringDestinal);
		}
	}

Ctrl+S保存—关闭—愉快的享受畅通无阻的Python学习吧!!!!

图书馆/自习室预约位置降维打击

图书馆预约系统每天都要下午六点准时预约第二天的位置,那个时候服务器往往是卡到掉渣,根本进不去,所以我就想能不能自己用Python写个程序,正好我也有服务器,挂在服务器上每天定点帮我预约,岂不美哉。然而想要实现这个功能,首先第一步就是对微信小程序-预约系统-后台API等数据进行抓包分析,emmmm,这就是我为啥用Fiddler的原因。

写到这里实在是不想写了,首先是这类博客实际不难,没啥知识点,都是操作,都是图片写起来特别费劲,产出比太低。然后就是操作上实际都差不多,所以如果你看了上一节如何抓包的这里对你来说应该非常简单,因为这个确实比上一节简单得多得多。

因为预约第二天的链接要等18:00才能出现,而那个时候服务器肯定是炸的,每次都预约不到(考研大军太可怕了,加上自习室改造好几个大教室不能用),所以我就抓包分析后台API,获取到下面这条链接

在这里插入图片描述
这条链接一看很容易知道修改date就是对应日期的预约地址了,这是今天晚上18:00之后才会出现的地址,我现在就能打开。

在这里插入图片描述
虽然可以提前打开预约地址,但是预约还是得18:00;还有就是因为这个链接只能在微信中打开,所以必须提前编辑好地址发给自己小号或者朋友,等快到18:00的时候我提前打开,选好位置/时间,等18:00一到,只要点一下确定马上就预约成功了。自此预约从来没有失败过。

真的很抱歉,写到最后大家从图片也能看到几点了,之前写配置fiddler太长了所以单独写成了一篇博客(相当于我一次性写了两篇这种性质的博客),加上CSDN的编辑器貌似有点小bug,书写体验很不好,所以到后面写的可能有点心烦意乱,文章难免也乱。这种性质的博客说实话真的难搞。

!@求助@!

我抓包获取到了登陆用的post请求,也获取到了一个预约固定教室固定位置的get请求,需要cookies。

  1. cookies的有效时间挺短的,每过一段时间就会刷新,包括我用手机在预约界面呆几分钟不动就会提示我重新登陆。
  2. 不能登陆网页版微信(所以github上python模拟登陆微信的代码用不了)

在不使用模拟微信的收费API的前提下,有什么办法可以解决这个问题呢?我就想实时获取登陆预约系统的cookies,这样的话我就能用python写个程序挂在服务器,每天到18点就自动发送一次get请求就能预约啦。那才是真正的舒服,也是不给咱程序员丢脸是吧。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值