關於超星學習通視頻加密分析


學校又有新的課程要觀看了,沒辦法,只能上才藝了

對於像這種網課類的觀看,發送的數據請求一般都是ajax,攜帶的關鍵參數大致如下

  • 當前的觀看時間
  • 當前觀看的課程章節id
  • 當前課程的id

隨便找了一個課程,發送的數據如下

因為我已經分析過了,就直接告訴大家,發送數據的參數只有enc是不斷變化的,且用js加密生成,objectid和ontherinfo針對當前所看的課程章節是不變的,
觀看其他的課程就會發生相對的變化,好了,通過單詞的字面意思大致知道意思,接下來我們就要分析enc是怎么生成的,好模擬發送對應的請求

找js的方法有很多,這里就不介紹了,網上一大堆方法,我這里通過發送對應的ajax的initiator找到了相關的js文件

我這里為了方便觀看,直接提取出關鍵的js代碼

var format = "[{0}][{1}][{2}][{3}][{4}][{5}][{6}][{7}]"
var clipTime = (params.startTime || "0") + "_" + (params.endTime || params.duration);
var enc = Ext.String.format(format, params.clazzId, params.userid, params.jobid ? params.jobid : "", params.objectId, currentTimeSec * 1000, "d_yHJ!$pdA~5", params.duration * 1000, clipTime);
var rurl = [params.reportUrl, "/", params.dtoken, "?clazzId=", params.clazzId, "&playingTime=", currentTimeSec, "&duration=", params.duration, "&clipTime=", clipTime, "&objectId=", params.objectId, "&otherInfo=", params.otherInfo, "&jobid=", params.jobid, "&userid=", params.userid, "&isdrag=", isdrag, "&view=pc", "&enc=", md5(enc), "&rt=", params.rt, "&dtype=Audio", "&_t=", new Date().getTime()].join("");

為了更方便的觀看數據,我已經提前打好了斷點,拿到了數據,可以看到enc其實是拿對應的參數進行字符串的拼接,然后做md5簽名
我們已經知道了enc是怎么生成的,然后我們需要知道其他的參數怎么來的,前面已經說過,既然這些參數是不變的,那么一般都會在頁面剛加載的時候就已經生成了
我們對其中任一一個固定的值進行全文檢索

 mArg = {"attachments":[{"headOffset":139000,"jobid":"1581681271463334","otherInfo":"nodeId_305814262-cpi_67960467","isPassed":false,"property":{"jobid":"1581681271463334","switchwindow":"true","size":1025113278,"fastforward":"true","hsize":"977.62 MB","module":"insertvideo","name":"3.5 從“全面建設小康”到“全面建成小康”.mp4","mid":"9733390305491581681270487","type":".mp4","objectid":"9c3a5a79e7d0473b06409f9bb566acad","_jobid":"1581681271463334"},"mid":"9733390305491581681270487","playTime":139000,"job":true,"type":"video","objectId":"9c3a5a79e7d0473b06409f9bb566acad"}],"defaults":{"fid":"1982","isFiled":0,"ignoreVideoCtrl":0,"reportUrl":"https://mooc1-1.chaoxing.com/multimedia/log/a/67960467","userid":"82506971","reportTimeInterval":60,"initdataUrl":"https://mooc1-1.chaoxing.com/richvideo/initdatawithviewer","knowledgeid":305814262,"qnenc":"4d74ade22640d3418796027099215e30","defenc":"9e694cf3bbb44d0d9764fa88acfb3dd5","clazzId":25967418,"cardid":274708987,"imageUrl":"https://p.ananas.chaoxing.com/star3/origin/3a7c4e2929905646967168696f78ff01.png","lastmodifytime":1588505782000,"state":0,"courseid":211852763,"subtitleUrl":"https://mooc1-1.chaoxing.com/richvideo/subtitle"},"control":true};

這里面的值差不多就是提交ajax的參數了

我們可以通過請求這個url,來拿到對應的數據,這里的knowledgeid就是chapterid
寫到這里,感覺參數都拿的差不多了,可以試着來模擬一下請求,發送數據了

當我看到請求的url時,納尼,怎么連url都有對應的參數,通過上面mArg中的reportUrl可以看出只有后面的一串數字是變化的
到目前為止,我們還有兩個參數沒有拿到,一個是請求url的最后一串數字,還有一個duration

其實請求url的最后一串數字就是dtoken

像這種參數的話,一般都是在請求課程頁面的時候,會發送ajax獲取到相關的數據

這個請求返回了我們要找的dtoken和duration

但這個請求后面的url是通過objectid來拼接的

到目前為止,我們已經找到了發送請求的所有數據了,可能有點亂,我來總結一下步驟

  1. 通過課程的首頁拿到每一個章節的chapterid和clazzid,courseid

  2. 通過之前拿到的courseid,clazzid,chapterid來請求這個url,拿到mArg里面的數據

  3. 拿到了objectid,對這個url進行請求,拿到duration和dtoken

  4. 對拿到的所有數據進行封裝,最后發送ajax請求修改觀看的時間

叮叮叮,大功告成了,因為超星的檢測比較嚴,過度的請求會出異常,所以自己看着來就好了,上述教程只供學習使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM