简介
!function (allModule) {
function useModule(whichModule) {
allModule[whichModule].call(null, "hello world!");
}
useModule(0)
}([
function module0(param) {console.log("module0: " + param)},
function module1(param) {console.log("module1: " + param)},
function module2(param) {console.log("module2: " + param)},
]);
运行以上代码,会输出 module0: hello world!,相信通过浅显易懂的变量名和函数名,应该就可以看懂大致含义了,调用 useModule(0),从所有函数里选择第一个,将 hello world! 传递给 module0 并输出。
仔细观察以上代码,我们会发现主要用到了 !function(){}() 和 function.call() 语法
Function.prototype.call() / apply() / bind()
Function.prototype.call()、Function.prototype.apply()、Function.prototype.bind() 都是比较常用的方法。它们的作用一模一样,即改变函数中的 this 指向,它们的区别如下:
call()方法会立即执行这个函数,接受一个多个参数,参数之间用逗号隔开;apply()方法会立即执行这个函数,接受一个包含多个参数的数组;bind()方法不会立即执行这个函数,返回的是一个修改过后的函数,便于稍后调用,接受的参数和call()一样。
解密方式
先找到加密位置,根据加密位置定位加载器,它一般是一个自执行函数
把加载器部分代码复制下来
可以打印加载器所需的函数

将目标函数放进来后我们就开始补其他函数
posted on
浙公网安备 33010602011771号