连长 's Blog
就平写一些文章,没有任何装逼的成分。
Toggle navigation
连长 's Blog
主页
红蓝对抗
渗透测试
代码审计
漏洞复现
工具类型
其他类型
关于博主
友情链接
归档
标签
selenium 反爬虫消除特征方法记录
无
2021-02-08 18:47:20
1294
0
0
funk
# selenium 反爬虫消代码除特征方法记录 ## 0x00 说明 启动特征很多,我们在上一篇文章已经介绍过。 如何消除selenium启动特征呢?这个也是因站而异,如果规避常规的检测,做到以下2点就可以。 1 是消除window.navigator.webdriver的值; 2 是修改chromedriver.exe的源码,改掉$cdc_xxx的值(用同等数量字符替换即可)。 # 通过这段 JS 脚本区分是爬虫还是人工操作 代码`window.navigator.webdriver` 实际上,我们使用默认的方式初始化 WebDriver 打开一个网站,下面这段 JS 代码永远为 true,而手动打开目标网站的话,则为:undefined ## 0x01 配置文件消除 Chrome79 之前可以通过配置 ChromeOptions 驱动参数,来达到反反爬的目的。 只需要将参数打开,设置 excludeSwitches 值为 enable-automation 即可。 再加上其他几个参数足以绕过。 # -*- coding: utf-8 -*- from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) # option.add_argument("--proxy-server=http://127.0.0.1:8080") option.add_argument("--disable-blink-features") option.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(executable_path=r'D:\chromedriver.exe', options=option) driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) driver.implicitly_wait(10) driver.get('https://www.cnvd.org.cn/flaw/typeResult?typeId=31&max=100&offset=0')  ## 0x02 代理方式干扰 其实起核心原理就是找到检测那段js代码,做替换或者是劫持,给他通过网络的方式劫持成合法的js, def response(flow): if '/js/yoda.' in flow.request.url: for webdriver_key in ['webdriver', '__driver_evaluate', '__webdriver_evaluate', '__selenium_evaluate', '__fxdriver_evaluate', '__driver_unwrapped', '__webdriver_unwrapped', '__selenium_unwrapped', '__fxdriver_unwrapped', '_Selenium_IDE_Recorder', '_selenium', 'calledSelenium', '_WEBDRIVER_ELEM_CACHE', 'ChromeDriverw', 'driver-evaluate', 'webdriver-evaluate', 'selenium-evaluate', 'webdriverCommand', 'webdriver-evaluate-response', '__webdriverFunc', '__webdriver_script_fn', '__$webdriverAsyncExecutor', '__lastWatirAlert', '__lastWatirConfirm', '__lastWatirPrompt', '$chrome_asyncScriptInfo', '$cdc_asdjflasutopfhvcZLmcfl_' ]: ctx.log.info('Remove "{}" from {}.'.format( webdriver_key, flow.request.url )) flow.response.text = flow.response.text.replace('"{}"'.format(webdriver_key), '"NO-SUCH-ATTR"') flow.response.text = flow.response.text.replace('t.webdriver', 'false') flow.response.text = flow.response.text.replace('ChromeDriver', '') 用mitproxy 实现,还可以用burp来操作,这里不演示 启动命令 `mitmdump -s DriverPass.py -p 8001` 代码中加入 option.add_argument("--proxy-server=http://127.0.0.1:8080") ## 0x03 重新编译driver 重新编译,东西不外发。 ## 0x04 结尾 其实无头浏览器真正的瓶颈就是启动速度太慢,远远达不到普通发包工具的速度,所以建议使用集群的方式加快速度。可以参照我的搭建集群的文章。
上一篇:
家庭Web流量分析小小操作
下一篇:
Burp Pro2020最新汉化工具
0
赞
1294 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册