<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>

          Python 爬蟲進(jìn)階必備 | 某游戲網(wǎng)站密碼加密邏輯分析(webpack 的 js 加密代碼怎么扣 -思路分析)

          共 1414字,需瀏覽 3分鐘

           ·

          2021-04-16 02:56

          點(diǎn)擊上方“咸魚學(xué)Python”,選擇“加為星標(biāo)
          第一時(shí)間關(guān)注Python技術(shù)干貨!

          今日網(wǎng)站

          aHR0cHM6Ly93d3cuZ205OS5jb20v

          這個(gè)網(wǎng)站來自咸魚的技術(shù)交流群

          本來是好奇是什么網(wǎng)站用 Reres 匹配不了看看是不是出了什么新的反爬措施

          結(jié)果分析下來并不是,不過分析都分析了,就寫篇文章,這個(gè)網(wǎng)站的加密使用了 webpack 所以就順手分析下應(yīng)該怎么扣

          還是那句話:通用算法的話不用扣,直接引用加密庫,別給自己找事

          加密定位

          知道加密是登陸使用的密碼,所以直接找登陸請(qǐng)求,目的明確的定位里面的加密參數(shù) password

          兩種方法定位:

          1、檢索password參數(shù)定位

          2、在network按照initator中列舉的js直接溯源

          用第二種方法,先進(jìn)去下斷點(diǎn),然后再次點(diǎn)擊登陸就進(jìn)入斷點(diǎn)了

          多調(diào)試幾次就找到了下面這里的位置

          s = (new Date).getTime() 
          r = g.encode(t.password, s)
          p = {...password: r,}

          根據(jù)上面的偽代碼可以看到現(xiàn)在位置的就是g.encode這個(gè)方法

          繼續(xù)斷點(diǎn),然后請(qǐng)求,可以看到下面這樣的邏輯

          基本就完事了,rsa 加密公鑰的就在上面setPublicKey地方,使用通用加密導(dǎo)包的方式復(fù)現(xiàn)加密,整個(gè)流程到這里就結(jié)束了

          加密分析

          既然開始的時(shí)候說到要看看這里使用的 webpack,這里簡單看看

          先看看這里 webpack 的特征

          將這里全部的代碼復(fù)制到編輯器中,將括號(hào)都收縮好

          整體結(jié)構(gòu)是這樣的偽代碼

          !function(x){
          xxxxx
          }([
          function xxx,
          function xxxx,
          function xxxxx,
          ]);

          是不是和上面的偽代碼一毛一樣

          除了結(jié)構(gòu)之外,webpack 最重要的是他還有一個(gè)方法的加載器,加載后就是分析 webpack 加密的時(shí)候經(jīng)常會(huì)看到xxx(90)、xxx['xxxx']這樣的調(diào)用,扣代碼的時(shí)候感覺代碼全是套娃

          他的模塊加載器一般在代碼的最上面,也有一些網(wǎng)站是將這個(gè)代碼拆分到別的 js 文件中

          像我們這個(gè)網(wǎng)站是在最上方

          他先定義了一個(gè)空的s,然后在n里面做了判斷,判斷s[t]有沒有東西,如果有就不進(jìn)入下面的邏輯了

          所以這個(gè)模塊加載器一般在網(wǎng)站加載之后就不會(huì)再進(jìn)去了。

          所以我們分析的邏輯里會(huì)看到一個(gè)s=r(3)是已經(jīng)加載好的

          斷點(diǎn)下在這個(gè)位置是不會(huì)斷住的

          需要在現(xiàn)在模塊加載器上下上斷點(diǎn),然后刷新網(wǎng)站,就會(huì)斷住了

          點(diǎn)擊i[3]的回顯就可以看到s=r(3)的代碼在什么位置了

          webpack 怎么扣

          1、原來的代碼是有加載器的 我們也弄一個(gè)加載器

          2、模仿上面?zhèn)未a的方式定義自己的模塊列表

          這里自己的模塊列表內(nèi)容容就是加密參數(shù)經(jīng)過的加密邏輯代碼,摳出來放進(jìn)去

          放到代碼里紅框的位置

          3、扣取到代碼不會(huì)報(bào)錯(cuò)就可以了,之后就是導(dǎo)出對(duì)應(yīng)的方法照著加密的邏輯一個(gè)個(gè)拿來用就完事了。

          完事,好了,今天的文章到這里就結(jié)束了,我們下次再會(huì)~

          對(duì)了,看完記得一鍵四連,這個(gè)對(duì)我真的很重要。

          瀏覽 33
          點(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>
                  日韩欧美性爱视频 | 国产精品扒开腿 | 色婷婷亚洲网 | 303毛片基地 | 午夜免费视频 |