中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

寫爬蟲遇到APP的請求有加密參數時該怎么解決

發布時間:2022-01-18 10:36:12 來源:億速云 閱讀:454 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關寫爬蟲遇到APP的請求有加密參數時該怎么解決,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

這里我寫了一個演示用的APP給你玩,它會像我前面所說的一樣,發出一個請求并帶有一個加密參數——sign,且每次請求時sign都會變化。

安裝之后打開它,并準備好你的抓包工具,然后點擊“點擊發送請求”按鈕。

不出意外的話會出現一個“sign校驗通過”的提示,然后我們看看抓到的包吧。

寫爬蟲遇到APP的請求有加密參數時該怎么解決  
抓包結果

從抓包工具中我們可以很明顯地看出來,會變動的參數有兩個,一個是ts,一個是sign。(為了看到變化建議多發兩個請求對比)

先分析一下參數的含義吧,ts從名字上可以看出來,應該是個時間戳,實際將ts的值格式化一下也可以確定這就是個請求時的時間戳;然后是sign,一眼看上去大概32位左右,而外觀長這樣的一般是hash,猜測一下最有可能性的是md5之類的,但不知道實際是如何生成的,只能逆向看看了。


該正式開始破解這個加密參數了,由于Android APP是靜態編譯的,不像JS,直接可以看到源碼,所以…我們需要對APP進行反編譯,這里我使用的工具名為Jadx,前面的《寫APP爬蟲會需要用到哪些工具呢?》和《當你寫爬蟲抓不到APP請求包的時候該怎么辦?【高級篇-混淆導致通用Hook工具失效】》文章中也有提到,這里就不再贅述了。

寫爬蟲遇到APP的請求有加密參數時該怎么解決  
使用jadx反編譯APK

反編譯之后可以看到這么一堆亂七八糟的的東西,那么我們要怎么找到生成sign參數的地方呢?

看到那個像魔法棒一樣的按鈕了嗎?點一下它。

寫爬蟲遇到APP的請求有加密參數時該怎么解決  
jadx搜索文本

然后它會彈出一個“搜索文本”的窗口,接著我們有兩種方式快速定位到生成的位置:

  1. 搜索URL的路徑部分

    路徑部分指的是/learning/hash_sign這一段,當然有些APP為了復用可能會將路徑拆分成多段的,如果直接搜索完整路徑搜索不到的話可以嘗試以反斜杠為分隔符,將路徑拆分成多個來搜(記得從右往左搜,別問為什么),這里的話我們直接搜索hash_sign即可,因為這個名字很獨特,一般應該不會出現有其他不相關的東西也叫這個名字的情況。

    一搜就能定位到請求的位置了~

    寫爬蟲遇到APP的請求有加密參數時該怎么解決    
    通過搜索路徑方式定位
  2. 搜索你要找的參數

    比如這里我們需要找的是sign這個參數,可以直接搜索"sign"(注意帶上雙引號),但如果結果很多,而且還都很像生成/設置sign的地方的話,可以搜一些別的比較獨特的參數,比如這里出現的model、brand之類的在代碼中一般不會經常出現的詞。

    由于這個DEMO APP比較簡單,所以直接搜索"sign"就能定位到設置值的位置了~

    寫爬蟲遇到APP的請求有加密參數時該怎么解決    
    通過搜索參數名方式定位

定位到了代碼位置之后我們就可以開始看代碼了,從搜到的結果中我們可以看到生成sign、設置sign、設置路徑的代碼都在這個l方法下,然后我們來從設置sign的位置開始從下往上分析,這樣代碼的邏輯會更容易看懂一些。

寫爬蟲遇到APP的請求有加密參數時該怎么解決  
定位到的代碼

這里我將代碼中的關鍵點都做了標記,你可以按著旁邊標注的序號跟著我一起來看這個代碼。

首先這個aVar4.a有兩個地方出現了,但是傳入的第二個參數都是stringBuilder2,而下面那里是直接設置了一個空值進去,顯然不是我們想要找的,所以我們可以忽略掉下面的那一行帶有sign關鍵詞的代碼,直接看標注了1的那一行。

寫爬蟲遇到APP的請求有加密參數時該怎么解決  

選中stringBuilder2這個變量,可以看到它的值是從上面那個stringBuilder3.toString()得到的,接著看看stringBuilder3的生成,for循環這里做了什么操作看不懂,但是可以看到上面有個很顯眼的字符串"MD5"。那么我們可以大膽地猜測一下,這個stringBuilder3實際上就是做了個MD5操作而已,與我們最開始抓包時的猜測相同,直接往上看看Hash前的字符串長啥樣,然后測試一下吧,不行的話再回來看。

寫爬蟲遇到APP的請求有加密參數時該怎么解決  

從前面MD5操作的位置可以看到digest方法里用到的參數又是一個叫做stringBuilder2的變量,繼續往上看就能看到實際上是從stringBuilder.toString()那得到的,那么這個stringBuilder又是怎么來的呢?從代碼中我們可以看出似乎是for一個TreeMap然后把每一個key和value組成key=value的格式寫入stringBuilder中,如果stringBuilder里已經有值的話還會添加&符號,那么這最終出來的東西可以聯想到的是什么?對!就是queryString那部分,只不過它的參數是被排過序的(因為TreeMap會自動進行排序)。

寫爬蟲遇到APP的請求有加密參數時該怎么解決  

然后我們再往上面看,驗證一下想法正不正確,可以看到最源頭的地方是個HashMap,被put進去的都是我們抓包時看到的參數。


現在我們就把這個sign的生成邏輯給理清楚了,其實它就是個按照參數名排過序的queryString進行了一次MD5操作后的產物,接下來我們只需要在代碼中實現這個生成邏輯就行了,在Python中,你可以使用它自帶的官方庫hashlib來對一個字符串做MD5操作。

寫爬蟲遇到APP的請求有加密參數時該怎么解決那么我們寫一段代碼模擬請求一下試試,sign確實可以通過校驗,說明我們生成的sign是可以使用的,至此,加密參數破解完成。

提示:建議實際操作中不要這么測試,容易觸發反爬。可以先拿抓包得到的參數生成一遍對比一下,如果一樣則說明生成的sign沒有問題。

關于寫爬蟲遇到APP的請求有加密參數時該怎么解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

app
AI

宜川县| 榆林市| 饶平县| 大安市| 湘乡市| 望奎县| 鹤庆县| 鹰潭市| 广河县| 寿光市| 久治县| 淮安市| 湛江市| 高邮市| 平舆县| 荆州市| 宜君县| 清原| 乐亭县| 三门峡市| 武冈市| 洪湖市| 武城县| 盐城市| 南开区| 措勤县| 罗定市| 克山县| 白沙| 西贡区| 五华县| 安吉县| 乐亭县| 九龙坡区| 修武县| 吴江市| 九寨沟县| 潜山县| 景洪市| 昌图县| 长沙县|