【有道翻译js逆向-练手】

博客围绕有道翻译加密函数展开,介绍了寻找加密函数的两种方法,一是在 Network 选项卡下查看调用栈,二是全局搜索;阐述了定位加密函数的过程,明确 sign 由 O(e)、h(t, e)、v(e) 生成;还说明了编写加密函数的要点,可复制找到的函数,缺少的值慢慢查找。

有道翻译

1. 寻找加密函数

变换参数

  1. 寻找加密函数方法1
    可以在 Network 选项卡下,该请求的 Initiator 列里看到它的调用栈,调用顺序由上而下
    寻找1

  2. 寻找加密函数方法2
    直接ctrl+shift+f全局搜索,简单粗暴出奇迹。这个案例中直接搜索比较快点,不过第一种怎么变都能找到
    搜索

3. 定位加密函数

由图可知:
sign: h(t, e):sign由==h(t, e)==生成的,函数就在上面

function O(e) {
	const t = (new Date).getTime();	//获取当前时间戳
	return {
		sign: h(t, e),
		client: d,
		product: u,
		appVersion: p,
		vendor: b,
		pointParam: m,
		mysticTime: t,
		keyfrom: f
	}
}
/*
t = 当前时间戳
e= "fsdsogkndfokasodnaso"		//这个e是固定值,如图4
*/

function h(e, t) {
    return v(`client=${d}&mysticTime=${e}&product=${u}&key=${t}`)
}
//这里 h(e, t)返回"client=fanyideskweb&mysticTime=1691651688920&product=webfanyi&key=fsdsogkndfokasodnaso",即v("client=fanyideskweb&mysticTime=1691651688920&product=webfanyi&key=fsdsogkndfokasodnaso").如图5

function v(e) {
    return r.a.createHash("md5").update(e.toString()).digest("hex")
}
//return r.a.createHash("md5").update(e.toString()).digest("hex"):这段代码使用了 Node.js 的 crypto 模块来进行 MD5 哈希计算。它将给定的输入 e 转换为字符串,并计算对应的 MD5 哈希值,并以十六进制字符串的形式返回结果。

图4
定位函数1
图5
图5
总结:
基本流程是
sign由O(e)、h(t, e)、v(e)生成,其中e为固定值"fsdsogkndfokasodnaso"
,t为时间戳,由v(e)生成sign值

4. 编写加密函数

只需将找到的加密函数复制下来即可,缺少的值在慢慢找,

client: d,
product: u,
appVersion: p,
vendor: b,
pointParam: m,
keyfrom: f

这些值没有变化,是常量可以搜索,或者在 Network 选项卡下直接复制
常量

const d = "fanyideskweb"
		  , u = "webfanyi"
		  , m = "client,mysticTime,product"
		  , p = "1.0.0"
		  , b = "web"
		  , f = "fanyi.web";

//这个v(e)函数可以在这个链接中看懂:https://www.jianshu.com/p/f94a6c8cafaa
function v(e) {
	const a = require("crypto");
	return a.createHash("md5").update(e.toString()).digest("hex")
}
function h(e, t) {
	return v(`client=${d}&mysticTime=${e}&product=${u}&key=${t}`)
}
function O(e) {
	//const t = (new Date).getTime();
	const t = 1691647487762;
	return {
		sign: h(t, e),
		client: d,
		product: u,
		appVersion: p,
		vendor: b,
		pointParam: m,
		mysticTime: t,
		keyfrom: f
	}
}



console.log(O('fsdsogkndfokasodnaso'))

python脚本

import hashlib
import time

d = "fanyideskweb"
u = "webfanyi"
m = "client,mysticTime,product"
p = "1.0.0"
b = "web"
f = "fanyi.web"

def v(e):
    return hashlib.md5(str(e).encode('utf-8')).hexdigest()

def h(e, t):
    return v(f"client={d}&mysticTime={e}&product={u}&key={t}")

def O(e):
    t = int(time.time() * 1000)
    #t = 1691647487762
    return {
        'sign': h(t, e),
        'client': d,
        'product': u,
        'appVersion': p,
        'vendor': b,
        'pointParam': m,
        'mysticTime': t,
        'keyfrom': f
    }

print(O('fsdsogkndfokasodnaso'))

结果

不知道js逆向学会了有啥用
学习

有道翻译的 `sign` 参数是其翻译请求中一个关键的加密参数,用于防止未经授权的请求。通过对相关 JavaScript 代码的逆向分析,可以发现 `sign` 参数的生成方法。以下是其生成逻辑的详细说明: 1. `ts` 参数的生成: `ts` 参数通常是通过获取当前时间戳生成的。具体代码如下: ```javascript r = "" + (new Date).getTime() ``` 这段代码获取了当前的时间戳,并将其转换为字符串形式 [^3]。 2. `bv` 参数的生成: `bv` 参数是通过 `navigator.appVersion` 的 MD5 加密生成的。具体代码如下: ```javascript t = n.md5(navigator.appVersion) ``` 这里使用了 MD5 加密算法对 `navigator.appVersion` 进行加密 [^3]。 3. `salt` 参数的生成: `salt` 参数是通过 `ts` 参数的基础上加上一个随机整数生成的。具体代码如下: ```javascript i = r + parseInt(10 * Math.random(), 10) ``` 这段代码在 `ts` 的基础上加上了一个 0 到 9 之间的随机整数 [^3]。 4. `sign` 参数的生成: `sign` 参数是通过将特定字符串与 `e`(翻译内容)、`i`(salt)以及另一个固定字符串进行拼接后,再进行 MD5 加密生成的。具体代码如下: ```javascript sign = md5("fanyideskweb" + e + i + "@6f#X3=cCuncYssPsuRUE") ``` 这里 `e` 是翻译的内容,`i` 是前面生成的 `salt` 值,`md5` 是 MD5 加密函数 [^3]。 ### 示例代码 以下是一个 Python 示例代码,用于生成 `sign` 参数: ```python import hashlib import time import random def generate_sign(e): ts = str(int(time.time() * 1000)) bv = hashlib.md5("navigator.appVersion".encode()).hexdigest() # 假设navigator.appVersion为固定字符串 salt = ts + str(random.randint(0, 9)) sign = hashlib.md5(f"fanyideskweb{e}{salt}@6f#X3=cCuncYssPsuRUE".encode()).hexdigest() return sign # 示例使用 translation_text = "Hello World" sign = generate_sign(translation_text) print("Sign:", sign) ``` ### 注意事项 - 在实际应用中,`navigator.appVersion` 的值可能会根据浏览器的不同而有所变化,因此需要根据实际情况进行调整。 - `salt` 参数的生成依赖于 `ts` 和一个随机数,因此每次生成的 `salt` 都会不同。 - `sign` 参数的生成逻辑可能会随着有道翻译的更新而发生变化,因此需要定期检查和更新代码。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值