js逆向之另类思路扣代码
海绵 日常学python
经常js分析的人来说有些网站检测浏览器指纹是很常见的事,但是我们一点一点分析是很费时间,费脑筋的。
我们扣代码的结果是我们要调用他的加密或解密或某个值的算法,当我们把他的算法扣下来执行,正常情况下是没问题的,但是如果他计算了浏览器指纹,那基本上你除了完整的分析别无他法,今天我们来讲一个hook劫持。当然我只讲原理,具体你们自己研究琢磨。
首先介绍一下这个es6的特性:Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。
简单来说就是我们可以完全代理某个对象,基于这个对象的所有操作都会被拦截下来,但是他的内部对象操作拦不下来,比如:
a={b:function(){return "123"}}a = new Proxy(a, { get: function(target, key, receiver) { console.log(target, key, receiver); return target[key]; }, set: function(target, key, value, receiver) { console.log(target, key, value, receiver); target[key] = value; }});
当我们调用a.b 就用过代理拦截下来,但是
当我们:a.b.c我们发现.c并没有拦截到,那是因为.c是属于b对象,并不能嵌套拦截,如果有需要我们可以嵌套:比如
a={b:{c:function(){return "123"}}}a = new Proxy(a, { get: function(target, key, receiver) { console.log(target, key, receiver); if(target[key] instanceof Object){ return new Proxy(target[key],{ get:function(a,b,c){ return a[b]; },set:function(a,b,c,d){ a[b] = c; } }) } return target[key]; }, set: function(target, key, value, receiver) { console.log(target, key, value, receiver); target[key] = value; }});
这样的话就可以嵌套,看到这里你们是不是明白了,
假如他有一段代码我们抠出来要看他是不是有指纹计算,我们可以这样写
window = {};window = new Proxy(window, { get: function(target, key, receiver) { console.log(target, key, receiver); return target[key]; }, set: function(target, key, value, receiver) { console.log(target, key, value, receiver); target[key] = value; }});navigator= {};navigator= new Proxy(navigator, { get: function(target, key, receiver) { console.log(target, key, receiver); return target[key]; }, set: function(target, key, value, receiver) { console.log(target, key, value, receiver); target[key] = value; }});
赞 (0)