因為學校有要求要做四史活動所以就去分析了一下
目前已經完成了題庫收集題目算法查重,成品就不發出來了怕有人賣分,就講講一路來的思路以及如何去分析的。
首先還是做題的時候抓下包分析一下題目的來源以及如何提交並判斷答案是否正確,
從抓的包分析 進入答題一共會有三種請求分別是:
1.獲取本次答題所有題目id的GET請求;(提交答題類型,獲取隨機抽出的題目id)
2.通過題目id獲取題目選項的GET請求;(提交題目id,獲取題目選項)
3.通過題目id獲取題目答案的POST請求;(提交題目id以及選擇的答案id,獲取正確答案選項的id以供判斷是否正確)
第一眼看到(2.)中返回的題目詳情 就感覺題目id並不是很簡單的固定id
下面是(1.)中返回的題目id;
對比發現不管是 題目id 還是 題目的選項id 和 答案id 都是長為24的中英文混合字符串
下面是(2.)中返回的題目詳情
當我發現和題目有關的id並不是固定的而且並不能判斷是用什么加密方式的時候 便想到了兩條路
1.通過將題目詳情api中返回的題目title和選項title去除干擾無用的標簽以及其他的一些東西
例:以下是一個選項的截圖 紅框框出的是我們所需要的選項內容 其他的都是干擾無用的東西
2.直接強干加密(當然我是走的第二條路子)
當然這時候並沒有思路去解密
去干擾思路
通過分析多個選項 發現 如果需要使用題目明文儲存題庫的話需要去除一些無用的東西
紅框框出的含有display:none的style屬性的標簽是干擾用的,去除前后干擾標簽以及內部文字(內部標簽有的話先不去除)
再次尋找到如果去除干凈再去除所有標簽剩余就是需要的選項內容
例如上圖中
第一次去除綠色部位
第二次去除剩余標簽部位,剩下就是就是需要的選項內容
題目去干擾也是同樣的方式
大體收集題庫思路就是 每次獲取選項以及題目,去干擾后暫時保存(保存id以及明文),隨便選一個得到答案id后,給后台提交題目明文以及答案明文
獲取后台答案思路就是 獲取到題目后,給后台發送題目明文,后台匹配到答案明文輸出 (題目建議md5摘要后儲存)
好處是不需要分析id,且這樣不可能發生題目重復答案不同(用id來分析的發生了)
但是這種儲存題目的方法有個問題,就是提交答案時是用選項id去提交,並且去除干擾代碼寫起來有點麻煩(沒試過)
分析id思路
一下為相同題目的6次id和6次A選項的 id
這里我就不詳細說了就說一下思路
通過對比每次題目id變化以及選項id變化,發現變化是有一定規律
發現規律之后需要想出一種能夠用該規律去判斷id或者選項是否相同(這時候還不能保證題目重復的問題)
我用的一種摘要算法
然后就可以開始儲存,每次需要提交題目id以及所有選項id去判斷 題目的選項摘要然后返回提交的選項中正確的那個(多個選項儲存為:正確選項1|正確選項2)
但是會有一定概率題目不同但是id的摘要相同,那怎么辦呢,我琢磨了以后發現,其實題目id的摘要重復並不是什么大問題,因為每次返回答案的時候都需要提交該題目的選項id
所以就可以將不同題目相同id摘要的答案像多選題一樣儲存然后判斷提交的選項摘要數據庫是否含有,並返回。
大體思路就是這樣具體實現就不說了,若有缺陷還請指出,感謝!!!