JavaScript如何实现函数重定义
JavaScript如何实现函数重定义
这篇文章主要介绍JavaScript如何实现函数重定义,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
函数重定义
这是一种最基本也是最常用的代码反调试技术了。在JavaScript中,我们可以对用于收集信息的函数进行重定义。比如说,console.log()函数可以用来收集函数和变量等信息,并将其显示在控制台中。如果我们重新定义了这个函数,我们就可以修改它的行为,并隐藏特定信息或显示伪造的信息。
我们可以直接在DevTools中运行这个函数来了解其功能:
console.log("HelloWorld");varfake=function(){};window['console']['log']=fake;console.log("Youcan'tseeme!");
运行后我们将会看到:
VM48:1HelloWorld
你会发现第二条信息并没有显示,因为我们重新定义了这个函数,即“禁用”了它原本的功能。但是我们也可以让它显示伪造的信息。比如说这样:
console.log("Normalfunction");//Firstwesaveareferencetotheoriginalconsole.logfunctionvaroriginal=window['console']['log'];//Nextwecreateourfakefunction//Basiclywechecktheargumentandifmatchwecalloriginalfunctionwithotherparam.//Ifthereisnomatchpasstheargumenttotheoriginalfunctionvarfake=function(argument){if(argument==="Ka0labs"){original("Spoofed!");}else{original(argument);}}//Weredefinenowconsole.logasourfakefunctionwindow['console']['log']=fake;//Thenwecallconsole.logwithanyargumentconsole.log("Thisisunaltered");//Nowweshouldseeothertextinconsoledifferentto"Ka0labs"console.log("Ka0labs");//AaaandeverythingstillOKconsole.log("Byebye!");
如果一切正常的话:
NormalfunctionVM117:11ThisisunalteredVM117:9Spoofed!VM117:11Byebye!
实际上,为了控制代码的执行方式,我们还能够以更加聪明的方式来修改函数的功能。比如说,我们可以基于上述代码来构建一个代码段,并重定义eval函数。我们可以把JavaScript代码传递给eval函数,接下来代码将会被计算并执行。如果我们重定义了这个函数,我们就可以运行不同的代码了:
//Just a normal evaleval("console.log('1337')");//Now we repat the process...var original = eval;var fake = function(argument) { // If the code to be evaluated contains1337... if (argument.indexOf("1337") !==-1) { // ... we just execute a different code original("for (i = 0; i < 10;i++) { console.log(i);}"); } else { original(argument); }}eval= fake;eval("console.log('Weshould see this...')");//Now we should see the execution of a for loop instead of what is expectedeval("console.log('Too1337 for you!')");
运行结果如下:
1337VM146:1Weshouldseethis…VM147:10VM147:11VM147:12VM147:13VM147:14VM147:15VM147:16VM147:17VM147:18VM147:19
正如之前所说的那样,虽然这种方法非常巧妙,但这也是一种非常基础和常见的方法,所以比较容易被检测到。
以上是“JavaScript如何实现函数重定义”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
JavaScript闭包用多会造成内存泄露吗
-
javascript中文乱码如何解决
-
PHP学习第十五天——JavaScript入门DOM对象:二
-
Node.js基本内容和知识点
简单的说node.js就是运行在服务端的JavaScript,起初段定位是后端开发语言,由于技术的不够成熟,一般小型项目...
-
PHP与Node.js:一个史诗般开发者的分享
-
JavaScript 中 find() 和 filter() 方法的区别
JavaScript在ES6上有很多数组方法,每种方法都有独特的用途和好处。在开发应用程序时,大多使用数组方法来获...
-
js怎么跟php结合使用
-
简单说说Node.js和JavaScript
Node.js是一个开源和跨平台的JavaScript运行时环境,在浏览器之外运行V8JavaScript引擎(...
-
前端开发工程师专业技能简历范文
-
JavaScript怎么实现淘宝网图片的局部放大功能