aardio爬虫) 实战篇:逆向有道翻译web接口

news/2024/10/9 1:18:23

前言

之前的文章把js引擎(aardio封装库) 微软开源的js引擎(ChakraCore))写好了,这篇文章整点js代码来测一下bug。测试网站:https://fanyi.youdao.com/index.html#/

逆向思路

逆向思路可以看有道翻译js逆向(MD5加密,AES加密)附完整源码,逆向我就不赘述了。这篇文章说一下怎么将文章中给的Python代码翻译成aardio调用和扣js代码用ChakraCore调用。

扣js代码

有道翻译的js是webpack,扣webpack主要有两个内容,一个是加载器函数,还有就是实际调用的函数。这个可以去看b站志远一期的内容,讲的很详细。

这个我看了下,把整个js放到nodejs里执行就行,不需要扣函数,函数和函数之间关联太多了,扣反而不方便。上面补个window,然后导出成全局函数。

91565这个函数在另一个js文件里,把整个大对象拿下来和e合并一下。

然后就可以直接调用

var r = n(91565)
console.log(r.createHash("md5").update("11111111").digest("hex"))

再封装两个函数给外部调用:

function md5(content){let r = n(91565);return r.createHash("md5").update(content).digest("hex");
};function aes_cbc_decrypt(key, iv, content){let r = n(91565);let o = r.createHash("md5").update(key).digest();let a = r.createHash("md5").update(iv).digest() ; let i = r.createDecipheriv("aes-128-cbc", o, a);let c = i.update(content, "base64", "utf-8");return c += i.final("utf-8");
};

测试了封装的ChakraCore库,有个莫名其妙的bug:如果不在js里调用这两个函数,那你再aardio使用run或者callFunction调用可能会报错,测试了半天也没找到具体原因,主要是ChakraCore的文档有点少。

没办法,目前只能在javaScript里先调用一次,这个bug后面看看能不能解决

var decodeiv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4";
var decodekey = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl";
var text = "";
// 需要先在js里调用一次,不然aardio调用报错
md5("1111")
aes_cbc_decrypt(decodekey, decodeiv, text)

用ChakraCore调用的完整代码(js文件我放到了aardio-extlibs那个github仓库里作为ChakraCore的用例):

import console; 
import kirequests;
import ChakraCore;
io.open()
var core = ChakraCore()
core.start()core.run(string.load("./有道翻译.js"))var client = "fanyideskweb";
var product = "webfanyi";
var key = "fsdsogkndfokasodnaso";
var signStr = `client=%s&mysticTime=%s&product=%s&key=%s`;// 先请求主页获取cookie
var session = kirequests.session();
var url = "https://fanyi.youdao.com/index.html"
var resp = session.get(url);// 要翻译的内容
var word = "中国";
// 内容是什么语言
var from = "auto";
// 想翻译成什么语言
var to = "";
var webtranslateApi = "https://dict.youdao.com/webtranslate";
var timestamp = tostring(tonumber(time())) + string.random(3,"1234567890");
var postData = {"i": word,"from": from,"to": to,"domain": "0","dictResult": "true","keyid": product,"client": client,"product": product,"appVersion": "1.0.0","vendor": "web","pointParam": "client,mysticTime,product","mysticTime": timestamp,"keyfrom": "fanyi.web","mid": "1","screen": "1","model": "1","network": "wifi","abtest": "0","yduuid": "abcdefg"
}
var s = string.format(signStr, client,timestamp,product,key)
postData["sign"] =  core.callFunction("window.md5",s);
var resp = session.post(url=webtranslateApi,data=postData);
// 开始解密
var decodeiv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4";
var decodekey = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl";
var result = core.callFunction("window.aes_cbc_decrypt", decodekey, decodeiv,resp.text)
console.log(result)
console.pause(true);

aardio实现

这里在给个不用ChakraCore用上篇文章写的aes库调用的代码。

import console; 
import kirequests;
import kicrypt.aes;
import crypt;
import crypt.bin;var client = "fanyideskweb";
var product = "webfanyi";
var key = "fsdsogkndfokasodnaso";
var signStr = `client=%s&mysticTime=%s&product=%s&key=%s`;// 先请求主页获取cookie
var session = kirequests.session();
var url = "https://fanyi.youdao.com/index.html"
var resp = session.get(url);// 要翻译的内容
var word = "hello";
// 内容是什么语言
var from = "auto";
// 想翻译成什么语言
var to = "";
var webtranslateApi = "https://dict.youdao.com/webtranslate";
var timestamp = tostring(tonumber(time())) + string.random(3,"1234567890");
var postData = {"i": word,"from": from,"to": to,"domain": "0","dictResult": "true","keyid": product,"client": client,"product": product,"appVersion": "1.0.0","vendor": "web","pointParam": "client,mysticTime,product","mysticTime": timestamp,"keyfrom": "fanyi.web","mid": "1","screen": "1","model": "1","network": "wifi","abtest": "0","yduuid": "abcdefg"
}postData["sign"] = crypt.md5(string.format(signStr, client,timestamp,product,key),false);
var resp = session.post(url=webtranslateApi,data=postData);
// 开始解密
var decodeiv = "ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4";
var decodekey = "ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl";
var key = string.unhex(crypt.md5(decodekey,false),"")
var iv = string.unhex(crypt.md5(decodeiv,false),"")
var aesObj = kicrypt.aes(key, iv);
var data = crypt.bin.decodeUrlBase64(resp.text)
var result = aesObj.decrypt(data, kicrypt.aes.CBC)
console.log(result)
console.pause(true);

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

“any”类型的参数不可分配给“never”类型的参数。ts(2345)

问题引入在进行项目开发时,用到了 el-tree 标签,就是组织树状数据渲染页面,类似菜单,然后父级菜单下会有多个子菜单。本次总共就两层。这里遇到的问题是,后端返回的数据就是一个list,属于叶子节点,父级节点是固定的,需要前端写死,但就在写死了父级节点,并将叶子节点加…

ubuntu 桥接模式无法上网解决

ubuntu安装,根据个人的选择来配置网络信息,以下是vmare配置桥接模式时ubuntu无法上网的处理方式: 1. vmare-》虚拟机-》设置, 选中桥接模式(复制物理状态可以不勾选)2. vmare-》编辑-》虚拟网络编辑器, 选中更改设置 2. 选中VMnet0网卡,该网卡选中电脑目前在用的网卡名…

用php找出字符串中连续重复次数最多的字符,你有方法吗?

找出字符串中连续重复次数最多的字符,这里总结了几种方法,不管是在开发中,还是在面试中都会遇到。 方法一<?php $arr = str_split($str); //字符串分隔到数组中$arr = array_count_values($arr); //用于统计数组中所有值出现的次数,返回一个数组//键名为原数组的键值,…

WEB安全~X-Frame-Options

X-Frame-Options 是一个HTTP响应头,用于控制网页是否可以嵌套在 <frame>, <iframe>, <embed> 或者 <applet> 中。通过设置 X-Frame-Options 头部,网站管理员可以防止网页被嵌套到其他网站的框架中,从而有效防范点击劫持等安全风险。下面是关于 X-Fr…

微服务 - 作业调度 Hangfire集成式 仪表盘 DolphinScheduler分布式 定义流程

Hangfire,Client,Storage,Server,Dashboard,一次性作业任务,延迟作业,周期性定时作业,触发型作业任务,删除作业任务,作业队列,异常重试机制,原理机制与适用场景,DolphinScheduler,自定义业务流程,流程节点类型,串行并行逻辑节点,流程节点参数,数据源,流程实…

flutter 编译环境部署

一. 编译环境安装 1. 安装ubuntu20.04,详细的教程请看以下链接 VMware虚拟机下安装Ubuntu20.04(保姆级教程)_ubuntu 20.04 虚拟机-CSDN博客 2. 部署flutter环境,详细教程请参照以下链接 构建 flutter 应用程序 sony/flutter-elinux 维基 GitHub上 注意:在进行docker映射时…

智能决策新时代:可视化大屏是否能够超越传统白板?

前言 2015年,国务院提出了中国制造2025制造强国“三步走”规划,旨在推动中国制造业成为全球制造强国:第一个十年规划,2015-2025:中国制造业迈入制造强国行列,实现技术创新和产业升级。 第二个十年规划,2025-2035:中国制造业整体达到世界强国中等水平,推动产业智能化和…

day31-jQuery

1、jQuery介绍jQuery是什么jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的J…