js经验分享JavaScript反调试技巧

  

在此之前,我一直都在研究JavaScript相关的反调试技巧。但是当我在网上搜索相关资料时,我发现网上并没有多少关于这方面的文章,而且就算有也是非常不完整的那所种。以在这篇文章中,我打算跟大家总结一下关于JavaScript反调试技巧方面的内容。值得一提的是,其中有些方法已经被网络犯罪分子广泛应用到恶意软件之中了。

  

 js经验分享JavaScript反调试技巧

  

对于JavaScript来说,你只需要花一点时间进行调试和分析,你就能够了解到JavaScript代码段的功能逻辑。而我们所要讨论的内容,可以给那些想要分析你的JavaScript代码的人增加一定的难度。不过我们的技术跟代码混淆无关,我们主要针对的是如何给代码主动调试增加困难。

  

本文所要介绍的技术方法大致如下:

  
  

1。检测未知的执行环境(我们的代码只想在浏览器中被执行),

  

2。检测调试工具(例如DevTools);

  

3。代码完整性控制;

  

4。流完整性控制;

  

5。

反模拟;      

简而言之,如果我们检测到了”不正常”的情况,程序的运行流程将会改变,并跳转到伪造的代码块,并“隐藏“真正的功能代码。

  

<强>一、函数重定义

  

这是一种最基本也是最常用的代码反调试技术了。在JavaScript中,我们可以对用于收集信息的函数进行重定义,比如说,console.log()函数可以用来收集函数和变量等信息,并将其显示在控制台中。如果我们重新定义了这个函数,我们就可以修改它的行为,并隐藏特定信息或显示伪造的信息。

  

我们可以直接在DevTools中运行这个函数来了解其功能:

        console.log (“HelloWorld”);   var假=function () {};   窗口(“控制台”)(“日志”)=假;   控制台。日志(“你看不见我!”);      

运行后我们将会看的到:

  
  

VM48:1 Hello World      

你会发现第二条信息并没有显示,因为我们重新定义了这个函数,即“禁”用了它原本的功能。但是我们也可以让它显示伪造的信息。比如说这样:

        console.log (“Normalfunction”);//首先我们保存引用原来的控制台。对数函数   原来var=窗口(“控制台”)(“日志”);//下一个我们创建假的函数//基本上我们检查参数,如果匹配与otherparam我们称之为原始的函数。//如果没有匹配原始函数传递参数   var假=函数(参数){   如果(参数===癒a0labs”) {   原始(“欺骗!”);   其他}{   原始(参数);   }   }//现在我们重新定义控制台。日志作为我们假的函数   窗口(“控制台”)(“日志”)=假;//然后我们称之为控制台。日志与任何争论   控制台。日志(“这是不变的”);//现在我们应该看到其他文本控制台不同“Ka0labs”   console.log (“Ka0labs”);//Aaaand一切还好的   console.log(“再见!”);      

如果一切正常的话:

  
  

正常功能
  VM117:11这是一成不变的
  VM117:9欺骗!
  

VM117:11拜拜!      

实际上,为了控制代码的执行方式,我们还能够以更加聪明的方式来修改函数的功能,比如说,我们可以基于上述代码来构建一个代码段,并重定义eval函数。我们可以把JavaScript代码传递给eval函数,接下来代码将会被计算并执行。如果我们重定义了这个函数,我们就可以运行不同的代码了:

     //正常eval   eval (“console.log (‘1337’)”);//现在我们遣返回国…   原始var=eval;   var假=函数(参数){//如果代码评估contains1337……   如果(argument.indexOf (“1337”) !==1) {//颐侵皇侵葱胁煌拇?   原始(”(i=0;我& lt;10;我+ +){console.log (i);} ");   }   其他{   原始(参数);   }   }   eval=假;   eval(“控制台。日志(“我们看到这个…”)”);//现在我们应该看到一个for循环的执行,而不是期望是什么   eval(“控制台。日志(Too1337 !)”);      

运行结果如下:

  
  

1337
  VM146:1We应该看到这…
  VM147:10
  VM147:11
  VM147:12
  VM147:13
  VM147:14
  VM147:15
  VM147:16
  VM147:17
  VM147:18

js经验分享JavaScript反调试技巧