百度翻译逆向Acs-Token逆向百度翻译爬虫(调试篇)

文章声明

本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与文章作者无关,若有侵权,请联系我立即删除!

概要

- 该篇文章是基于translate接口的分析
- 用到的工具 Edge浏览器

逆向目标

求参数 Acs-Token

上一篇百度翻译是技巧篇,这篇来带着一步步找加密点

参数定位及逆向

  • 搜索Acs-Token并定位
    在这里插入图片描述

  • 发现p是由e.sent赋值的,那么我们就需要向上找e,这个时候有两种情况,

    • e是在其他分支中被赋值的
    • e是被当成参数传递的
  • 大致看完代码之后发现是第二种情况,然后打断点

在这里插入图片描述

  • 注意断点不要打在函数内部,要打在return Dv()这个位置,因为js中使用了大量的异步操作,很多值你正常跟是跟不到的

  • 既然e是被当成参数传递的,我们就看看他对这个函数都进行了什么处理,断点打在wrap然后单步进入

  • 先不要关心值在哪里, 先看看他想要干什么,知道他的目的之后就能找到值的位置

  • 一直往下跟,这是一个枯燥的过程,然后走到这里就开始做事情了

在这里插入图片描述

  • 进入i.HB方法,发现只执行了d方法,而该方法内部中出现了关键字眼sign这个时候我们就需要额外关注了

    在这里插入图片描述

  • 看到new Promise之后,就找e方法,看看该方法传递了什么参数(为什么看e?, 了解Promise之后你就明白了)

  • 最终断点落在了e(r)处,且r就是我们要的加密值,并且又看到了我们熟悉的acs文件
    在这里插入图片描述

  • 根据堆栈找r看看哪里都用到了这个加密值, 最终定位到这里
    在这里插入图片描述

  • 可以看到f就是加密值,打个断点,重新触发请求,在这里直接打断点会断下很多次,使用条件断点(typeof f == 'string' && f.length == 540), 540是我这里加密结果的固定长度

  • 断到之后可以发现r[a].get()是一个取值操作,而值是早已经生成过了, 在控制台看看r
    在这里插入图片描述

  • 发现r是一个数组,并且数组内对象的结构都是固定的{kind:0, value:xxxx}

  • 去搜索kind,kind附近一定有value, 找到了这两处,保险起见都打上条件断点,否则断点会很多

  • typeof e == 'string' && e.length == 540

  • 放开断点,重新触发请求
    在这里插入图片描述

  • 断到了第一个value,去找上一个堆栈,找到了(new t(i + o);)就是组成的value
    在这里插入图片描述

  • 发现o的值也是通过value的方式获取的,这个时候就要去修改前面的条件断点了

  • typeof e == 'string' && e.length == 512

  • 放开断点,重新触发请求
    在这里插入图片描述

  • 继续找上一个堆栈,看到这里应该很熟悉了把n.V = new t(o.apply(i, a));
    在这里插入图片描述

  • 进入到o函数,看见了很多老朋友
    在这里插入图片描述

  • 然后再往上看看代码,你会发现encrypt关键词, 这就和上一篇相呼应上了吧

  • 剩下就没啥东西了,到这里基本上就结束了

加密测试

- 测试的网站: https://tool.lmeee.com/jiami/aes

在这里插入图片描述

  • 解密时把前面的两个时间戳给去掉,_也别忘记了

JS实现

// 声明.我没有测试,大致模板就是这样,如果网站的加密结果和这个结果不一样,就在下面代码的基础上修改一下即可
// 安装插件
npm install crypto-js
const CryptoJS = require("crypto-js");

let key = CryptoJS.enc.Utf8.parse(key); 
let iv = CryptoJS.enc.Utf8.parse(iv); 
let info = {
    mode: CryptoJS.mode.CBC,
    iv: iv,
    padding: CryptoJS.pad.Pkcs7
}
// 加密
let encrypt = CryptoJS.AES.encrypt('明文', key,info);
let Data = encrypt.toString(CryptoJS.enc.Utf8);
console.log(Data);

 
 
//解密
let decrypte  = CryptoJS.AES.decrypt('密文数据', key, info);
let text = decrypte.toString(CryptoJS.enc.Utf8);
console.log(text);

贴一下我的名片

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dh_浩开玩笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值