js補(bǔ)環(huán)境 js逆向 系列
JS逆向:Hook 技術(shù)原理以及在 JS 逆向中的相關(guān)應(yīng)用
Hook 技術(shù)原理
逆向找課私Hook 是一種鉤子技術(shù),在系統(tǒng)沒有調(diào)用函數(shù)之前,鉤子程序就先得到控制權(quán),這時(shí)鉤子函數(shù)既可以加工處理(改變)該函數(shù)的執(zhí)行行為,也可以強(qiáng)制結(jié)束消息的傳遞。
簡單來說,修改原有的 JS 代碼就是 Hook。
Hook 技術(shù)之所以能夠?qū)崿F(xiàn)有兩個(gè)條件:
客戶端擁有 JS 的最高解釋權(quán),可以決定在任何時(shí)候注入 JS,而服務(wù)器無法阻止或干預(yù)。服務(wù)端只能通過檢測和混淆的手段,另 Hook 難度加大,但是無法直接阻止。
除了上面的必要條件之外,還有一個(gè)條件。就是 JS 是一種弱類型語言,同一個(gè)變量可以多次定義、根據(jù)需要進(jìn)行不同的賦值,而這種情況如果在其他強(qiáng)類型語言中則可能會(huì)報(bào)錯(cuò),導(dǎo)致代碼無法執(zhí)行。js 的這種特性,為我們 Hook 代碼提供了便利。
JS 作用域問題 1:自執(zhí)行函數(shù)的 Hook 問題
JS 變量是有作用域的,只有當(dāng)被 hook 函數(shù)和 debugger 斷點(diǎn)在同一個(gè)作用域的時(shí)候,才能 hook 成功。
對(duì)于下面的自執(zhí)行函數(shù),在執(zhí)行完之后我們實(shí)際上是無法 hook test 函數(shù)的。因?yàn)?test 是在自執(zhí)行函數(shù)的作用域,而不是在全局作用域。而此時(shí),自執(zhí)行函數(shù)已經(jīng)執(zhí)行完了,test 函數(shù)已經(jīng)被內(nèi)存清空無法 hook。
標(biāo)簽: