当前位置:   article > 正文

JS安全防护算法与逆向分析——JS Hook

JS安全防护算法与逆向分析——JS Hook

《反爬虫AST原理与还原混淆实战》书稿内容

JS Hook

声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。


一、JS Hook原理与作用

JS Hook原理非常简单,现在将一个最简单的例子,比如有这样一个函数

  1. function test(a,b){
  2. return a+b;
  3. }

我们可以直接在console里边修改这个函数,比如如下这样:

  1. var _test=test;
  2. test=function(a,b){
  3. console.log(a,b);
  4. var result=_test(a,b);
  5. console.log(result);
  6. }

我们在console里边调用test(1,2),会发现函数输出已经被我们修改了。这里的修改和APP的frida修改几乎一样。我们可以用它来做什么呢?最常见的是修改一些系统函数,比如debugger、Function、eval、JSON.stringfy等等反调试相关的。

二、JS Hook检测与过检测

有的网站会在Hook这里做个检测,比如读者可以在console里边输出test+"",你会发现我们修改后的函数已经和以前的不一样的,因而可以在网页源代码里做个判断函数字符串是否相等的检测来防止你Hook,如下所示。

  1. setInterval(function(){
  2. test+""=="function test(a,b){return a+b;}"
  3. ?console.log("未修改")
  4. :setInterval(function(){eval("debugger")},
  5. 1000);

我们要想过这种检测,可以Hook一下toString方法,笔者在这里直接返回正确的。实际开发中,读者可以添加不同的if条件定位到需要的函数再来做修改。

  1. Function.prototype.toString=function(){
  2. return "function test(a,b){return a+b;}"
  3. }

Hook setInterval也可以做到

  1. var _setInterval=setInterval;
  2. setInterval=function(a,b){
  3. if(a.toString().indexOf("debugger") != -1){
  4. return null;
  5. }
  6. _setInterval(a,b);
  7. }

三、JS Hook对象属性

Object.defineProperty()定义新的属性或者修改属性。

  1. <script>
  2. var obj={};
  3. console.log("过渡代码");
  4. function test(){
  5. obj.name="losenine";
  6. }
  7. </script>

 对这段代码进行Hook,我们在定义name之前让它停下来。然后进行Hook,代码如下:

  1. Object.defineProperty(obj,"name",
  2. {set:function(x)
  3. {debugger;return x;}
  4. }
  5. )

Hook cookies的话,必须在加载之前进行Hook。除了使用Chrome拓展,我们可以自己查找。比如查找pwd的cookie:

  1. Object.defineProperty(document,"cookie",
  2. {set:function(x){
  3. if(x.indexOf("pwd")!=-1){
  4. if(x.indexOf("pwd=null;")==-1){
  5. console.log(x);
  6. }
  7. }
  8. retrun x;
  9. }
  10. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/945470
推荐阅读
相关标签
  

闽ICP备14008679号