[igtl-again]我去圖書館-搶座主邏輯詳解

20190722:第一次編寫


寫在前面

【我去圖書館】、【來選座】這類公衆號藉助微信的平臺提供預約座位的服務,本意是方便大家

但是防護驗證措施比較弱

由此帶來的結果就是總是有人在“悶聲發大財”偷偷使用程序搶座,這明顯的不公平

以現在的防護驗證強度推測,自習室座位越緊張的學校,使用外掛搶座的越多;

只是沒有人公開源碼


搶座主邏輯詳解

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
在這裏插入圖片描述

//搶座 url
https://wechat.v2.traceint.com/index.php/prereserve/save/libid=1234&sESx8nLBnQHh=128,63&yzm=	

這是一段加密的 hex_code,這應該是爲了修復的上一個版本的爬蟲漏洞,而新加的驗證字段,每次請求都會變;

但是仔細分析【我去圖書館】首頁的 html,可以發現有三個 <script,其中的一個url便是生成 hex_code的 js 文件的 url;
在這裏插入圖片描述
打開這個url,可以清晰的看到這個顧名思義的函數:

reserve_seat
在這裏插入圖片描述
所以只要每次去獲取這段加密 js 代碼,直接使用python-execjs模塊執行js即可得到hex_code

然後提交get請求即可搶座。

到這裏我就有了點疑問:

爲何添加了hex_code字段,卻又把生成這個字段的函數reserve_seat()簡單直白清晰的放在旁邊?

希望 【我去圖書館】後臺驗證不要這麼直接,能稍微完善一點;至少屏蔽掉大部分外掛,讓大家公平的搶座!

爲了學習!


最後

文章發佈即向我去圖書館的官方分享文章鏈接進行反饋

工程部署到了微信 《爲了學習》公衆號,僅供體驗測試,學習交流,服務啓動中…
在這裏插入圖片描述

還有什麼想說的請留言


參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章