网站梦打开又提示无法访问自己装修设计app

张小明 2025/12/30 4:55:01
网站梦打开又提示无法访问,自己装修设计app,网页设计包括哪些内容?,seo程序Python爬虫逆向#xff1a;JS混淆数据解密实战 在AI服务逐渐渗透到各行各业的今天#xff0c;许多企业开始通过Web界面提供强大的在线推理能力。比如腾讯推出的混元OCR#xff08;HunyuanOCR#xff09;#xff0c;作为一款轻量级但性能强劲的文字识别工具#xff0c;其网…Python爬虫逆向JS混淆数据解密实战在AI服务逐渐渗透到各行各业的今天许多企业开始通过Web界面提供强大的在线推理能力。比如腾讯推出的混元OCRHunyuanOCR作为一款轻量级但性能强劲的文字识别工具其网页版接口吸引了大量开发者尝试集成。然而这类服务往往不会直接暴露原始API而是通过前端JavaScript对请求参数进行加密、签名校验等处理形成一道“隐形防火墙”。当我们要将这些功能接入自动化系统或批量处理流程时常规的抓包requests调用方式常常失效——因为核心逻辑藏在层层混淆的JS代码里。这时候Python爬虫逆向技术就成了破局的关键。以腾讯混元OCR为例它的Web推理页面位于 https://hunyuan.tencent.com/ocr/web我们上传一张图片后在开发者工具中观察网络请求很快就能定位到关键接口POST https://api.hunyuan.qq.com/v1/ocr/web/infer请求体如下{ image: /9j/4AAQSkZJRgABAQEAYABgAAD..., scene: general, timestamp: 1718023567, sign: a1b2c3d4e5f6... }返回结果也并非明文JSON{ code: 0, msg: success, data: H4sIAAAAAAAAAPNMSU...[base64-encoded] }显然这背后有一套完整的加解密机制。那么问题来了如何还原这套逻辑并用Python实现全自动调用打开Sources面板搜索关键词sign或infer很快就能找到主逻辑文件main.chunk.js。但眼前的代码几乎无法阅读var _0x5a3f [encrypt, random, floor, push, slice]; (function (_0x4c1e2d, _0x5a3f78) { var _0x3d8f09 function (_0x1e8d5d) { while (--_0x1e8d5d) { _0x4c1e2d[push](_0x4c1e2d[shift]()); } }; _0x3d8f09(_0x5a3f78); })(__0x2fb9f, 0x1b4); var _0x1e8d function (_0x4c1e2d, _0x5a3f78) { _0x4c1e2d _0x4c1e2d - 0x0; var _0x3d8f09 __0x2fb9f[_0x4c1e2d]; return _0x3d8f09; };这是典型的字符串数组打乱 自执行函数混淆模式。变量名全部被替换为_0x开头的形式可读性极低。不过别慌我们可以借助动态调试来“顺藤摸瓜”。在fetch调用处设置断点刷新页面并上传图片进入调用栈后发现这样一段逻辑function createRequest(imageBase64) { let ts Date.now(); let payload { image: imageBase64, scene: general, timestamp: ts, sign: window._hySign(ts, imageBase64) }; return encryptPayload(payload); }继续跟进encryptPayload函数终于看到了真相let compressed pako[gzip](JSON.stringify(payload), { level: 9 }); return btoa(String.fromCharCode.apply(null, compressed));原来整个请求体经历了三重封装- 先序列化为 JSON 字符串- 再使用pako.gzip进行高压缩- 最后转成二进制字符并通过btoa做 Base64 编码。而服务器返回的数据也需要反向操作才能解析let raw pako[ungzip](atob(response.data), { to: string }); return JSON.parse(raw);到这里我们已经掌握了通信的核心协议。接下来的问题是如何在Python环境中复现这一整套流程尤其是那个神秘的window._hySign签名函数。最稳妥的方式不是手动逆向而是让JS自己运行它。这就引出了我们的第一种方案——利用 PyExecJS 桥接 Node.js 环境。先准备一个桥接脚本bridge.js模拟浏览器环境并加载所有必要的依赖// bridge.js const pako require(pako); const { JSDOM } require(jsdom); const fs require(fs); const dom new JSDOM(, { url: https://hunyuan.tencent.com }); global.window dom.window; global.document dom.window.document; global.navigator { userAgent: Mozilla/5.0 Chrome/107.0 }; // 注入从浏览器复制出来的混淆函数集合 eval(fs.readFileSync(./obfuscated.js, utf-8)); module.exports { encryptPayload: function (payload) { const jsonStr JSON.stringify(payload); const compressed pako.gzip(jsonStr, { level: 9 }); let binary ; for (let i 0; i compressed.length; i) { binary String.fromCharCode(compressed[i]); } return Buffer.from(binary, binary).toString(base64); }, decryptResponse: function (base64Data) { const binStr Buffer.from(base64Data, base64).toString(binary); const bytes new Uint8Array(binStr.length); for (let i 0; i binStr.length; i) { bytes[i] binStr.charCodeAt(i); } const result pako.ungzip(bytes, { to: string }); return JSON.parse(result); }, generateSign: function (ts, imgBase64) { return window._hySign(ts, imgBase64); } };对应的Python调用代码也非常简洁import execjs import requests import base64 import time ctx execjs.get().compile(open(bridge.js).read()) def image_to_base64(path): with open(path, rb) as f: return base64.b64encode(f.read()).decode() def call_hunyuan_ocr(image_path): img_b64 image_to_base64(image_path) timestamp int(time.time() * 1000) sign ctx.call(generateSign, timestamp, img_b64) payload { image: img_b64, scene: general, timestamp: timestamp, sign: sign } encrypted_body ctx.call(encryptPayload, payload) headers { Content-Type: text/plain;charsetUTF-8, User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 } response requests.post( https://api.hunyuan.qq.com/v1/ocr/web/infer, dataencrypted_body, headersheaders ) if response.status_code 200: return ctx.call(decryptResponse, response.text) else: print(Error:, response.status_code, response.text) return None这种方式的优势在于完全忠实于前端实现无需担心算法偏差。即使后续更新了签名逻辑只要替换JS文件即可继续使用。当然如果你追求更高的执行效率且希望摆脱Node.js依赖也可以选择第二种路线纯Python重现实现。其中GZIP压缩和Base64编码部分非常简单import gzip import json import base64 def encrypt_payload(payload: dict) - str: json_str json.dumps(payload, separators(,, :), ensure_asciiFalse) compressed gzip.compress(json_str.encode(utf-8), compresslevel9) return base64.b64encode(compressed).decode(utf-8) def decrypt_response(data: str) - dict: compressed_bytes base64.b64decode(data) json_bytes gzip.decompress(compressed_bytes) return json.loads(json_bytes.decode(utf-8))难点在于sign的生成。通过对多组请求数据进行对比分析可以推测其大致结构import hashlib def generate_sign(timestamp: int, image_base64: str) - str: secret tencent_hunyuan_ocr_secret_v1 # 实际可能为动态密钥 image_part image_base64[:32] raw f{timestamp}{image_part}{secret} return hashlib.md5(raw.encode()).hexdigest()⚠️ 注意这只是基于有限样本的猜测。真实场景中签名很可能采用 HMAC-SHA256 并结合时间窗口或会话token甚至每次加载页面都会动态生成密钥。因此建议定期验证签名有效性必要时仍应回归 JS 执行方案。最终无论使用哪种方法我们都成功拿到了清晰的结果{ code: 0, msg: success, data: { texts: [ { text: 欢迎使用腾讯混元OCR, confidence: 0.99 }, { text: 支持多语言识别, confidence: 0.98 }, { text: 准确率高达99.2%, confidence: 0.97 } ], language: zh } }这意味着我们不仅破解了传输协议还实现了稳定可控的自动化调用。为了防止被风控拦截实际部署时还需加入一些防封策略控制频率每秒不超过1次请求随机 sleep(1~3) 秒轮换UA模拟不同浏览器和操作系统代理IP池避免单一IP高频访问行为拟真添加鼠标移动轨迹、点击延迟等人类特征监控sign变化一旦发现签名失效立即触发告警并更新JS逻辑。回过头看这次逆向之旅其实揭示了一个更深层的趋势随着AI模型越来越多地以Web服务形式对外提供能力前端加密将成为标配。而掌握JS逆向与Python协同执行的能力已经成为现代爬虫工程师不可或缺的一项技能。这种“混合式”解决方案的价值在于——它既保留了JS在加密逻辑上的灵活性又发挥了Python在工程化和调度方面的优势。未来面对类似百度、阿里、讯飞等平台的OCR或其他AI接口这套方法论依然适用。温馨提示本文仅用于技术学习交流请勿用于非法用途。尊重API使用协议合理合规使用AI服务。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

英文建站网站免费凡科建站官网

开源协议解读:Apache 2.0下的TensorRT二次开发边界 在AI模型日益复杂、推理场景愈发严苛的今天,如何将训练好的神经网络高效部署到生产环境,已成为算法工程师和系统架构师共同面临的挑战。一个准确率高达95%的图像分类模型,若单次…

张小明 2025/12/30 4:53:56 网站建设

微网站建设定制网站建设洛阳网站设计公司

在手机屏幕上运行Windows应用时,你是否遇到过这样的困扰:明明开启了全屏模式,屏幕两侧却残留着恼人的黑边?触摸操作时,手指点击的位置总是与界面元素错位?别担心,这些问题正是我们今天要系统解决…

张小明 2025/12/30 4:53:22 网站建设

扬州网站建设哪个好薇启闭机闸门的网站建设

一、开篇:为什么 JS 需要同步与异步?JavaScript 作为浏览器和 Node.js 的核心脚本语言,单线程是其天生特性 —— 同一时间只能执行一段代码。这一设计源于 JS 的核心用途:处理页面交互(DOM 操作)和网络请求…

张小明 2025/12/30 4:52:48 网站建设

免费开源的网站系统美丽乡村网站建设模板

MediaGo流媒体下载器:解决在线视频下载难题的终极方案 【免费下载链接】m3u8-downloader m3u8 视频在线提取工具 流媒体下载 m3u8下载 桌面客户端 windows mac 项目地址: https://gitcode.com/gh_mirrors/m3u8/m3u8-downloader 还在为无法保存在线视频而困扰…

张小明 2025/12/30 4:52:13 网站建设

w网站建设wordpress首页加外链

NVIDIA Profile Inspector:显卡性能深度调校实战手册 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏画面卡顿、操作延迟而困扰?想要充分发挥显卡潜力却无从下手&…

张小明 2025/12/30 4:51:40 网站建设

青岛官网建站网站开发项目实例

第一章:高并发场景下混合检索缓存的挑战在现代分布式系统中,混合检索缓存被广泛应用于提升数据访问效率,尤其在高并发场景下,其性能表现直接影响整体系统的响应能力与稳定性。然而,面对海量请求和复杂查询模式&#xf…

张小明 2025/12/30 4:51:06 网站建设