首頁  >  文章  >  web前端  >  javascript的函數可以hook嗎

javascript的函數可以hook嗎

WBOY
WBOY原創
2022-06-29 16:57:381279瀏覽

javascript的函數可以hook;hook是一種動態修改函數執行流程或傳回結果的方法,JavaScript作為一種動態語言也可以進行hook操作,hook通常用來針對某些參數或變數進行偵聽、列印輸出、取代等操作。

javascript的函數可以hook嗎

本教學操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。

javascript的函數可以hook嗎

可以。

Hook是一種動態修改函數執行流程或傳回結果的方法,在實際應用中非常廣泛。 Javascript作為一種動態語言,也可以進行Hook作業。隨著Javascript語言的發展,Hook的方法也越來越多,

hook直譯的意思為鉤子,在逆向領域通常用來針對某些參數,變量進行偵聽,打印輸出,替換等操作。

範例如下:

範例程式碼

function add(a,b){
return a + b
}

hook程式碼

這是一個很簡單加法函數,透過Hook能獲取到這兩個參數的值,相當於在return之前加入了一句程式碼console.log(a,b),這樣便能輸出這兩個的值便於分析。那麼可以使用如下的方式來複寫改函數,而這個方式在javascript也就是裝飾者模式

let _add = add
add = function () {
  console.log('arguments', arguments)
  let result = _add.apply(this, arguments)
  console.log('result', result)
  return result // 如果不需要result 则可直接return _add()
}

完整程式碼

function add(a, b) {
  return a + b
}
 
let _add = add
add = function () {
  console.log('arguments', arguments)
  let result = _add.apply(this, arguments)
  console.log('result', result)
  return result 
}
 
add(1, 2)

再次呼叫add(1,2)便會輸出arguments參數以及結果3,一個很簡單HOOK就實現了。

不過這個例子可能過於簡單,我所要表達的意思是,透過Hook,定位到我們想Hook的函數與變量,透過一系列操作(函數複寫,元程式設計),只要觸發該函數或使用(取值,修改)該變量,便能將我們想要的結果(前後的結果(如加密前,加密後))取得到。這才是我們的目的。

書中給的例子想說明的,想為某個原函數(比如這裡的add)添加一些功能,但該原函數可能是由其他開發者所編寫的,那麼直接修改原函數本身將可能導致未知BUG,於是便可以用上面的方式進行複寫原函數的同時,還不破壞原函數。

【相關推薦:javascript影片教學web前端

以上是javascript的函數可以hook嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn