<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          爬蟲 | JS逆向某驗(yàn)滑動(dòng)加密分析

          共 2481字,需瀏覽 5分鐘

           ·

          2020-09-06 17:12

          點(diǎn)擊“Python編程與實(shí)戰(zhàn)”,選擇“置頂公眾號(hào)”

          第一時(shí)間獲取 Python 技術(shù)干貨!



          聲明:文只用于學(xué)習(xí)研究,禁止用于非法用途,如有侵權(quán),請(qǐng)聯(lián)系我刪除,謝謝!

          今天給大家來分析并還原某驗(yàn)的 JS 加密,做過爬蟲的應(yīng)該都知道遇到過這個(gè)驗(yàn)證碼,如果你還沒遇到以后你會(huì)碰到的相信我

          話不多說,時(shí)間寶貴,進(jìn)入正題!

          抓包

          進(jìn)入官網(wǎng),點(diǎn)擊選擇今天的主題滑動(dòng)驗(yàn)證,其他驗(yàn)證類型的加密大同小異,只要你掌握了下面的方法!

          點(diǎn)擊按鈕抓包,隨意拖動(dòng)一下,請(qǐng)求數(shù)據(jù)包如下

          可以看到一堆請(qǐng)求參數(shù),其實(shí)你要做的就是實(shí)現(xiàn) w 的加密

          點(diǎn)擊進(jìn)去,就能看到加密的 JS 文件,為便于分析將其保存到本地。

          AST 還原

          通過調(diào)試可以看到有大量的 unicode 格式的編碼以及數(shù)組名稱的混淆

          傳統(tǒng)解決方法是在瀏覽器 console 端輸入就能看到它的廬山真面目,但是這種方法太麻煩了,接下來我們用 AST 來將其還原!

          首先還原 unicode 編碼,打開 AST 在線解析網(wǎng)站(https://blogz.gitee.io/ast/[1])

          將待還原的代碼放進(jìn)去

          可以看到只需要把 extra 屬性刪掉就能還原原來的值。遍歷代碼如下:

          const?parser?=?require("@babel/parser");
          const?traverse?=?require("@babel/traverse").default;
          const?t?=?require("@babel/types");??//操作節(jié)點(diǎn)的函數(shù),比如判斷節(jié)點(diǎn)類型,生成新的節(jié)點(diǎn)等:
          const?generator?=?require("@babel/generator").default;??//生成還原后的代碼
          const?fs?=?require('fs');

          var?jscode?=?fs.readFileSync("./slide.js",?{
          ????encoding:?"utf-8"
          });
          const?visitor?=?{
          ????????StringLiteral(path)?{
          ????????????????delete?path.node.extra
          ????????????}
          }

          let?ast?=?parser.parse(jscode);
          traverse(ast,?visitor);
          let?{code}?=?generator(ast,?opts?=?{jsescOption:?{"minimal":?true}});
          fs.writeFile('decode_slide.js',?code,?(err)=>{});

          注意 jscode 就是之前扣下來的 JS 代碼, 最后將還原后的代碼寫入到 decode_slide.js 文件中

          接下來是混淆數(shù)組的還原。觀察調(diào)試代碼,所有的數(shù)組都是基于 JS 文件中開頭的大數(shù)組 KBBji.$_Co,同時(shí)將該數(shù)組賦值給很多變量,這些變量名都是隨機(jī)生成的。

          所以接下來我們要做的找出這些變量名稱,然后將其替換成對(duì)應(yīng)的字符串值!

          AST 在線解析一下

          image.png

          根據(jù)解析結(jié)果,編寫相應(yīng)的遍歷代碼

          const?visitor?=?{
          ????VariableDeclaration(path){
          ????????const?{declarations}?=?path.node;
          ????????if(!t.isMemberExpression(declarations[0].init))return;
          ????????if(declarations[0].init.property.name?!==?"$_Co")return;
          ????????if(declarations.length?!==3?||?declarations[0].init.property?===?undefined)return;
          ????????let?value1?=?declarations[0].id.name;
          ????????let?value2?=?declarations[2].id.name;
          ????????new_array.push(value1,?value2);
          ????}
          };

          上面就將所有的變量名找出來了,找到之后就能將所有的這種形式 $_DFCB(66) 代碼還原了,這樣代碼就能有個(gè)直觀感受!

          相信聰明的你很快就能寫出還原的代碼。經(jīng)過上面幾步整體還原后的代碼是這樣的

          根據(jù)關(guān)鍵詞很快就能搜索到加密所在位置,清晰可見!如果不還原你是搜不到的.. 還原后在網(wǎng)站上我們也能很快定位到加密位置,打上斷點(diǎn)

          同樣的代碼可讀性相差多大,相信你一眼就能看到。你以為這樣就完了?No!

          Reres 替換

          既然代碼已經(jīng)還原了,但是我們?cè)诰W(wǎng)站上調(diào)試的時(shí)候還是混淆的代碼,那怎么辦呢?

          接下來上另一個(gè)神器 Reres, 它的作用是將請(qǐng)求映射到本地,即你可以用本地 JS 來代替遠(yuǎn)程 JS 文件。

          用法直接參考它的 github https://github.com/annnhan/ReRes[2]

          好了有了這個(gè)東西,我們就能在網(wǎng)站上用還原后的 JS 來進(jìn)行調(diào)試,太強(qiáng)了把!

          效果如下:

          tql,這下加密參數(shù)扣起來就沒壓力了吧!

          后臺(tái)回復(fù) tql 獲取相關(guān)代碼!

          參考資料

          [1]

          https://blogz.gitee.io/ast/: https://blogz.gitee.io/ast/

          [2]

          https://github.com/annnhan/ReRes: https://github.com/annnhan/ReRes



          推薦閱讀


          JS逆向之 RSA 案例匯總

          JS逆向?qū)崙?zhàn)之混淆加密和AES加密的破解

          JS逆向之補(bǔ)瀏覽器環(huán)境的兩種監(jiān)控方式



          THANKS

          - End -



          點(diǎn)個(gè)“在看”必升職加薪喔!
          瀏覽 75
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码在线免费一区 | 午夜福利 码一区二区 | 91精品久久久久久久不卡 | 亚洲欧美日韩黄色大片 | 无码三级在线播放 |