記一次破解前端加密詳細過程
點擊上方 程序員成長指北,關(guān)注公眾號
回復1,加入高級Node交流群
進入爬蟲主題
要爬取的官網(wǎng):https://www.jcairlines.com
接口地址:https://www.jcairlines.com/TicketSale/FlightQuery/QuerySeat
目標:根據(jù)參數(shù)爬取對應的航班信息
請求信息:

響應結(jié)果:

接口測試
從上面的第一張圖可以看到有一個類似加密過的參數(shù):HashCode,而其他的都是根據(jù)需要進行直接填充
{"DepartureIataCode":"TPE","ArrivalIataCode":"PNH","FlightDate":"2018-08-24","RouteIndex":"0","TravelType":"OW","HashCode":"8b112088f6966ea42507d0daff86a1d1"}
下面將這個請求的完整信息放到Postman中跑一下,看看結(jié)果:

可以看到是沒有問題的,能拿到結(jié)果,下面我們準備把HashCode去掉再請求一遍

emmm... 直接不響應!!!
好吧,搞定這個問題就需要破解這個加密參數(shù)是怎么來的
正式破解
【逆向思維】這個肯定是Ajax請求之前生成的,那就用關(guān)鍵字找這個Ajax請求, 在Chrome中開發(fā)者模式,找到這網(wǎng)站的所有Source

【關(guān)鍵字】"QuerySeat" 一大堆js文件一個一個找吧,運氣很好,第一個就是,可以清楚的看到“POST”一詞,那這一定就是一個Ajax請求咯,這里有一個技巧,一般情況下,服務器會對靜態(tài)資源進行壓縮,所以需要format才能看個大概


這樣可以閱讀代碼了,然后輕松找到設置HashCode的地方,然后打一個斷點,隨便查一條航線的數(shù)據(jù),如下圖。

單步執(zhí)行走到這一步,有些眉目了,執(zhí)行到了encode指向的匿名函數(shù)這,里面代碼看似應該是各種加密函數(shù),不用讀懂它,因為目標只是執(zhí)行它,得到相應的結(jié)果就行了

繼續(xù)單步:

繼續(xù)...

上圖中重要的源碼:
return e = OOO0.excess.indexOf("Chrome") >= 0 ? "cv3sdf@#$f3" : OOO0.excess.indexOf("Firefox") >= 0 ? "df23Sc@sS" : "vdf@s4df9sd@s2"
返回到上層,沒錯和我想的一樣,當前瀏覽器是Chrome,返回的是 cv3sdf@#$f3

繼續(xù)...

繼續(xù)...

繼續(xù)...

最終找到了這個匿名函數(shù),復制encode所指向的函數(shù),然后隨便取一個名字,方便調(diào)用,另外,在另一個窗口中打開Console粘貼代碼,如下圖:

調(diào)用...(報錯了)

替換成對應的字符串繼續(xù)...

重新調(diào)用注入到Console 的encode函數(shù),調(diào)用,得到結(jié)果!!!

對比最開始用Postman請求的地方,結(jié)果也一致!!!
還沒有完,這里只是得到了js腳本,所以還需嵌入到Python代碼中使用,常規(guī)方式有兩種:使用Python第三方類庫js2py和PyV8這兩個都是能都執(zhí)行js的Python類庫,但是我還是推薦使用js2py,因為PyV8安裝十分繁瑣,具體使用我就不再贅述,網(wǎng)上有很多的教程和Case。
最后需要交代的:“sfei#@%%”這的到底是哪來的,也沒有尋根,我就直接告訴答案,其實這個值就在當前的網(wǎng)頁中,是一個js變量,且是一個固定值,這也是我不想尋根的原因,意義不大。另外在使用http爬蟲的時候headers里面的內(nèi)容也必須和HashCode相匹配,什么意思呢,之前代碼出現(xiàn)過通過瀏覽器種類,生成不同的字符串,也就是說具體HashCode是和瀏覽器有關(guān),所以在構(gòu)造headers時需要填寫對應的User-Agent,不然服務器進行校驗的時候還是不會響應的,可以猜測服務器中也有一段功能相同的代碼,它根據(jù)請求參數(shù)和headers中User-Agent進行加密計算,得到HashCode以此來驗證請求的HashCode是否合法。
總結(jié)
前端加密還是能夠破解出來的,關(guān)鍵在于鎖定JS加密源碼位置,并且提取出有用的加密代碼,只要有使用過js的同學問題都不大。還有很多小細節(jié)得注意,服務器需要對請求做進一步驗證,方式其實和前端是一樣的以此來判斷請求是否合法,至少這個網(wǎng)站是如此。
本文作者:TheUmbra
本文鏈接:https://blog.csdn.net/lsh19950928/article/details/81585881
如果覺得這篇文章還不錯 點擊下面卡片關(guān)注我

“分享、點贊、在看” 支持一波 
