1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python 爬蟲進(jìn)階必備 | 手撕 jsvmp 之某乎請求頭簽名算法分析

        共 2031字,需瀏覽 5分鐘

         ·

        2022-03-04 19:01

        前言

        網(wǎng)站

        aHR0cHM6Ly93d3cuemhpaHUuY29tL3NlYXJjaD90eXBlPWNvbnRlbnQmcT1weXRob24=


        加密定位


        需要分析的接口以及加密參數(shù)?x-zse-96?如下圖


        直接搜關(guān)鍵字?x-zse-96,發(fā)現(xiàn)一個文件,點進(jìn)去


        格式化后再搜索x-zse-96,發(fā)現(xiàn)兩個可疑入口,分別是這兩個



        重新刷新網(wǎng)站,可以看到斷點斷在下圖這個地方,選中執(zhí)行函數(shù)可以發(fā)現(xiàn)加密入口就是這里


        加密分析


        s 明文數(shù)據(jù)

        s?=?'101_3_2.0+'(版本號)?+????'/api/v4/search_v3?t=general&q=python&correction=1&offset=0&limit=20&filter_fields=&lc_idx=0&show_all_topics=0&search_source=Normal+'(接口后綴)?+????'"AIAf1GdgbRSPTtoYPsJrpvRp_MB-_8SxwGQ=|1643717522"'(dc0 cookie)


        第一層加密

        ?l()(s) = '7dd6414484df2c210ddbb996c55cf64c'  ->  md5_str
        根據(jù)js逆向的一些小經(jīng)驗,32位密文很容易想到md5簽名加密,拿到在線md5加密測試網(wǎng)站去試試

        perfect,完美對應(yīng)上,由此可知,第一層加密就是原生的md5加密

        第二層加密
        a()(md5_str) = 'a0xqSQe8cLYfSHYyThxBHD90k0xxN9xqf_tqr6UqH9Op'
        選中a(),點進(jìn)去,會進(jìn)入到這個函數(shù),加密參數(shù)正是第一層加密得到的md5字符串,如圖所示

        然后就單步跟,跟到這里就先別跟了,這里正是jsvmp循環(huán)一條條執(zhí)行指令的地方,下面的代碼會根據(jù)時間來檢測調(diào)試


        然后就在35865行打上log輸出斷點,把this.C索引值跟this對象里面的值都給打印出來,注意要把window除去,不然會缺數(shù)據(jù),索引值方便后序調(diào)試可用
        "索引:",?this.C,?"?值:", JSON.stringify(this, function(key, value) {if (value == window) {return undefined} return value})

        慢慢等待輸出結(jié)束,掉頭發(fā)的逆向之路就可以開始了
        直接在輸出的log日志里面搜索加密生成的密文


        這個vmp生成的加密參數(shù)是分成11組來計算的,每4個一組
        這里面有一個固定不變的字符串,就是這個玩意
        fix_str = "RuPtXwxpThIZ0qyz_9fYLCOV8B1mMGKs7UnFHgN3iDaWAJE-Qrk2ecSo6bjd4vl5"
        拿第一部分?a0xq 舉個例子,看看他是如何生成的,其他的都差不多



        fix_str[13] = 'q'
        q就是這樣來的,每一個字符都是通過索引那個固定字符串得到的,所以,接下來,就該來尋找索引下標(biāo)是怎么生成的,向上尋找,看到這個


        3433258 >> 18 = 13
        這里的18是固定的,其實判斷是不是固定的數(shù)字,只需要對比兩個控制臺里面log輸出的對應(yīng)分析就可以很清楚的知道哪些是固定不變的了
        再來搜索3433258?這個數(shù)字怎么來的


        可以很清晰的看得到,下面這幾種運(yùn)算都可以得到這個數(shù)字,那怎么判斷是哪一種運(yùn)算得到的,我的辦法是:調(diào)試
        1.?25386?+ 3407872 =?34332582.?25386?^?3407872?=?34332583.?25386?|?3407872?=?3433258
        重新打開一個瀏覽器打開鏈接,在log輸出相同地方換上一個條件斷點,斷點的條件是 this.C = 342,具體跟進(jìn)去看看他到底是進(jìn)行的什么運(yùn)算


        這里這一步我就直接說了,是第三種,| 運(yùn)算得到的,知道運(yùn)算符之后,又要去分析兩個參與運(yùn)算的值是怎么得到的,這里就需要慢慢去一步步去逆向搜索分析了,所有參與運(yùn)算的值都可以用這種同樣的方法搜索分析得到

        這部分所有的運(yùn)算流程都在下面了,請各位大佬們自行慢慢對比log輸出去參悟,理解


        最后驗證:




        可以發(fā)現(xiàn),算法還原下來只有短短的50幾行,而且最后本地生成的加密參數(shù)跟瀏覽器生成的完全一致,完結(jié)撒花


        好了,以上就是今天的全部內(nèi)容了。

        我是沒有更新就在摸魚的咸魚

        收到請回復(fù)~

        我們下次再見。

        對了,看完記得一鍵四連,這個對我真的很重要。

        瀏覽 339
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            无码日本精品XXXXXXXXX | 九色PORNY国产成人 | 国产无限资源最新网站 | 国产女主播在线 | 国内精品久久久久久久久鸭下载 | 好湿好紧太爽了公交车动图 | 国内成人精品视频 | 涩涩视频在线观看 | 欧美夫妻性生活片 | 日韩爱爱爱|