注意:目前pdd已經須要登錄,這篇文章是在未更改以前寫的,若是須要實踐須要先登錄pdd再進行操做便可html
上週的pdd不少人說看了還不會找,都找我要寫一篇來教教如何扣代碼的,那就應你們要求,今天來寫一篇詳細的扣代碼過程,徹底從零到一,若是對你有幫助,還望大力分享,這樣我會越寫越多。git
代碼都放在個人Github上,尚未star的感受star了,哈哈,可能今週會更新別的網站,因爲網站太強給推遲了,還得須要時間,爲了爬蟲可謂掉光了頭髮。github
Github:https://github.com/SergioJune/Spider-Crack-JSweb
其餘很少說了,直接開始今天的主題,扣代碼。chrome
上篇文章我已經找到了加密位置了,就是下圖這個位置數組
若是還不知道怎樣找的話,能夠看看https://sergiojune.com/2019/03/26/pinduoduo_anti_content/,微信的被舉報刪除了,暫時只能在我blog上看了,這裏就很少說了。瀏覽器
咱們在扣代碼以前,爲了方便調試,能夠先建立一個 html 文件,這樣能夠方便咱們直接在 chrome 上直接進行調試,或者建立一個 js 文件也能夠,不過進行調試時須要在 webstorm 上調試才能夠。這裏我就建立了一個 html 文件。微信
而後把咱們扣下來的代碼放到 script 標籤裏面便可,而後使用瀏覽器進行打開便可調試。webstorm
這裏咱們知道了 e[p("0xd2", "jLF%")](Z) 這個語句是生成 anti_content 的,因此能夠直接打斷點到這個語句進行查看它所須要的語句。ide
點擊下一步,進入了這個函數內
若是你調試過屢次以後,發現這個是將一些加密後的字符串解密爲正常的函數名字。若是你第一次扣的話,估計是把這個函數直接給扣出來,可是後面會有不少麻煩,好比變量之間的關係,因此咱們應該是把整個大函數給扣出來,便是包括這個函數的函數,看下圖
可是當你扣的時候,發現剛纔咱們加密的那個方法也在這個函數裏面,這時就得改改了,不扣大函數,由於扣了以後調用開始就不免會出錯,仍是直接把這個小函數扣出來先,以下圖:
這時就能夠用瀏覽器打開這個文件了,能夠看到報錯
這時不要慌,報錯是正常的,由於咱們只扣了一下部分,因此還須要繼續找,接下來就是查看報錯的地方並斷點。
能夠用這個和原網址上的運行做比較,發現這個變量是個數組,因此也直接扣下來。
你細心的話會發現,下面還有個打亂這個數組的函數,正確來講應該是還原數組,須要兩個一塊兒扣下來。
這時再次刷新文件便可正常獲得結果了
咱們再看下一個問題。
再次點擊到達錯誤位置,再根據原網站對比
能夠發現這是個函數,能夠點擊箭頭所指函數直達函數位置,發現仍是和加密的語句在同一個大函數內,因此咱們仍是直接扣出 Z 函數便可
再次刷新運行,出錯的位置也變了
咱們繼續進入錯誤位置和原網址的對比
發現這個變量是個方法名,能夠往上找找定義位置
估計這裏面的變量都是有用的,因此直接所有扣了
再次刷新便可看到錯誤地方不同了,繼續找便可。
在出錯地方斷點的同時也須要在原文件中斷點,而後將原文件的運行到該斷點處就能夠了。
接着就是查找這個對象的定義的地方了,而後把代碼扣下來便可。
這裏不止 F 對象, 還有 B,U,z等對象,定義位置都是在附近的,也都一塊兒扣下來便可。
再次刷新看到少了個 data 屬性,這裏本身手動加上便可
接着運行就變成了這個錯誤
仍是一樣與原文件作對比便可。找到原文件的定義地方,而後所有扣出來他們的定義。
我這裏是將整個大函數都扣出來,而後自調用來返回上面所須要的對象,這樣封裝能夠避免不少變量的衝突。
再次刷新,錯誤就到了另一個地方了。
也是一個函數,對比原文,很容易找到函數,直接扣出
繼續保存文件刷新,錯誤也變了
對比原文件,知道這個是搜索的 url,這裏咱們直接賦值便可,能夠在咱們調用函數的時候傳這個參數。
再次刷新,仍是這些對象的data屬性的問題
也是和上面的同樣,看原文是什麼值,直接賦值便可。
而後到了這個錯誤
仍是比較原文,找出函數定義,並扣出來,就很少說了。
接着就是到這裏的錯誤了。
這個錯誤比較麻煩,不過耐心點來仍是能夠的,仍是來比較原文件中的JS看看那裏不同。
比較這個 Y 對象,發現咱們的少了一個data,接着就是找 Y 這個 data 的生成位置了。根據上面的內容,很容易就能夠知道定義的位置。
能夠知道這個 l() 就是生成 data,能夠打斷點原文件並刷新就能夠看到生成步驟了。
這裏須要直接把 l 所在的位置的外部大函數都扣出來,而且自調用返回這個 l 函數便可。
接下來的仍是重複以前的步驟,說多了也是廢話,相信你們應該能觸類旁通,若是實在不會的話就多看幾遍文章吧,本身動動手,總會有收穫的。
文章首發:教你一步步扣代碼解出你須要找到的加密參數