猿人學(xué)2023第二題:加強(qiáng)ob殼混淆
題目地址:aHR0cHM6Ly9tYXRjaDIwMjMueXVhbnJlbnh1ZS5jbi90b3BpYy8y
本題的核心代碼是經(jīng)過OB混淆的,可讀性很差。不過網(wǎng)站本身也提供了反混淆的工具,所以這道題其實(shí)技術(shù)難度并不大。
一、OB反混淆
????????1)通過調(diào)試分析,可以很容易知道:該題目的核心代碼位于 corejs/match2.js 中,文件中的代碼都是經(jīng)過混淆的;

????????2)將經(jīng)過混淆的代碼復(fù)制到反混淆工具中進(jìn)行解析。
????????這一步并不輕松,因?yàn)榻馕鲞^程相當(dāng)漫長,如果使用猿人學(xué)的在線反混淆工具,那么網(wǎng)頁會(huì)進(jìn)入假死狀態(tài),中途還可能發(fā)生網(wǎng)頁崩潰。這里我使用的是自己寫的離線工具,原理是參考上述的在線反混淆工具,所以效果應(yīng)該是一樣的。
????????但是意外不期而至,經(jīng)過20分鐘左右,代碼在執(zhí)行 decodeObject 的時(shí)候報(bào)錯(cuò)了。

????????一番搜索無果,也沒其他辦法,所以就調(diào)整了下解析流程,暫且將 decodeObject 這一步跳過,繼續(xù)后面的解析。
????????順利完成后面的步驟后,代碼縮小了些,但可讀性還是很差,于是我將 decodeObject 步驟恢復(fù),并對(duì)剛才解析后的代碼進(jìn)行反混淆。
????????第二次整個(gè)流程沒再報(bào)錯(cuò)。之后,我又將解析后的代碼反復(fù)解析了兩次。
????????在上述操作中,前兩次時(shí)間消耗都在半個(gè)小時(shí)以上,后面越來越快,直到最后代碼從30000多行縮減到8000多行,當(dāng)再次對(duì)結(jié)果進(jìn)行反混淆時(shí),基本是秒完的。

二、調(diào)試分析
????????1)用Fiddler對(duì)網(wǎng)頁中的JS文件進(jìn)行攔截,替換為我們反混淆后的代碼;

????????2)通過簡單調(diào)試,可以很容易定位到接口返回成功后的回調(diào)函數(shù),在右側(cè)面板中,可以看到接口返回的數(shù)據(jù);

????????3)找到回調(diào)函數(shù)以后,我們即可著手將回調(diào)函數(shù)中的內(nèi)容修改掉,將返回的數(shù)據(jù)存儲(chǔ)到全局變量中,并在5頁數(shù)據(jù)都收集全了以后,求和并輸出(至于接口傳參,包含page和token,但token具體怎么生成我們不用管,都包含在反混淆后的代碼中了)。
三、驗(yàn)證代碼
????????將修改后的代碼放在瀏覽器控制臺(tái)執(zhí)行,即可得到最終結(jié)果。