?宣告:本文只作學習研究,禁止用于非法用途,否則后果自負,如有侵權,請告知洗掉,謝謝!
前言:我解釋一下hook是什么玩意
hook的原意是鉤子,
我理解替換或者攔截原有方法去修改和處理,
1.怎么去替換原來的方法
這里我自己寫一個方法去替換,實體
function myfunction(x,y){
if(x>y){
return "是原來的方法";
}else{
return "方法引數被修改了";
}
myfunction(2,1)//原來方法的執行結果
"是原來的方法"
var xxx=myfunction //這里開始替換原來的方法,吧myfunction輔助給xxx
myfunction=function (x,y)//這里再修改原來的myfunction這方法,一樣的給他傳兩個值,在后面的函式里面去修改這兩個值
{
var x=5,y=6;//這個位置就是把xy值改了,覆寫原來的方法的值
return xxx (x,y) //這個再把修改過后的值傳給原來的myfunction方法,
}
myfunction(1,2) //這里是hook過后的方法執行結果,和原來執行傳的值一樣,但是回傳值卻變了
"方法引數被修改了"
上面講這一種就是hook替換原來的方法去改變它的執行結果,傳值一樣但是獲取的結果不一樣,
還有兩個方法其實我個人感覺都差不多的,這兩種都是攔截
1.Object.defineProperty
2.Porxy
使用方法比較簡單,太多人說這兩個方法了我就不說了,這里我重點講的一個,剛剛說了一種替換,這里我再講一個實體,還是自己寫的代碼
這里講這么去hook內置的函式,eval,這個函式是現在很多混淆的都愛用的,把這個hook對我們分析代碼幫助很大,
eval("function ccc(){return 22;};ccc()")
//我這里比較簡單,傳的都是明文,要是在混淆里面傳的肯定都是混淆的變數
首先我們要在代碼執行之前在瀏覽器控制臺打上我們的hook代碼
var sss=eval; //把eval賦值給sss,sss是自己建的全域變數
eval=function (x){//一樣的處理方法,重寫這個方法
debugger; //這里發現呼叫就讓他斷下來
console.log(x)//這里把值列印出來
return sss(x)//回傳原來的eval方法
}
下面我截圖跑一遍你們看看效果



其他方法也是一樣,其他自己腦補吧,歡迎關注我的公眾號哦,謝謝觀看,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286892.html
標籤:其他
上一篇:在中國程式員作業是青春飯嗎?
