js逆向-最新版百度翻译参数解密

声明

本文仅供参考学习,切勿用于他途,违者后果自负!

前言

目标网站 :aHR0cHM6Ly9mYW55aS5iYWlkdS5jb20v
接口:aHR0cHM6Ly9mYW55aS5iYWlkdS5jb20vdjJ0cmFuc2FwaT9mcm9tPXpoJnRvPWVu

百度翻译最近使用脚本调用发现总是会报错,打开网站一看发现在请求头中多了一个参数Acs-Token,请求时如果不带该参数就会报错。
今天就从头分析一下请求参数的加密,做过百度翻译逆向的小伙伴们都知道原有加密参数是signtoken,现在又多了Acs-Token参数。

加密参数分析

打下XHR断点,定位到sign的位置。

在这里插入图片描述

重新在输入框输入内容就可以断下。
F11进入函数,看一下加密逻辑。
在这里插入图片描述
其实把整个文件拿下来就可以直接运行,也就是sign的生成。
直接运行发现。
在这里插入图片描述
在这里插入图片描述
我们拿到本地的代码中应该是缺了一些东西,所以导致sign的生成有问题,经过排查发现。
在这里插入图片描述
window[key]应该是一个定值,拿到本地因为缺少了这一部分所以导致运行的结果有所偏差。

在这里插入图片描述

怎么解决呢?既然没有赋值,我们直接给它赋值。

let gtk = "320305.131321201";

再重新运行就可以得出正确的结果了。


接下来token的分析。
在这里插入图片描述
找了半天也没有发现这个参数在哪里出现,只好去搜索源码看一下。
在这里插入图片描述
在这里插入图片描述

看一下注释,猜测token大概率是由服务器生成然后下发到客户端,使用正则去匹配一下就可以得到token的值,方便后面使用。
在这里插入图片描述


最后就是Acs-Token,因为是一个header参数。可以选择hook,也可以找堆栈。这个参数没有进行混淆,比较好找。所以怎么方便怎么来。

translate.js文件中的第180行

const sign = await getAcsSign();

在这里插入图片描述
一个异步的函数,将它拿下来就可以得到Acs-Token
在这里插入图片描述
链接: new Promise

resolve方法是执行成功的一个回调函数,reject是执行失败情况的回调。
在这里肯定是执行成功返回了数据。所以直接看50行的resolve(sign)就可以。
下断后,不断的跟栈会跳进acs开头的js文件中,然后发现可疑之处。

在这里插入图片描述
在这里插入图片描述

a2就是header参数的值,a8函数定义在805行。这里做了混淆,手动解一下混淆看一下。
在这里插入图片描述
字符串的拼接,主要加密在后面eg(a2, a0, a1)函数中。
在这里插入图片描述
a2序列化一下

a2 = {
    "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
    "url": "https://fanyi.baidu.com/?aldtype=16047#zh/en/%E4%BD%A0%E5%A5%BD%E5%95%8A",
    "platform": "Win32",
    "clientTs": 1661497062656,
    "version": "1.0.0.5"
}
参数含义
ua请求头(固定)
url翻译语种、关键字(变化值)
platform系统平台(固定值)
clientTs当前时间戳(变化值)
version版本(固定)

在这里插入图片描述
a0和a1值均为固定值,写死即可。
剩下的将eg函数的逻辑拿下来就大功告成了。


代码复现

在这里以Acs-Token的生成逻辑为例。

function eg(a2, a8, a9) {
    return a2 = b('0x53') == typeof a2 ? JSON[b('0xf')](a2) : void 0x0 === a2 ? '' : '' + a2,
        dD[b('0x39')](a2, ad[b('0x1e')](a8), {
            '\x69\x76': ad['\x70\x61\x72\x73\x65'](a9),
            '\x6d\x6f\x64\x65': cc,
            '\x70\x61\x64\x64\x69\x6e\x67': cz
        })['\x63\x69\x70\x68\x65\x72\x74\x65\x78\x74'][b('0xa')](ag);
};

var date = (new Date()).getTime();
var a2 = `{"ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36","url":"https://fanyi.baidu.com/?aldtype=16047#zh/en/%E4%BD%A0%E5%A5%BD%E5%95%8A","platform":"Win32","clientTs":${date},"version":"1.0.0.5"}`;
var a8 = 'qgasccauaeoaiacs';
var a9 = "1234567887654321";
var acsToken = eg(a2, a8, a9);
console.log(acsToken)

剩下报错的地方就是缺少其他代码的逻辑,补上就没有问题了。

链接: 百度翻译最新版

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值