有道翻译js逆向

有道翻译最新js逆向 前台识别

POST内容分析

我们需要获取翻译内容

首先F12查找network翻译时用到的传输内容和js文件

定位到请求网址为:”https://dict.youdao.com/webtranslate

同时发现 响应内容(包含我们需要的翻译结果)是加密的

js内容解析

POST-Request内容解析

查看荷载(Payload)有一下内容需要留意:signmysticTime

同时查看相关js文件,定位到app.fcc4646e.js

在js文件中定位到Payload内容

可以看到mysticTime js代码实现内容为const t = (new Date).getTime(); 这是一个时间戳

同时其他值固定且容易获取

sign进行分析,可以看到定义了b()函数而且使用了多函数引用

进行断点测试

同时需要特别注意这段js代码

function b(e, t) {
                return p(`client=${r}&mysticTime=${e}&product=${i}&key=${t}`)
            }

在控制终端进行输出`client=${r}&mysticTime=${e}&product=${i}&key=${t}`查看

'client=fanyideskweb&mysticTime=fsdsogkndfokasodnaso&product=webfanyi&key=1672407825637'

目前看到key定义为了t函数,这个稍后可以使用代码实现

同时注意sign的加密函数构建:

  function m(e) {
            return c.a.createHash("md5").update(e).digest()
        }
        function p(e) {
            return c.a.createHash("md5").update(e.toString()).digest("hex")
        }

对sign进行对比:(可以使用firfox浏览器进行抓取,定位时间戳同时间段不容易发生变化,而Chrome浏览器会及时变化,对比不清晰)

POST内容获取代码编写

我们需要自己写代码来或者这几个值,以达到绕过Request识别

主要是进行signmysticTime值获取,我们对这段js代码进行处理和编写

function m(e) {
  return crypto.createHash("md5").update(e).digest();
}

function p(e) {
  return crypto.createHash("md5").update(e.toString()).digest("hex");
}

function b(e, t) {
  return p(`client=${r}&mysticTime=${e}&product=${i}&key=${t}`);
}

function f(e) {
  const t = Date.now();
  return {
    sign: b(t, e),
    client: r,
    product: i,
    appVersion: l,
    vendor: d,
    pointParam: s,
    mysticTime: t,
    keyfrom: u,
  };
}

编写后的输出

const r = "fanyideskweb";
const i = "webfanyi";
const l = "1.0.0";
const d = "web";
const s = "client,mysticTime,product";
const u = "fanyi.web";
const crypto = require("crypto");

function m(e) {
  return crypto.createHash("md5").update(e).digest();
}

function p(e) {
  return crypto.createHash("md5").update(e.toString()).digest("hex");
}

function b(e, t) {
  return p(`client=${r}&mysticTime=${e}&product=${i}&key=${t}`);
}

function f(e) {
  const t = Date.now();
  return {
    sign: b(t, e),
    client: r,
    product: i,
    appVersion: l,
    vendor: d,
    pointParam: s,
    mysticTime: t,
    keyfrom: u,
  };
}

const e = "fsdsogkndfokasodnaso";
const { sign, mysticTime } = f(e);
console.log(i);
console.log(sign);
console.log(r);
console.log(i);
console.log(l);
console.log(d);
console.log(s);
console.log(mysticTime);
console.log(u);

调试内容:

我们可以用python写一段输出

import hashlib
import time

def sign(r, i, e, t):
    s = f"client={r}&mysticTime={t}&product={i}&key={e}"
    h = hashlib.md5()
    h.update(s.encode())
    return h.hexdigest()

def get_sign(r, i, e):
    t = int(time.time() * 1000)
    return sign(r, i, e, t)

r = "fanyideskweb"
i = "webfanyi"
e = "fsdsogkndfokasodnaso"
sign = get_sign(r, i, e)
print(sign)

前端输出加密内容解密

先要查找到加密函数

查看定义栈

然后对输出的json内容进行解密就可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值