瑞數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開始的好呀。
其實補環境總結起來就是樹狀補充,我們用常見的dom
的createElement
函式來說:
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瑞數字尾問題