js逆向-md5解密

本文用到的网址为有道翻译你好


按照惯例先打开开发者工具,按ctrl+f键搜索信息,搜到的太多了,因此一条条看网页,看到下面的内容,分析出来这个可能最大,看携带的信息,q就是要翻译的东西,le是翻译方式,t无所谓,client就是通过什么平台翻译的,sign应该是加密参数,keyfrom和client差不多,下一步就是要解密sign,通过全局搜索sign

e4480a380ef74e0c8a6951045d52a70c.png

搜索结果不多,逐个点击查看。

352888fd862943028aeb7c175f72d6c3.png

下面是页面中涉及到sign的内容,再分析这个大函数

function x() {
    return (x = Object(o.a)(regeneratorRuntime.mark((function t(e) {
            var time, r, o, n, f, l;
            return regeneratorRuntime.wrap((function (t) {
                    for (; ;)
                        switch (t.prev = t.next) {
                            case 0:
                                return time = "".concat(e.text).concat(w).length % 10,
                                    r = "".concat(e.text).concat(w),
                                    o = h(r),
                                    n = "".concat("web").concat(e.text).concat(time).concat("Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu").concat(o),
                                    f = h(n),
                                    l = {
                                        q: e.text,
                                        le: e.le,
                                        t: time,
                                        client: "web",
                                        sign: f,
                                        keyfrom: w
                                    },
                                    t.abrupt("return", c.a.post("https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4", d.a.stringify(l)));
                            case 7:
                            case "end":
                                return t.stop()
                        }
                }
            ), t)
        }
    )))).apply(this, arguments)
}

 最有用的是下面这一部分,通过打断点看具体信息,其中w是"webdict",e.text是要翻译的内容,e.le是要翻译成什么语言,再看h函数,点进去

switch (t.prev = t.next) {
    case 0:
        return time = "".concat(e.text).concat(w).length % 10,
            r = "".concat(e.text).concat(w),
            o = h(r),
            n = "".concat("web").concat(e.text).concat(time).concat("Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu").concat(o),
            f = h(n),
            l = {
                q: e.text,
                le: e.le,
                t: time,
                client: "web",
                sign: f,
                keyfrom: w
            },
            t.abrupt("return", c.a.post("https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4", d.a.stringify(l)));
    case 7:
    case "end":
        return t.stop()
}

 

case
0
:
return time = "".concat(e.text).concat(w).length % 10,
    r = "".concat(e.text).concat(w),
    o = h(r),
    n = "".concat("web").concat(e.text).concat(time).concat("Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu").concat(o),
    f = h(n),
    l = {
        q: e.text,
        le: e.le,
        t: time,
        client: "web",
        sign: f,
        keyfrom: w
    },
    t.abrupt("return", c.a.post("https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4", d.a.stringify(l)));

 h函数就是一个md5加密,模仿一下就好了

h = function (t) {
    return m.a.createHash("md5").update(t.toString()).digest("hex")
};

下面是完整的python代码

import hashlib
import requests
import json


def generate_md5_hash(text):
    md5_object = hashlib.md5()
    md5_object.update(text.encode('utf-8'))
    return md5_object.hexdigest()


def x(text):
    w='webdict'
    str = 'Mk6hqtUp33DGGtoS63tTJbMUYjRrG1Lu'
    st='web'
    time = len(text + w) % 10
    r = text + w
    o = generate_md5_hash(r)
    n = f"{st}{text}{time}{str}{o}"
    f = generate_md5_hash(n)
    l = {
        "q": text,
        "le": "en",
        "t": time,
        "client": "web",
        "sign": f,
        "keyfrom": w
    }
    try:
        response = requests.post('https://dict.youdao.com/jsonapi_s?doctype=json&jsonversion=4',
                                 data=l,
                                 headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",})
        result = response.json()
        return result
    except requests.RequestException as e:
        print(f'请求出错: {e}')
        return None
if __name__ == "__main__":
    result = x('你好')
    print(result)

感谢点赞,本文仅限于技术分析学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值