简单的概念验证代码如下:
- let div = document.createElement('div');
- let loop = setInterval(() => {
- console.log(div);
- console.clear();
- });
- Object.defineProperty(div,"id", {get: () => {
- clearInterval(loop);
- alert("Dev Tools detected!");
- }});
当我们测验测验对代码进行反混淆处理时,我们起首会测验测验重定名某些函数或变量,然则在JavaScript中我们可以检测函数名是否被修悛改,或者说我们可以直接经由过程客栈跟踪来获取其原始名称或调用次序。
1. 检测未知的履行情况(我们的代码只想在浏览器中被履行);
- function getCallStack() {
- var stack = "#", total = 0, fn =arguments.callee;
- while ( (fn = fn.caller) ) {
- stack = stack + "" +fn.name;
- total++
- }
- return stack
- }
- function test1() {
- console.log(getCallStack());
- }
- function test2() {
- test1();
- }
- function test3() {
- test2();
- }
- function test4() {
- test3();
- }
- test4();
留意:源代码的混淆程度越强,这个技巧的效不雅就越好。
六、代劳对象
代劳对象是今朝JavaScript中最有效的一个对象,这种对象可以赞助我们懂得代码中的其他对象,包含修改其行动以及触发特定情况下的对象晃荡。比如说,我们可以创建一个嗲哩对象并跟踪每一次document.createElemen调用,然跋文录下相干信息:
- const handler = { // Our hook to keep the track
- apply: function (target, thisArg, args){
- console.log("Intercepted a call tocreateElement with args: " + args);
- return target.apply(thisArg, args)
推荐阅读
沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 有那么一群人他们生活在那山的那边海的那边,他们活泼又聪慧~他们油滑又聪颖~他们自由安闲的生活在那彩色的代率攀里~>>>详细阅读
本文标题:带你了解JavaScript反调试技巧
地址:http://www.17bianji.com/lsqh/40591.html
1/2 1