当前位置:   article > 正文

JS逆向-补环境之同花顺cookie中的v参数_同花顺补环境

同花顺补环境

前言

该文章为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系作者删除~

需求

目标网站:
aHR0cDovL3EuMTBqcWthLmNvbS5jbi8=

正文

对于cookie反爬虫,我们可以使用hook,控制台输入

(function () {
  Object.defineProperty(document, 'cookie', {
    set: function (val) {
      if (val.indexOf('v') != -1) {
        debugger;
      }
      console.log('Hook捕获到cookie设置->', val);
      return val;
    }
  });
})();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述
通过调用堆栈进入到D方法,可以看到n就是我们的v参数
进入rt.update()方法

在这里插入图片描述
转到D()方法上,这个就是v的生成方法

我们把整个JS代码整个复制下来

在这里插入图片描述

JS生成的cookie必须采用document.cookie = 去复制
打印一下cookie的值,在浏览器跑一下是可以跑通的,证明代码没问题

本地跑一下
第一次跑
补 document = {}
在这里插入图片描述

第二次跑
补 window = global
在这里插入图片描述
第三次跑

在这里插入图片描述
此处下断点调试一下
在这里插入图片描述
p +d 是一个head
它是获取这个head,所以我们应该是要补这个得环境,我们在浏览器输出一下看看

在这里插入图片描述
它返回得是一个数组

JS给方法传参,会存储在一个arguments里面
我们也可以用个arguments接收一下,让它自动吐出来
在这里插入图片描述
在这里插入图片描述
我们可以把这个方法重写一下

在这里插入图片描述

第四次跑

在这里插入图片描述
这里同上

在这里插入图片描述
第五次跑
在这里插入图片描述
这里先给它一个空的方法看看
在这里插入图片描述

第六次跑

在这里插入图片描述
断点调试可知 s[201] 是plugins,把环境补上

在这里插入图片描述
第七次跑

在这里插入图片描述
运行没有报错,但是也没有生成对应的值。所以需要找一下有没有用try方法
try特别多,我们可以先从入口文件开始找起

在这里插入图片描述
在这里插入图片描述
找到o方法,打印一下异常,看是否能捕获到

在这里插入图片描述
断点调试可知,是调用了documentElement的addBehavior属性
所以我们补一个空对象就可以了

第八次跑

在这里插入图片描述
报了一个length,这个我们可以上代理,让它自动吐环境


window = new Proxy(window, {
    set(target, property, value, receiver) {
        console.log("设置属性set window", property, typeof value);
        return Reflect.set(...arguments);
    },
    get(target, property, receiver) {
        console.log("获取属性get window", property, typeof target[property]);
        return target[property]
    }
});
document = new Proxy(document, {
    set(target, property, value, receiver) {
        console.log("设置属性set document", property, typeof value);
        return Reflect.set(...arguments);
    },
    get(target, property, receiver) {
        console.log("获取属性get document", property, typeof target[property]);
        return target[property]
    }
});
navigator = new Proxy(navigator, {
    set(target, property, value, receiver) {
        console.log("设置属性set navigator", property, typeof value);
        return Reflect.set(...arguments);
    },
    get(target, property, receiver) {
        console.log("获取属性get navigator", property, typeof target[property]);
        return target[property]
    }
});
location = new Proxy(location, {
    set(target, property, value, receiver) {
        console.log("设置属性set location", property, typeof value);
        return Reflect.set(...arguments);
    },
    get(target, property, receiver) {
        console.log("获取属性get location", property, typeof target[property]);
        return target[property]
    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

补一个navigator userAgent

第九次跑

在这里插入图片描述
这里补一个空的方法就可以了
navigator.javaEnabled = null_funcion

第十次跑

获取属性get location href undefined
TypeError: Cannot read properties of undefined (reading ‘split’)

补 href:‘http://q.10jqka.com.cn/’

第十一次跑

获取属性get location protocol undefined
TypeError: Cannot read properties of undefined (reading ‘split’)

补 protocol:‘http:’

第十二次跑

获取属性get location hostname undefined
获取属性get location host undefined

同上

第十三次跑

获取属性get window XMLHttpRequest undefined
获取属性get window ActiveXObject undefined
设置属性set window CHAMELEON_CALLBACK function
ReferenceError: Element is not defined

补 window.XMLHttpRequest = null_funcion
window.ActiveXObject = null_funcion

第十四次跑

ReferenceError: Element is not defined

定位一下报错的位置
在这里插入图片描述
补一个空对象

Element = {
prototype:{}
}

终于!!!!
终于!!!!
终于!!!!
结果出来了,但又有一个新问题,程序貌似陷入了循环,不结束也不报错
冷静分析一下:
这里应该是用了setInterval()方法,这是一个定时执行的方法
可以全局搜一下

在这里插入图片描述

那么我们可以用这个方法失效,即重新定义方法,让方法置空
setInterval = function(){}

再跑一下,结果出来了~~

在这里插入图片描述
最后附上需要补的环境

document = {
    documentElement:{}
};
window = global;
navigator = {
    plugins : {},
    userAgent:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}
head = {}
div = {}
location = {
    href:'http://q.10jqka.com.cn/',
    protocol:'http:',
    hostname:'q.10jqka.com.cn',
    host:'q.10jqka.com.cn'
}
Element = {
    prototype:{}
}
null_funcion = function () {
    console.log(arguments)
}
getElementsByTagName = function(val){
    if (val === 'head'){
        return [head]
    }
}
createElement = function(val){
    if (val === 'div'){
        return div
    }
}

addEventListener = null_funcion
// 事件监听

window.XMLHttpRequest = null_funcion
window.ActiveXObject = null_funcion

navigator.javaEnabled = null_funcion
document.addEventListener = addEventListener

document.createElement = createElement
document.getElementsByTagName = getElementsByTagName

setInterval = function(){}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

最后

欢迎联系作者交流更多

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

闽ICP备14008679号