注意:目前pdd已經需要登陸,這篇文章是在未更改之前寫的,如果需要實踐需要先登陸pdd再進行操作即可
上週的pdd很多人說看了還不會找,都找我要寫一篇來教教如何扣程式碼的,那就應大家要求,今天來寫一篇詳細的扣程式碼過程,完全從零到一,如果對你有幫助,還望大力分享,這樣我會越寫越多。
程式碼都放在我的Github上,還沒有star的感覺star了,哈哈,可能今週會更新別的網站,由於網站太強給推遲了,還得需要時間,為了爬蟲可謂掉光了頭髮。
Github:https://github.com/SergioJune/Spider-Crack-JS
其他不多說了,直接開始今天的主題,扣程式碼。
上篇文章我已經找到了加密位置了,就是下圖這個位置
如果還不知道怎樣找的話,可以看看https://sergiojune.com/2019/03/26/pinduoduo_anti_content/,微信的被舉報刪除了,暫時只能在我blog上看了,這裡就不多說了。
1. 建立 HTML 檔案
我們在扣程式碼之前,為了方便除錯,可以先建立一個 html 檔案,這樣可以方便我們直接在 chrome 上直接進行除錯,或者建立一個 js 檔案也可以,不過進行除錯時需要在 webstorm 上除錯才可以。這裡我就建立了一個 html 檔案。
然後把我們扣下來的程式碼放到 script 標籤裡面即可,然後使用瀏覽器進行開啟即可除錯。
2. 開始正式扣程式碼
這裡我們知道了 e[p("0xd2", "jLF%")](Z) 這個語句是生成 anti_content 的,所以可以直接打斷點到這個語句進行檢視它所需要的語句。
點選下一步,進入了這個函式內
如果你除錯過多次之後,發現這個是將一些加密後的字串解密為正常的函式名字。如果你第一次扣的話,估計是把這個函式直接給扣出來,但是後面會有很多麻煩,比如變數之間的關係,所以我們應該是把整個大函式給扣出來,即是包括這個函式的函式,看下圖
但是當你扣的時候,發現剛才我們加密的那個方法也在這個函式裡面,這時就得改改了,不扣大函式,因為扣了之後呼叫開始就難免會出錯,還是直接把這個小函式扣出來先,如下圖:
這時就可以用瀏覽器開啟這個檔案了,可以看到報錯
這時不要慌,報錯是正常的,因為我們只扣了一下部分,所以還需要繼續找,接下來就是檢視報錯的地方並斷點。
可以用這個和原網址上的執行作比較,發現這個變數是個陣列,所以也直接扣下來。
你細心的話會發現,下面還有個打亂這個陣列的函式,正確來說應該是還原陣列,需要兩個一起扣下來。
這時再次重新整理檔案即可正常得到結果了
我們再看下一個問題。
再次點選到達錯誤位置,再根據原網站對比
可以發現這是個函式,可以點選箭頭所指函式直達函式位置,發現還是和加密的語句在同一個大函式內,所以我們還是直接扣出 Z 函式即可
再次重新整理執行,出錯的位置也變了
我們繼續進入錯誤位置和原網址的對比
發現這個變數是個方法名,可以往上找找定義位置
估計這裡面的變數都是有用的,所以直接全部扣了
再次重新整理即可看到錯誤地方不一樣了,繼續找即可。
在出錯地方斷點的同時也需要在原檔案中斷點,然後將原檔案的執行到該斷點處就可以了。
接著就是查詢這個物件的定義的地方了,然後把程式碼扣下來即可。
這裡不止 F 物件, 還有 B,U,z等物件,定義位置都是在附近的,也都一起扣下來即可。
再次重新整理看到少了個 data 屬性,這裡自己手動加上即可
接著執行就變成了這個錯誤
還是同樣與原檔案做對比即可。找到原檔案的定義地方,然後全部扣出來他們的定義。
我這裡是將整個大函式都扣出來,然後自呼叫來返回上面所需要的物件,這樣封裝可以避免很多變數的衝突。
再次重新整理,錯誤就到了另外一個地方了。
也是一個函式,對比原文,很容易找到函式,直接扣出
繼續儲存檔案重新整理,錯誤也變了
對比原檔案,知道這個是搜尋的 url,這裡我們直接賦值即可,可以在我們呼叫函式的時候傳這個引數。
再次重新整理,還是這些物件的data屬性的問題
也是和上面的一樣,看原文是什麼值,直接賦值即可。
然後到了這個錯誤
還是比較原文,找出函式定義,並扣出來,就不多說了。
接著就是到這裡的錯誤了。
這個錯誤比較麻煩,不過耐心點來還是可以的,還是來比較原檔案中的JS看看那裡不一樣。
比較這個 Y 物件,發現我們的少了一個data,接著就是找 Y 這個 data 的生成位置了。根據上面的內容,很容易就可以知道定義的位置。
可以知道這個 l() 就是生成 data,可以打斷點原檔案並重新整理就可以看到生成步驟了。
這裡需要直接把 l 所在的位置的外部大函式都扣出來,並且自呼叫返回這個 l 函式即可。
接下來的還是重複之前的步驟,說多了也是廢話,相信大家應該能舉一反三,如果實在不會的話就多看幾遍文章吧,自己動動手,總會有收穫的。