爬虫逆向,瑞数6,补环境,国家专利

# 本案例仅供学习和参考,禁止商业用途哈

1,清空cookie

2,打开事件监听中脚本监听

3,刷新页面,就会看到这个代码,这个是解密前的代码,也就是加密代码,我们需要这个拿下来

拿下来放这

点击F8后就会看到这个代码,这个是解密后的代码,这个代码是可以拿到动态变化的cookie值的

拿到放这里

然后把代码框架搭建好,准备补环境,插入补环境的脚本

4,根据报错信息将环境补齐,补环境的时候需要根据这个页面的结构

最后代码是这样的

window = global
top = self = window
window.ActiveXObject = undefined
window.addEventListener = function(){};
window.attachEvent = undefined;
div = {
    getElementsByTagName:function(tag_name){
        console.log("div getElementsByTagName ->",tag_name)
        if(tag_name === "i"){
            return []
        }
    }
}
head = {
    removeChild:function(child){
        console.log("head removeChild ->",child)
    }
}
script = {
    getAttribute:function(attr){
        console.log("script getAttribute ->", attr)
        if (attr === "r"){
            return "m"
        }
    },
    parentElement:head
}
document = {
    createElement:function(tag_name){
        console.log("document createElement ->",tag_name)
        if(tag_name === "div"){
            return  div
        }
        if(tag_name === 'a'){
            return []
        }
    },
    getElementsByTagName:function(tag_name){
        console.log("document getElementsByTagName ->",tag_name)
        if(tag_name === 'script'){
            return [script,script,script,script,script,script]
        }
        if(tag_name === 'base'){
            return []
        }
    },
    getElementById:function(ele_id){
        console.log("document getElementById ->",ele_id)
        if(ele_id === 'a'){
            return []
        }
    }
}
location = {
    "ancestorOrigins": {},
    "href": "http://epub.cnipa.gov.cn/",
    "origin": "http://epub.cnipa.gov.cn",
    "protocol": "http:",
    "host": "epub.cnipa.gov.cn",
    "hostname": "epub.cnipa.gov.cn",
    "port": "",
    "pathname": "/",
    "search": "",
    "hash": ""
}
navigator = {
    userAgent:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36',
    platform:'Win32'
}
setInterval = function(){}
setImmediate = function(){}
'encrypt_js_code'; // 动态变化的,需要被替换
'decrypt_js_run_code'; // 动态变化的,需要进行替换
function get_cookie(){
    return document.cookie;
}
console.log(get_cookie())
import requests
import subprocess
import urllib.parse
from lxml import etree

from functools import partial

subprocess.Popen = partial(subprocess.Popen, encoding='utf-8')
import execjs

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36',
}

# 网站地址最后不能加斜杠, 之后会通过这个地址拼接外链的js地址
url = 'http://epub.cnipa.gov.cn'
session = requests.session()
response = session.get(url, headers=headers, verify=False)
response.encoding = 'utf-8'
html = etree.HTML(response.text)
meta_content = html.xpath('//meta/@content')[-1]
print(meta_content)
encrypt_js_code = html.xpath('//script/text()')[0]
decrypt_js_code_url = url + html.xpath('//script[2]/@src')[0]
decrypt_js_code = session.get(decrypt_js_code_url, headers=headers, verify=False).text

with open('国家专利.js', 'r', encoding='utf-8') as f:
    js_code = f.read()
    js_code = js_code.replace('meta_content', meta_content).replace("'encrypt_js_code'", encrypt_js_code).replace(
        "'decrypt_js_run_code'", decrypt_js_code)

ctx = execjs.compile(js_code)
cookie_t = ctx.call('get_cookie').split(';')[0].split('=')
print(cookie_t)
session.cookies.update({cookie_t[0]: cookie_t[1]})
response = session.get(url, headers=headers, verify=False)
print(response)

瑞数6(RuiShu 6)电网环境 JavaScript逆向解决方案通常是指在逆向工程中,针对其动态生成的 JavaScript 环境进行模拟或还原,以实现自动化解析和数据抓取。这种技术常用于爬虫开发中,以应对反爬虫机制,例如瑞数6所使用的动态混淆与加密机制。 ### JavaScript 逆向分析的核心要点 1. **动态执行环境的模拟**:瑞数6通过动态生成的 JavaScript 代码来验证客户端环境,因此需要模拟浏览器环境,如使用 Puppeteer 或 Playwright 等无头浏览器工具。此类工具可以模拟完整的浏览器行为,从而绕过检测[^1]。 2. **混淆代码的解析**:瑞数6通常使用复杂的 JavaScript 混淆技术(如变量名替换、控制流混淆、字符串加密等)来增加逆向难度。逆向时可以通过工具(如 Babel、AST 分析)解析混淆代码,或者使用动态调试(如 Chrome DevTools)来获取运行时数据[^1]。 3. **Cookie 和 Token 的生成机制**:瑞数6可能会通过 JavaScript 生成特定的 Cookie 或 Token 来验证请求合法性。逆向过程中需要追踪这些值的生成逻辑,并在代码中复现。例如,使用 Hook 技术拦截关键函数调用,记录生成逻辑和参数。 4. **环境指纹的对抗**:瑞数6可能通过检测浏览器指纹(如 Canvas 渲染、WebGL 支持等)来识别自动化工具。为应对这一问题,可以在无头浏览器中注入脚本,修改 navigator、window 等对象的属性,以伪装成真实浏览器环境[^1]。 ### 逆向实现示例 以下是一个使用 Puppeteer 模拟浏览器环境并获取动态生成的 JavaScript 数据的示例代码: ```javascript const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); // 设置用户代理 await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'); // 打开目标页面 await page.goto('https://example.com'); // 注入脚本修改环境指纹 await page.evaluate(() => { delete navigator.__proto__.webdriver; }); // 获取页面数据 const content = await page.content(); console.log(content); await browser.close(); })(); ``` ### 逆向解决方案的步骤 1. **分析目标网站的请求流程**:使用 Chrome DevTools 分析网络请求,找出关键的 JavaScript 接口和 Cookie 生成逻辑。 2. **动态调试 JavaScript 代码**:通过断点调试,追踪关键函数的执行流程,获取加密参数或 Token 的生成逻辑。 3. **模拟浏览器环境**:使用 Puppeteer 或 Playwright 工具模拟浏览器行为,绕过反爬虫检测。 4. **复现加密逻辑**:将关键的加密函数逻辑提取出来,使用 Python 或 Node.js 实现相同的功能,以便在爬虫中直接生成所需的参数。 5. **对抗环境指纹检测**:通过修改浏览器指纹特征,伪装成真实用户的环境,避免被检测为自动化工具。 ### 注意事项 - **法律与合规性**:在进行逆向工程时,必须确保操作符合相关法律法规,避免侵犯目标网站的合法权益。 - **动态更新机制**:瑞数6可能会定期更新其反爬虫机制,因此需要持续监控和调整逆向策略。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值