作用域和自執行函數
一、變量作用域
1.1局部變量
function jb() { var a="我是局部變量" return a; }
1.2全局變量
var a="我是全局變量" function jb() { console.log(a) } console.log(a)
二、自執行函數
在加載的時候 這個自執行函數就能自己運行
!(function() { console.log(2) } )()
!表示運行成功
2.1拆解只執行函數的過程
對于這樣一個函數 直接運行:
function() { console.log(2) }
除非前面有個var 否則會報錯
var a =function() { console.log(2) }
用括號括起來 也不會報錯,因為括起來之后就是一個整體,你可以將它理解為一個沒有方法名稱的方法、也就是閉包。
在括號后面再加一個括號就表示執行這個函數
(function() { console.log(2) } )()
再js逆向中,通過這種方式 可以將一個函數的執行傳給另一個函數執行 從而實現逆向。
三、內部函數如何外部調用
!(function() { function jm() { console.log(2) } jm() } )()
可以看到內部函數也可以被掉喲個
如果將內部函數放到外部調用:
!(function() { function jm() { console.log(2) } } )() jm()
就會報錯
要解決這個問題 可以在外部定義一個變量,然后將內部的jm賦值給這個變量
var jm_; !(function() { function jm() { console.log(2) } jm_ = jm; } )() jm_()
這里就非常方便我們進行js逆向
因為一個網站的加密就1個或者幾個函數,
大概流程是這樣
用戶輸入明文的數據 -> 方法1 -》 發包函數 。。。 -》 加密函數
我們只需要將加密函數拿出來,用python或者易語言去模擬發包,執行這個js的加密函數,
這個加密函數可能嵌套再里面 這個時候 就可以用全局變量的方式 將它拿到外面。
四、變量類型的轉換
所有類型的變量 加上字符串 就會變成字符串
所有類型的變量 加上字符串 就會變成字符串
比如一個方法 加上字符串,就會變成字符串
var jm_; !(function() { function jm() { console.log(2) } jm_ = jm; } )() jm_+""

浙公網安備 33010602011771號