有道翻译--js逆向分析md5加密参数---破解接口密文

有道翻译-最新js分析

网页分析

查找参数

成果展示

网页分析

定位关键接口
打开开发者工具,network,翻译窗口中输入内容后触发接口如图一:
图一
在这里插入图片描述
图二
在这里插入图片描述
图三
在这里插入图片描述
图四

在这里插入图片描述

发现使用post请求,对比两次请求后Form Data中有两个加密参数sign和mysticTime。mysticTime分析是13位的时间戳。通过响应内容(包含我们需要的翻译结果)是加密的。

破解目标—需要分析请求中的加密参数和接口数据解密。

分析加密参数以及接口数据解密
ctrl+F 全局搜索sign或者sign:,查看相关js文件,定位加密参数所在位置。(新手查看每一个文件,把所有对sign字段赋值的地方都打上断点,)
图五

在这里插入图片描述
在response中点击右键中的open in sources panel专挑到Source打开文件,点击下图红色地方,将文件格式化。
图六
在这里插入图片描述

ctrl+F搜索sign观察如果存在sign加密就打上断点调试,发现如下图
图七
在这里插入图片描述从图中可以观察到, sign: v(t, e就是我们要找的加密地方,观察知道sign是md5加密的。t = (new Date).getTime()是时间戳,e是固定值"fsdsogkndfokasodnaso"(多调试几次)。生成sign的函数是function v(e, t),生成v函数的是g函数,观察知g函数就是md5加密

function v(e, t) {
   
                return g(`client=${
     l}&mysticTime=${
     e}&product=${
     d}&key=${
     t}`)
            }

图八
在这里插入图片描述

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

通过分析后修改js代码:

const crypto=require('crypto')
function p(e) {
       
    return crypto.createHash("md5").update(e.toString()).digest("hex")
    }
const time = (new Date).getTime()
function sign(e, t) {
       
    return p(`client=${
     "fanyideskweb"}&mysticTime=${
     time}&product=${
     "webfanyi"}&key=${
     "fsdsogkndfokasodnaso"}`)
    }

python 中调用js代码生成sign

import execjs

#js中md5加密
js='''
const crypto=require('crypto')
function p(e) {    
    return crypto.createHash("md5").update(e.toString()).digest("hex")
    }
const time = (new Date).getTime()
function sign(e, t) {    
    return p(`client=${"fanyideskweb"}&mysticTime=${time}&product=${"webfanyi"}&key=${"fsdsogkndfokasodnaso"}`)
    }
'''

print(execjs.compile(js).call('p','"fsdsogkndfokasodnaso"'))

根据js代码修改成python代码
注意,这里有一个小坑(client=${l}&mysticTime=${e}&product=${d}&key=${t})通过分析上一张图知输出的结果是:‘client=fanyideskweb&mysticTime=fsdsogkndfokasodnaso&product=webfanyi&key=1681794509199’。但是mysticTime应该传入时间戳,key里是’fsdsogkndfokasodnaso’。所以正确的是:client=fanyideskweb&mysticTime=1681803557799&product=webfanyi&key=fsdsogkndfokasodnaso。所以要注意修改参数。

l='fanyideskweb'
e='fsdsogkndfokasodnaso'
d='webfanyi'
ts=str( int(time.time() * 1000))

#`client=${l}&mysticTime=${e}&product=${d}&key=${t}`


#'client=fanyideskweb&mysticTime=fsdsogkndfokasodnaso&product=webfanyi&key=1681734811804'
j='client={}&mysticTime={}&product={}&key={}'.format(l,ts,d,e)
print(j)
sign =hashlib.md5(j.encode('utf-8')).hexdigest()
print(sign)
print(len(sign))

现在通过带上参数,发送请求,看能否得到数据。

import hashlib

import execjs
import time
import datetime
import requests

from lxpy import copy_headers_dict

url ='https://dict.youdao.com/webtranslate'
heards={
   
    'Accept': 'application/json, text/plain, */*',
'Accept-Encoding':
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值