瑞數6補環境的總結

package_main發表於2024-08-17

瑞數6補環境的總結

大家好呀,我是你們的好兄弟【星雲牛馬】,今天給大家帶來的是瑞數6的補環境的總結,補環境肯定是需要一些基礎補環境知識的,所以建議沒有基礎的小夥伴可以加入學習群進行學習,有基礎的夥伴加入交流起來。

QQ群:714283180


1.過debugger

要知道,debugger的形式還是很多的,不能一味照抄程式碼,要隨機應變,

1.1透過hook Function.prototype.constructor判斷是否有debugger字樣返回空方法即可

let origin = Function.prototype.constructor
Function.prototype.constructor = function(p){
    if (p.indexOf('debugger')!==-1){
        return function(){}
    }else{
        return orgin.apply(this,arguments)
    }
}

1.2透過hook ``eval也是一樣,判斷是否有debugger字樣返回""`即可,具體要仔細分析,謹慎處理,防止誤傷有用程式碼。

let oreval = eval
eval = function(code){
    if (code.indexOf('debugger')!==-1){
        return ""
    }
    return oreval.apply(this,arguments)
}

2.補環境

對於新手而言,網上補環境的原始碼還是很多的,白嫖一份基礎的補環境的原始碼來,在基礎上自己進行加工創造,總比從0開始的好呀。

其實補環境總結起來就是樹狀補充,我們用常見的domcreateElement函式來說:

    createElement:function(arg){
        console.log('createElement 函式被呼叫了,引數列表:',arguments)
        if(arg === "a"){
        	let my_a = {}
			return my_Proxy(my_a,"my_a")
        }
        if(arg === 'div'){
            return my_Proxy({},"my_a")
        }
        if(arg === "form"){
            return {}
        }
    },

你得實現鏈式的代理,補充上去的物件都是有可能繼續進行更深層級的屬性的檢測的,比如上面的補充了元素的建立,那麼建立後返回的my_a物件有可能繼續被檢測,所以需要給my_a也掛上代理看看是否有進一步的檢測。

透過這種策略是吧,不斷不斷的補充,只要你不嫌麻煩,每一個都掛上代理,你就會發現,你補充的環境比誰都多,但有可能還不一定好用,哈哈,真實的例子,因為你補充的很多,層級很深,執行到的檢測的程式碼更多,需要保證都有正確性,不然就會發現補得多但不一定有效。

瑞數這邊的補環境總結我建議看這位躍遷前輩的文章: https://blog.cthousand.cn/2023/09/17/%E5%8D%8A%E8%87%AA%E5%8A%A8%E8%A1%A5%E7%91%9E%E6%95%B04%E7%8E%AF%E5%A2%83%E5%85%A8%E6%B5%81%E7%A8%8B/

他的總結很到位了,基本上你都補了的話,是屬於相對比較全的能過瑞數的環境了。

2.1瑞數字尾問題

相關文章