【爬虫逆向案例】某道翻译js逆向—— sign解密

这篇具有很好参考价值的文章主要介绍了【爬虫逆向案例】某道翻译js逆向—— sign解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

1、前言

相信各位小伙伴在写爬虫的时候经常会遇到这样的情况,一些需要携带的参数一直在变化,今天逆向的这个网站某道翻译也如此:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
可以发现变的就两个参数,一个 sign,一个是 mysticTime,mysticTime 一看就是时间戳,所以只要逆向 sign 参数就行了。

2、步骤

可以直接全局搜索 sign:,加一个冒号可能好搜一点。搜索返回的结果比较少,多的话就每个sign都打上断点,点击翻译看看停在哪里。如果实在是太多了,就采用跟栈的方法,准确无误,慢慢的,我们找到了 sign 的位置:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

t 是个时间戳,方法就是 (new Date).getTime()。e 是个固定值 "fsdsogkndfokasodnaso",h 函数传入了 t 和 e 后就生成了 sign,进入 h 函数,发现就在上面。而 d 和 u 这两个参数也是固定的。并且 h 函数里面有调用了一个 v 函数,进入 v 函数,原来 v 函数也在上面。这 v 函数太熟悉了啊,标准的 MD5 加密。

整理一下完整的 js 代码就如下图所示:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

测试完没问题后,就可以封装为 Python 进行请求了,如下图:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

现在可以开始编写爬虫程序,写完运行一下,发现返回的不是翻译后的内容,而是一串字符,那就需要我们来解密一下了:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
我们用跟栈的方法看密文在哪里出现的和在哪里发生了变化,一步一步往下跟,最先调用的函数放在最下面,我们只需要跟到明文出现的那一刻就行了。

我们先复制请求的 URL:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

切换到源代码,在XHR/提取断点把刚才复制的网址加上去,重新点一下翻译

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
可以看到这个 send 就是发请求,现在主要要找返回的数据,我们一步步进入下一个函数调用看看

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
不过一会咱们可以看见,咱们刚才爬虫请求返回的字符出现了,接下来咱们要注意看了,因为要开始处理这个返回的字符串

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
跟到这边的话,可以发现在这字符串成功翻译出来了,如图所示:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

可以看到起作用的是这个 decodeData ,我们进入那个 js 文件

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
把其他断点取消,这边打上断点,重新翻译一下,一步一步往下跟,我们只需要跟到明文出现的那一刻就行了。
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
到 t 的时候还是一串字符串,继续往下走
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
可以看到到 s 的时候已经翻译出来了

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
我们把代码扣下来放到 js 文件中去执行应该就差不多了
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
看到了 r.a.createDecipheriv,就可以用 node 中内置的加密库 crypto 库去执行,当然也可以硬扣,就是有点费时间,而且还可能出现各种报错。

运行报错缺 g ,去代码再抠出来,记得 r.a.createHash("md5").update(e).digest() 改为 node 中内置的加密库 crypto 库:
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

运行报错缺了 o ,直接把 o 复制进来,
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

再次运行报错没有 e.alloc 函数 ,这就需要补充一点 node.js 的相关知识了:

逆向改写知识补充之 Node.js
Buffer.alloc() 方法:用于创建指定大小的新缓冲区对象。
此方法比 Buffer.alloconsafe() 方法慢,但它确保新创建的 Buffer 实例永远不会包含可能敏感的旧信息或数据。
语法:Buffer.alloc(size, fill, encoding)
参数三个参数:

  • 大小:指定缓冲区的大小。
  • 填充:为可选参数,指定填充缓冲区的值。其默认值为 0。
  • 编码:如果缓冲区值是字符串,它是指定值的可选参数。其默认值为‘utf8’。

返回值:

  • 这个方法返回一个新的指定大小的初始化缓冲区。
  • 如果给定的大小不是数字,将引发类型错误。

故我们只需要修改 js 代码为如下:

function data(t) {
    // const a = e.alloc(16, g(o))
    //     , c = e.alloc(16, g(n))
    const a = Buffer.alloc(16, g(o))
        , c = Buffer.alloc(16, g(n))
        , i = crypto.createDecipheriv("aes-128-cbc", a, c);
    //, i = r.a.createDecipheriv("aes-128-cbc", a, c);
    let s = i.update(t, "base64", "utf-8");
    return s += i.final("utf-8"),
        s
}

再次运行,缺少 n ,返回复制补到 js 代码中:
【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向
最后咱们的 js 代码如下,测试之后,确实没有问题,直接用 Python 封装起来:

const crypto = require('crypto')
const o = 'ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl';
const n = 'ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4';

function data(t) {
    const a = Buffer.alloc(16, g(o))
        , c = Buffer.alloc(16, g(n))
        , i = crypto.createDecipheriv("aes-128-cbc", a, c);
    //, i = r.a.createDecipheriv("aes-128-cbc", a, c);
    let s = i.update(t, "base64", "utf-8");
    return s += i.final("utf-8"),
        s
}

function g(e) {
    return crypto.createHash("md5").update(e).digest()
    // r.a.createHash("md5").update(e).digest()
}


text = 'Z21kD9ZK1ke6ugku2ccWu4n6eLnvoDT0YgGi0y3g-v0B9sYqg8L9D6UERNozYOHqnYdl2efZNyM6Trc_xS-zKtfTK4hb6JP8XwCzNh0avc8qItQUiIU_4wKKXJlIpvMvfKvJaaZzaX6VEtpkr2FdkfoT_Jgbm2GRSVj3r40autIdlImENG8hC0ZH4ww7utwuTt3Oo_ZpXg0BSq9wePSAB75-ChkiGKF9HTIPeCl2bl84SBD1XDfFCZpkKQhecYSs0JLoXOqP2ltavxRrg58Hp1q5uIgZZ_Oo2-Jmd-t1r4es40drcAq5bjmS62M2VJF8D6ojtOh9JTfNwgzD3CxYn-Pd7-TgHMyNEJEkFXTAyxzpjlFqtrCYDE3SZUYlENkqsL8Wrra1hM-1nTfiB-BLcWAdRBynNpP5_54aq_-GBsq8bB_9yEX5ovzDB4_Ry_spVVuUnb39iplMHCdCnjOD3ngiIDbl9SUz-9npjBX05ZYRdPmFPAl424qdoaxeVqnVoH8jQFPZVqaHMzu4mJg0SICDWFH7GP1zqGRbXd3ESjT_iBInl3gICt2XVuhh_nubcELkTEC6xbqEDRQkPUNMpzXJHjcvsLHtcmSW0S9F0445ho9kT2qZYdMBC3Fs0OaHpUtFu77gZpQn7sGiqh8VliXIcUtfvvop-1c-Vu5QjfUbLn2-s5POR9fGYG6rt6ioe_PGmwWj-Cc00zUM7FybfarKTr4D3Rk57R72qpXN4Ja86ZsCAMmDG-m5z31RQh_V7echJ8Kna3Go3yWKCK4vtSwOWrFhiS5RTz6EkrGc3SkFKbb5vp8Wop_84myBtgnBmj4CczhTq2HcOxrJf4def6yDt2uBxyv4bTVGx9Yx3uB4Gx0iK5kYvfma6B_LnkRWk331wjuXKQtBGYIuWkR8J5QtvBmIRVaa7AA19Z4xMIEAqbcuQ5p4I9FCElthBrJd9YOcouHK4U27xxYWJJXcJoTvzG7zWtiV76fHDeQLgAWvJJ7ww4NFgjhqc6AKA_2afxa4c_lAvVZgFuKL3XSCL7PfKxp6GhjcGKeSRr80PT1gfFw2xi8X4ejjNm_prsUZ\n'
console.log(data(text))

用 json.loads 解析一下解密后的数据,即可获取翻译的正文,

def get_explain_data(data):
    with open('./youdao.js', 'r', encoding='utf-8') as file:
        result = file.read()
        context1 = execjs.compile(result)
        explain_data = context1.call('data', data)
    explain_data = json.loads(explain_data)
    eng = explain_data['translateResult'][0][0]['tgt']
    return eng

最终效果如下:

【爬虫逆向案例】某道翻译js逆向—— sign解密,Python,笔记,js逆向,前端,爬虫,逆向

3、源码

Github:网易有道翻译逆向
CSDN:有道翻译sign解密,js逆向资源

4、号外

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!
【👇🏻👇🏻👇🏻关注我| 获取更多源码 | 定制源码】大学生毕设模板、期末大作业模板 、Echarts大数据可视化、爬虫逆向等! 「一起探讨 ,互相学习」!(vx:python812146)
以上内容技术相关问题😈欢迎一起交流学习👇🏻👇🏻👇🏻🔥文章来源地址https://www.toymoban.com/news/detail-606756.html

到了这里,关于【爬虫逆向案例】某道翻译js逆向—— sign解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬虫之JS逆向基础小案例:网抑云数据获取

    嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 所用软件 解释器: python 3.8 编辑器: pycharm 2022.3 使用的模块 第三方模块: requests 数据请求 execjs pip install pyexecjs 内置模块(无需安装): nodejs 模块安装: win + R 输入cmd 输入安

    2024年01月20日
    浏览(37)
  • 【Python爬虫案例】抖音下载视频+X-Bogus参数JS逆向分析

    选择自己感兴趣的抖音博主,本次以“经典老歌【车载U盘】”为例 每次请求的页面会有很多接口,需要对接口进行筛选: 第一步筛选XHR筛选 第二步筛选URL中带有post 通过筛选play_add值找到视频的地址 通过对比两次请求发现只有X-Bogus数值会有变化,max_cursor是用翻页,后文再

    2024年03月15日
    浏览(82)
  • 网页爬虫之WebPack模块化解密(JS逆向)

    WebPack打包: webpack是一个基于模块化的打包(构建)工具, 它把一切都视作模块。 概念: webpack是 JavaScript 应用程序的模块打包器,可以把开发中的所有资源(图片、js文件、css文件等)都看成模块,通过loader(加载器)和plugins(插件)对资源进行处理,打包成符合生产环境部署

    2024年02月02日
    浏览(31)
  • 【python】python结合js逆向,让有道翻译成为你的翻译官,实现本地免费实时翻译

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者等等。 🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆

    2024年03月23日
    浏览(33)
  • Python实现Up数据信息采集 <内含JS逆向解密>

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 环境使用: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 模块使用: 第三方模块 需要安装 import requests 导入数据请求模块 内置模块 你安装好python环境就可以了 import datetime 对日期数据进行处理的主要模块 import hashlib 提供了多种安全方便的

    2024年02月15日
    浏览(26)
  • Python采集法外狂徒张三所有视频【含jS逆向解密】

    传说中,有人因为只是远远的看了一眼法外狂徒张三就进去了😂 我现在是获取他视频,岂不是直接终生了🤩 网友:赶紧跑路吧 😏 好了话不多说,我们直接开始今天的内容吧! 你需要准备 环境使用 Python 3.8 Pycharm 模块使用 import requests import csv import datetime import hashlib impor

    2024年02月16日
    浏览(36)
  • 爬虫案例-使用Session登录指定网站(JS逆向AES-CBC加密+MD5加密)

    总体概览:使用Session登录该网站,其中包括对password参数进行js逆向破解                 (涉及加密:md5加密+AES-CBC加密) 难度:两颗星 目标网址:aHR0cHM6Ly93d3cuZnhiYW9nYW8uY29tLw== 下面文章将分为四个部分:         1、定位主体加密函数,进行断点         2、分

    2024年02月09日
    浏览(57)
  • 简单的用Python实现一下JS逆向解密,采集空气质量数据

    最近天气降温厉害,咱们用 Python 来分析一下空气质量如何~ 话不多说,我们直接开始上手。 环境使用 Python 3.8 Pycharm nodejs 模块使用 import requests import execjs import json requests 和 execjs 都是第三方模块,需要手动安装,直接pip install 加上模块名字即可。 明确需求: 明确采集的网站

    2024年02月05日
    浏览(41)
  • 使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录

    兄弟们天天看基础看腻了吧 今天来分享一下如何使用Python突破某网游游戏JS加密限制,进行逆向解密,实现自动登录。 目标:某 7 网游登录 主页:aHR0cHM6Ly93d3cuMzcuY29tLw== 接口:aHR0cHM6Ly9teS4zNy5jb20vYXBpL2xvZ2luLnBocA== 逆向参数:Query String Parameters: password: SlVEOThrcjgzNDNjaUYxOTQzNDM0eVM

    2023年04月13日
    浏览(47)
  • JS逆向解密秀动app(网页接口)实现抢票【python异步请求】

       HI,上一期我出了js逆向解析五邑大学的AES加密实现模拟登录,后台不少人想让我去解析一下秀动app,去实现抢票。我看因此本文就是介绍如何去实现js逆向解析秀动网页端口实现抢票。 (本文拿最近的场:广州姜云升2022巡演) 一.逆向分析过程 首先,我们想要进入下单的

    2024年01月23日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包