赞
踩
20190722:第一次编写
写在前面igotolibrary - github :qmppz/igotolibrarygithub.com上一个版本【我去图书馆-抢座助手】二叉树:"我去图书馆"抢座助手-python实现zhuanlan.zhihu.comsessionid 抓包与指令集帮助:https://dwz.cn/DueaPBVDdwz.cn
【我去图书馆】、【来选座】这类公众号借助微信的平台提供预约座位的服务,本意是方便大家
但是防护验证措施比较弱
由此带来的结果就是总是有人在“闷声发大财”偷偷使用程序抢座,这明显的不公平
以现在的防护验证强度推测,自习室座位越紧张的学校,使用外挂抢座的越多;
只是没有人公开源码
抢座主逻辑详解
1. 流程1,抓包,获取通信交互数据
2,分析参数,尝试离线构造参数
3,py模拟提交测试
2. 关键函数
function:reserve_a_seat
# reserve a seat
@utils.catch_exception
def reserve_a_seat(self, libid='', coordinate='', pre_or_today=pre):
key_seat_page = pre_seatmap_page
verify_key = verify_key
url_prefix = url_prefix_pre
seatmap_pageurl = seatmap_pageurl_pre
seatmap_page_html = utils.get_response(
url=seatmap_pageurl, sess=self.sess,
m_headers=self.CF.M_HEADERS_PRE_RESERVE, m_cookies=self.CF.M_COOKIES, verify_key=verify_key)
if not seatmap_page_html:
return False
soup = BeautifulSoup(seatmap_page_html, 'html.parser')
hexch_js_code = requests.get([e for e in soup.find_all('script') if
str(e).find(cache_layout_url) >= 0][0]['src'], verify=False)
hexch_js_code.encoding='utf8'
ajax_url = re.compile(r'(?<=[A-Z]\.ajax_get\().*?(?=,)').search(hexch_js_code.text).group(0).replace('AJAX_URL', url_prefix)
hexch_js_code = re.sub(r'[A-Z]\.ajax_get', 'return%s; T.ajax_get' % ajax_url, hexch_js_code.text)
http_hexch_seatinfo = execjs.compile(hexch_js_code).call('reserve_seat', str(libid), coordinate)
response = self.sess.get(http_hexch_seatinfo, proxies=utils.get_proxy(), headers=self.CF.M_HEADERS_PRE_RESERVE, cookies=self.CF.M_COOKIES, verify=False)
# return
return verify_response(response.text)
步骤流程图
3. 参数获取
上述流程的关键就是如何解析得到hex_code
//抢座 urlhttps://wechat.v2.traceint.com/index.php/prereserve/save/libid=1234&sESx8nLBnQHh=128,63&yzm=
这是一段加密的hex_code,这应该是为了修复的上一个版本的爬虫漏洞,而新加的验证字段,每次请求都会变;
但是仔细分析【我去图书馆】首页的 html,可以发现有三个
打开这个url,可以清晰的看到这个顾名思义的函数:
reserve_seat
所以只要每次去获取这段加密 js 代码,直接使用python-execjs模块执行js即可得到hex_code
然后提交get请求即可抢座。
到这里我就有了点疑问:为何添加了hex_code字段,却又把生成这个字段的函数reserve_seat()简单直白清晰的放在旁边?
......
希望 【我去图书馆】后台验证不要这么直接,能稍微完善一点;至少屏蔽掉大部分外挂,让大家公平的抢座!
为了学习!
最后
文章发布即向我去图书馆的官方分享文章链接进行反馈
工程部署到了微信 《为了学习》公众号,仅供体验测试,学习交流,服务启动中…
还有什么想说的请留言
参考链接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。