当前位置:   article > 正文

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

form data mystictime

有道翻译-最新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}`)
            }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

图八
在这里插入图片描述

function g(e) {
   
                return c.a.createHash("md5").update(e.toString()).digest("hex")
            }
  • 1
  • 2
  • 3
  • 4

通过分析后修改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"}`)
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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"'))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

根据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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

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, */*',
'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/945482
推荐阅读
相关标签
  

闽ICP备14008679号