日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2019年末逆向复习系列之努比亚Cookie生成逆向分析

發(fā)布時(shí)間:2024/1/23 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2019年末逆向复习系列之努比亚Cookie生成逆向分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鄭重聲明:本項(xiàng)目的所有代碼和相關(guān)文章, 僅用于經(jīng)驗(yàn)技術(shù)交流分享,禁止將相關(guān)技術(shù)應(yīng)用到不正當(dāng)途徑,因?yàn)闉E用技術(shù)產(chǎn)生的風(fēng)險(xiǎn)與本人無(wú)關(guān)。

這篇文章是《2019年末逆向復(fù)習(xí)系列》的第二篇:《努比亞Cookie生成逆向分析》

本次案例的代碼都已上傳到Review_Reverse上面,后面會(huì)持續(xù)更新,大家可以Fork一波。

逆向網(wǎng)址

努比亞-牛仔俱樂(lè)部:https://bbs.nubia.cn/

逆向背景

努比亞俱樂(lè)部的逆向有意思在它的Cookie是動(dòng)態(tài)生成的,是由Js生成Cookie的案例,并且這個(gè)網(wǎng)站還有前端反調(diào)試的機(jī)制,對(duì)于新手爬蟲工程師來(lái)說(shuō)很值得學(xué)習(xí)和研究。

分析流程與逆向破解

我們以這個(gè)鏈接為例努比亞-牛仔俱樂(lè)部,訪問(wèn)并打開開發(fā)者工具,讀者會(huì)發(fā)現(xiàn)并沒(méi)有遇到什么異常情況。

等等,我們這次講的是生成Cookie,我們首先需要把該網(wǎng)站的緩存、Cookie清除才行,不過(guò)我們先分析分析它們的Cookie的關(guān)鍵點(diǎn)。

看到Cookie的組成,覺得acw_sc__v2和acw_sc__v3參數(shù)比較可疑,這個(gè)疑問(wèn)我們先存在,之后再看看。
之后我們照例在Application->Clear Storage清除數(shù)據(jù)。

清除完之后我們依舊打開開發(fā)者工具重新刷新頁(yè)面進(jìn)行訪問(wèn),可以發(fā)現(xiàn),網(wǎng)站彈出debugger

知識(shí)點(diǎn)1:前端反調(diào)試

隨著現(xiàn)在爬蟲課程的普及,越來(lái)越多人都掌握了基本的爬蟲用法,類似利用開發(fā)者工具尋找網(wǎng)站接口或者進(jìn)行調(diào)試逆向?qū)ふ壹用芊椒?#xff0c;對(duì)于網(wǎng)站本身來(lái)說(shuō),如何簡(jiǎn)單又有效地減緩這種行為是應(yīng)該考慮的,所以一些網(wǎng)站在代碼中注入了檢測(cè)開發(fā)者工具是否打開的Js代碼,這樣,當(dāng)我們想要打開開發(fā)者工具的時(shí)候我們就會(huì)陷入網(wǎng)站的無(wú)限循環(huán)的debugger地獄,而且這樣還會(huì)造成Js的內(nèi)存泄漏,你可以在遇到這種情況的時(shí)候檢查你的chrome頁(yè)面進(jìn)程,會(huì)發(fā)現(xiàn)內(nèi)存占用量越來(lái)越高,可你什么都沒(méi)干?所以,對(duì)于這種反調(diào)試手段,我們需要學(xué)習(xí)如何繞過(guò)。

1. 繞過(guò)debugger地獄

我們首先查看右邊的Call Stack調(diào)用棧,我們一一分析,可以追溯到如圖所示的地方。

關(guān)鍵代碼是這樣的,也就是一開始會(huì)執(zhí)行_0x4db1c這個(gè)函數(shù)(初步理解是上文所說(shuō)的檢測(cè)開發(fā)者工具是否打開的函數(shù),之后setInterval函數(shù)是每隔一定時(shí)間執(zhí)行)

_0x4db1c(); setInterval(function() { _0x4db1c(); }, 4000);

我們?cè)倏確0x4db1c的函數(shù),它停在_0x355d23這個(gè)函數(shù)上面

面對(duì)這樣的情況,我們可以直接在Console里面對(duì)這個(gè)函數(shù)進(jìn)行重寫

重寫好之后我們執(zhí)行下,會(huì)發(fā)現(xiàn)這個(gè)頁(yè)面就直接生成好Cookie去訪問(wèn)頁(yè)面了,這樣達(dá)不到我們之前想研究它Cookie生成的邏輯的目的。

目前我們繞過(guò)了debugger反調(diào)試,那我們?cè)撛趺传@取生成Cookie的邏輯呢?我們接著分析

2. 破解Cookie生成邏輯

為了我們分析的方便,我們可以直接把這個(gè)debugger的代碼保存下來(lái),在我們本地代碼中刪除debugger的邏輯之后進(jìn)行調(diào)試。

我們直接打開這個(gè)html文件,我們會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)一直卡在Sources不動(dòng),為什么會(huì)出現(xiàn)這種情況?

仔細(xì)分析代碼,發(fā)現(xiàn)有些Regexp的檢測(cè)代碼,根據(jù)以往的經(jīng)驗(yàn)可能是檢測(cè)代碼是否長(zhǎng)開?防止有人本地調(diào)試?我們使用壓縮后的代碼,大家可以用Js壓縮/解壓工具進(jìn)行壓縮

果然,壓縮之后還是正常的,那么可以驗(yàn)證我們剛才的想法了。

我們刪除debugger相關(guān)的代碼,也就是

_0x4db1c(); setInterval(function() { _0x4db1c(); }, 4000);

打開網(wǎng)頁(yè)后發(fā)現(xiàn)頁(yè)面一直在閃?html代碼不長(zhǎng),我們?cè)僮屑?xì)看看,注意到一個(gè)細(xì)節(jié)setTimeout

setTimeout是延后幾秒執(zhí)行一次,我們看一下’\x72\x65\x6c\x6f\x61\x64\x28\x61\x72\x67\x32\x29’是什么意思,我們把它放在Console里看看。

可以看到,setTimeout執(zhí)行reload函數(shù),我們看看reload函數(shù)

function reload(x) {setCookie("acw_sc__v2", x);document.location.reload();}

里面的邏輯是先設(shè)置Cookie再重載頁(yè)面,所以我們這里一直閃的原因是先執(zhí)行setTimeout再重載頁(yè)面又執(zhí)行setTimeout,所以又是一個(gè)循環(huán)地獄,我們刪除setTimeout這段代碼就行。等等,我們?cè)倏纯瓷厦鍯onsole中的結(jié)果reload(arg2),然后到reload函數(shù)中,acw_sc__v2是由arg2這個(gè)函數(shù)得來(lái)的,好,我們現(xiàn)在明白了哪個(gè)地方生成的Cookie了,我們?cè)趆tml代碼中搜索arg2,然后對(duì)它打上斷點(diǎn)。

3. 分析加密算法

我們先總體看下arg2函數(shù)的構(gòu)成

也就是需要_0x23a392和_0x5e8b26這個(gè)兩個(gè)關(guān)鍵參數(shù),_0x23a392來(lái)自arg1的方法生成,它們都是有_0x55f3這同一個(gè)方法,所以我們的思路就清晰了。
我們先看看_0x55f3這個(gè)方法,并且做一些調(diào)試,可以發(fā)現(xiàn)_0x55f3通過(guò)傳入的參數(shù)不同使用不同的方法,有些類似于控制流平坦化。

知識(shí)點(diǎn)2:控制流平坦化

直接上圖

首先_0x5e8b26這個(gè)參數(shù)我們多次調(diào)試后發(fā)現(xiàn)是個(gè)變量,可以先確定,"3000176000856006061501533003690027800375",當(dāng)然我們也可以直接搜索_0x5e8b26

而我們獲取到_0x23a392和_0x5e8b26之后進(jìn)行加密的方法如下


大致的加密就是如上這樣,因?yàn)檎w代碼量也不大,可以直接改寫或者使用python加載Js都行。

4. 總結(jié)思路

這次的案例主要是可以學(xué)習(xí)到兩點(diǎn),第一點(diǎn)就是我們懂得有些網(wǎng)站會(huì)進(jìn)行前端反調(diào)試,手段之一就是會(huì)檢測(cè)開發(fā)者工具是不是打開,而且如果我們把代碼拿到本地,竟然還會(huì)檢測(cè)本地代碼是否是展開的?第二點(diǎn)我們需要習(xí)慣這種代碼混淆的方式,有些網(wǎng)站會(huì)用_0xxxx等無(wú)意義的符號(hào)進(jìn)行混淆,以及使用16進(jìn)制來(lái)做混淆惡心我們,我們想要還原的話直接把代碼放到Console里面執(zhí)行一下就可以了,因?yàn)镴s也能讀取原始的16進(jìn)制碼。

代碼實(shí)戰(zhàn)

有了上面這個(gè)分析流程,我們就可以開始Coding了,以下是acw_sc__v2加密的流程。
獲取arg1參數(shù)的代碼

獲取arg2參數(shù)的代碼

測(cè)試的代碼,先訪問(wèn)官網(wǎng)動(dòng)態(tài)獲取Cookie再在請(qǐng)求頭的Header中加入這個(gè)acw_sc__v2參數(shù)去重載URL訪問(wèn)官網(wǎng)。

復(fù)習(xí)要點(diǎn)

從這個(gè)復(fù)習(xí)的案例我們可以總結(jié)下思路:

  • 如何繞過(guò)前端反調(diào)試?
  • 別害怕混淆的代碼,代碼雖然混淆,但是邏輯還是一樣的。
  • 總結(jié)

    以上是生活随笔為你收集整理的2019年末逆向复习系列之努比亚Cookie生成逆向分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。