高階爬蟲:破解 Instagram 簽名加密算法「一」

閱讀本篇預(yù)計(jì)需要 5 分鐘

分享之前,我想和大家說件事:

“ 大家應(yīng)該也看到了我最近更新的頻率很低,原因就不說了。不過這種情況只會持續(xù)一段時(shí)間而已,如果要關(guān)注我的分享可以加我的微信 mcx1469 ,當(dāng)然加我的時(shí)候注明下個(gè)人介紹?!?/p>

正文

Sign 算法我相信大家并不陌生,通俗的來說就是一種簽名算法。在我們訪問的很多 Http 請求中為了保證請求的安全性都會追加一種簽名。

當(dāng)然這種 Sign 算法的存在也是有必要的,一個(gè)很復(fù)雜、很精密的 Sign 算法能很大程度上提高服務(wù)的安全性。例如微信朋友圈的接口,現(xiàn)在幾乎沒人能破解。

所以今天我要分享的內(nèi)容是:破解一個(gè)國外大廠的 Sign 算法。

當(dāng)然我會分步驟的進(jìn)行分享,目的是為了對各位讀者在之后的技術(shù)中能有所幫助。

這里我就不繞彎子了,這個(gè)所謂的國外大廠其實(shí)就是 Facebook 。 而我進(jìn)行破解的 Sign 算法則是 Instagram 的一套加密算法。后文中將由 Ins 來代替。

  • 1、為什么要破解這套加密算法

很多玩 Ins 的朋友應(yīng)該都知道,無論是在 App 上 還是 PC 上都無法進(jìn)行保存Ins 圖片的操作。

這是因?yàn)?Ins 為了保護(hù)原創(chuàng)所以在 App 和 JS 上都動了手腳,不允許有保存操作。

對于很多技術(shù)人來說:越是不讓我做什么,我越會去做什么。

所以市場上就出現(xiàn)了形形色色的關(guān)于 Ins 保存圖片的小工具,這個(gè)我就不分享了。感興趣的可以去搜一下,一大堆。

其實(shí)保存某張圖片的原理很簡單,就是 圖片鏈接 + ?__a=1 就會得到一段 JSON 。

但是。。。

如果我要獲取到某個(gè) Ins 明星的所有照片,雖然我也可以通過 主頁鏈接 + ?__a=1 來拿到,但問題是這種操作只能在你登錄的狀態(tài)。

我們可以來驗(yàn)證下:

CASE 1、 在登錄 Ins 的情況下,獲取 JSON 數(shù)據(jù)

a:打開 Ins 上一個(gè)明星的主頁,注意這段鏈接

image

b: 在這個(gè)主頁的鏈接之后,我們增加 ?__a=1 來看看

image

可以很明顯的看到有一段 json ,而這段 json 正是 Wade 主頁的一部分圖片。

CASE 2、注銷 Ins 的登錄再來試試

image

在未登錄的狀態(tài)下,同樣可以訪問到 Wade 的主頁。但這時(shí)候我們再來試試獲取 JSON 數(shù)據(jù)。

image

網(wǎng)頁出錯(cuò),請求被拒絕。很明顯我們已經(jīng)沒有權(quán)限去讀取這段JSON。

所以通過這么一步步驗(yàn)證之后,我們會發(fā)現(xiàn) Ins 的個(gè)人主頁數(shù)據(jù)并不會這么簡單的被獲取到。

插個(gè)題外話,其實(shí)在 FB 的 ”隱私門“ 之前這種方式還是可以正常請求的,但自從那件事之后接口就被 Ban 了。

這也正式的引出了我今天的主題,如何在未登錄的狀態(tài)下獲取 Ins 個(gè)人主頁的圖片信息。

  • 2、*分析思考+實(shí)踐

很多人應(yīng)該都注意到了在未登錄情況下,我們至少還可以在瀏覽器上訪問到這些數(shù)據(jù)。

而且我還可以告訴你,上滑可以分頁拿到所有數(shù)據(jù)。

因此,這足以證明我們是完全可以通過代碼來拿到這些數(shù)據(jù)的。至于怎么去拿,就需要我們一步步分析。

很多人可能會說用 SeleniumJS 就能解決,但問題是效率太低。所以這種方式我們不考慮,我們需要直接調(diào)用接口來獲取。

這時(shí)候會用到抓包工具,我個(gè)人用的是 Charles 。

a: 打開抓包工具,抓到主頁的數(shù)據(jù)。

image

可以看到,這就是 wade 的主頁數(shù)據(jù)。

b: 找到我們需要的數(shù)據(jù)

那么我們需要的數(shù)據(jù)又在哪,其實(shí)很簡單,我們在瀏覽器上打開 wade 主頁之后隨便找一個(gè) 字符串或者數(shù)字進(jìn)行復(fù)制。

然后在抓包工具中進(jìn)行搜索,就能找到它的位置。

image

例如我通過查找 Wade 的”個(gè)人介紹“ 成功的找到了抓包工具中的數(shù)據(jù)位置。

我們會發(fā)現(xiàn)其實(shí)這些數(shù)據(jù)就是在之前抓到的網(wǎng)頁里面,我們將這個(gè)網(wǎng)頁復(fù)制出來在文本編輯器中打開看看。

image

再次搜索之后,我們發(fā)現(xiàn)這些數(shù)據(jù)保存在一個(gè)命名為 window._sharedData 的 JS 字符串中。

我們可以將這段內(nèi)容復(fù)制出來,然后用 JSON 格式化工具進(jìn)行格式化會發(fā)現(xiàn)這就是一段 JSON 數(shù)據(jù),而且也正是我們需要的。

image

細(xì)心的網(wǎng)友會發(fā)現(xiàn),其實(shí)這段內(nèi)容的位置是固定在 sharedData 里面的,因此我們可以通過正則表達(dá)式來匹配到:

image

這樣我們就手動成功的通過各種復(fù)制拿到了一段數(shù)據(jù)。

不過這段數(shù)據(jù)并不是完整的,而是主頁數(shù)據(jù)中的第一頁。后續(xù)還有核心的分頁操作。

(考慮到內(nèi)容太長,核心的分頁邏輯會在下一篇進(jìn)行分享)

通過這一步步分析之后,我們得到了一個(gè)核心數(shù)據(jù)就是這段正則表達(dá)式。這時(shí)候我們可以通過代碼來驗(yàn)證下:

image

如上我們將這段正則應(yīng)用到代碼中,執(zhí)行之后:

image
  • 3、*總結(jié)

到這里,我們就成功的通過代碼來拿到了主頁的部分?jǐn)?shù)據(jù)。

大家可以看到這段代碼很簡單,但要寫出這段代碼是需要經(jīng)過一步步的分析之后才能產(chǎn)生的。

其實(shí)這篇文章中講到的只是一些常規(guī)數(shù)據(jù)的獲取方式,還是很入門很入門的階段。

上面拿到的數(shù)據(jù)也只是一部分,確切的說只是主頁中的第一頁數(shù)據(jù),也就只有 10 來張圖片信息。

而要獲取到更全的數(shù)據(jù),就需要分析其中的分頁邏輯,也正是 Sign 算法的應(yīng)用之處,也同樣是我們要核心破解的點(diǎn)。

聚焦到接口上,其實(shí)就是:

image

而 Sign 字段則是 query_hash。

由于考慮到內(nèi)容太長,接下來的內(nèi)容會在下一篇進(jìn)行分享。

謝謝大家的閱讀

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,150評論 25 708
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,311評論 2 89
  • 文|007同學(xué) 01 這兩天的朋友圈,被一個(gè)來自河北的寒門女孩刷屏了。她名叫王心儀,出生在河北棗強(qiáng)縣一個(gè)普通的農(nóng)村...
    007同學(xué)閱讀 789評論 12 9
  • 楊忠 驅(qū)車遠(yuǎn)上云中山 路險(xiǎn)絕壁風(fēng)光間 側(cè)目萬丈深如海 心驚已過萬重顛
    水滴之旅閱讀 451評論 0 1
  • 夢,是個(gè)奇妙的東西。 記錄夢是一件有趣的事。 寫夢018.1.9早晨 看人物的裝束,是春秋戰(zhàn)國時(shí)代。 我一身戎裝只...
    邵子閱讀 238評論 0 0

友情鏈接更多精彩內(nèi)容