教你一步步扣程式碼解出你需要找到的加密引數

sergiojune發表於2019-04-09
只收藏不點讚的都是耍流氓

注意:目前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 函式即可。

接下來的還是重複之前的步驟,說多了也是廢話,相信大家應該能舉一反三,如果實在不會的話就多看幾遍文章吧,自己動動手,總會有收穫的。


教你一步步扣程式碼解出你需要找到的加密引數


相關文章