小程序模板網(wǎng)

我是如何次次《頭腦王者》獲得滿分的

發(fā)布時間:2018-01-24 10:47 所屬欄目:小程序開發(fā)教程

前言最近答題類的應(yīng)用實在是太火了,什么沖頂大會、百萬英雄啊,動不動就幾十上百萬的獎金,著實讓人看著很是眼紅...然后本弱雞學(xué)疏才淺...題目全靠蒙,便不湊什么熱鬧了。之后沒過幾日有個小程序倒是在辦公室里面火 ...

 
 
 

前言

最近答題類的應(yīng)用實在是太火了,什么沖頂大會、百萬英雄啊,動不動就幾十上百萬的獎金,著實讓人看著很是眼紅...然后本弱雞學(xué)疏才淺...題目全靠蒙,便不湊什么熱鬧了。之后沒過幾日有個小程序倒是在辦公室里面火了一把,就是這次需要拿來開刀的《頭腦王者》,其實也是個答題的小程序,所以還是不擅長就是了。雖然我不擅長答題,但我好歹是個程序員呀,所以我走上了一條程序員的通頂之路...

成果

每輪游戲需要答5題,全對并且快速作答才能拿到滿分,滿分是1200分。有了這種戰(zhàn)績,世界第一不是夢!當(dāng)然玩游戲是為了樂趣,本弱雞只是出于興趣使然,這種答題類的游戲還是自己玩比較有意思。

準(zhǔn)備工作

在開始寫這種游戲的輔助之前先思考幾個問題。

如何偽造接口請求?
如何實現(xiàn)精準(zhǔn)答題?
如何完成自動答題?
如何偽造接口請求?

首先小程序的接口請求都是基于HTTPS的,具體捕獲Https的方式我這邊還是采用Anyproxy去捕獲,需要安裝對應(yīng)的Https證書才可以。之前的文章也有提及,這里再贅述一遍。

本文采用的Anyproxy,使用其他的代理工具也是一樣的。

1. 安裝node.js
2. npm i -g anyproxy
3. anyproxy-ca // 生成證書
4. anyproxy -i // 以代理https的方式啟動
// 然后手機端配置代理的IP及PORT,默認(rèn)端口為8001,
// Anyproxy的WebService的默認(rèn)端口為8002,這里可以查看到接口
// 手機端配置代理以后需要下載證書并信任,
// 蘋果端的可以在手機的Safiri里面輸入xxx.xxx.xxx.xxx:8002/fetchCrtFile的方式下載到證書
// 高版本的iOS可能需要在兩處地方信任。

配置完以后,打開游戲就能抓取到頭腦王者對應(yīng)的請求包了。我先模擬了一次好友對戰(zhàn),然后需要分析了哪些包是需要的。這里我就直接把一些重要的接口給貼出來了

login接口(登錄接口,這里重要的信息是uid和token)
intoRoom接口 (進入房間的接口)
beginFight接口 (開始對戰(zhàn)接口)
findQuiz接口 (找題目接口)
choose接口 (答題接口)
getResults接口 (獲取比賽結(jié)果的接口)
leaveRoom接口 (離開房間接口)

先從接口看一下,這是一個非常順暢的游戲流程,但是拿到這些接口我就可以開始為所欲為了嗎?顯然是不可能的,如果每個人都能有權(quán)限肆意使用別人的接口的話,豈不是可以很輕松的做到DDoS攻擊或者很輕松地獲取到自己想要的信息了嗎?對于一家有經(jīng)驗的公司來說顯然是不會犯這種錯誤的,那么我隨便拿一個接口來稍作分析。

上圖是天梯排位匹配接口,從Body中可以看到需要傳給服務(wù)端matchId、npcId、uid、t、sign五個參數(shù),這5個參數(shù)都是必須的,只有有一個參數(shù)出錯,那請求就無法成功,前四個其實好理解,關(guān)鍵是第五個簽名參數(shù)sign,是怎么來的呢?
這里就需要用到逆向工程了...簡單的描述就是...拿到小程序中頭腦王者壓縮后的源碼,并分析出其中的加密規(guī)則,篇幅有限,這里就直接描述其加密規(guī)則了。

sign的生成規(guī)則:Body內(nèi)所有的參數(shù)(除去sign)+ token(login接口獲取)并按照key值排序以后對齊進行MD5加密,
比如uid=111, t=222, token=333,那么加密前子串應(yīng)為t=222token=333uid=111
既然sign也有了,那其實就很簡單了,然后我就用node寫一個簡單的client去做偽造了接口請求。

如何實現(xiàn)精準(zhǔn)答題?

目前也有許多沖頂大會、百萬英雄的輔助,他們的思路是答題的時候快速識別到題目并進行快速的搜索題目進行輔助答題,但對于這款游戲,如果想實現(xiàn)精準(zhǔn)的答題的話,最好的辦法就是匹配題庫,那么問題就是題庫怎么來?當(dāng)然是通過爬蟲去爬取的了,OK...來讓我們找一找題庫的接口!顯然這是不可能的!要是對外開放了題庫的接口,這個游戲也太容易被攻破了把。但是從上述的一步中,其實我們已經(jīng)實現(xiàn)了開房模擬對戰(zhàn)了,那么是不是可以一直開房間一直對戰(zhàn)的方式獲取到題庫呢?所以我這里采用的就是這種思路。

success是腳本自動答題打?qū)Φ念}目(一共5題),total是總共的題庫數(shù)量。從這個規(guī)??梢钥闯鰜?,正確率已經(jīng)是極高的了,說明題庫的數(shù)量應(yīng)該估計只有17000左右的范圍,但是由于剩下的題庫仍然在補充且最后的10%會需要較大的成本才能覆蓋到,其實題庫做到這一步已經(jīng)足夠了,80%+的滿分概率...幾乎已經(jīng)是無人匹敵了吧?
如何實現(xiàn)自動答題?
自動答題的方案有兩種:

類似跳一跳游戲,通過截屏=>OCR讀取題目=>匹配題庫=>模擬點擊答案

Anyproxy代理,寫rule文件修改請求,捕獲findQuiz請求接口,server重新發(fā)起請求并等待數(shù)據(jù)返回=>判斷返回的題目是否已經(jīng)存在于數(shù)據(jù)庫=>匹配答案直接作答或返回題目

本弱雞在這里使用的就是第二種方案(具體實現(xiàn)就不贅述了,大家可以直接看源碼)

總結(jié)

不太善于寫文章,上述很多步驟都簡單帶過了,在這里只是簡單地描述了一下過程,然后我會開源這部分的代碼,寫得有些簡陋希望各位大佬們不要嘲笑(由于在寫Anyproxy的rule的時候沒法使用babel,所以我用require取代了import)。最后希望大家能給與我一點支持及肯定,給點star吧...只要10個不過分吧!有好心能請我喝杯咖啡那就萬分感謝了。>.<
如有在嘗試的時候碰到問題,也可以加本弱雞的wx: lyh2668

項目地址GitHub: 頭腦王者輔助



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://www.u-renovate.com/wxmini/doc/course/19607.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點擊咨詢
QQ在線咨詢