文章声明
本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与文章作者无关,若有侵权,请联系我立即删除!
概要
- 该篇文章是基于translate接口的分析
- 用到的工具 Edge浏览器
逆向目标
求参数 Acs-Token
开始整活
抓包
- 直接输入中文或者英文, 翻译的顺序无所谓
- 打开F12, 定位到该数据包,可以看到请求头中携带了一个 Acs-Token 加密参数
参数定位及逆向
- 使用搜索大法全局搜
Acs-Token
-
搜索到两处,分别打上断点, 然后触发请求,最终定位到这里
-
遇到这种情况,往上找
e
是不太好找的, 直接从堆栈找,点击到这里发现是一个异步操作 -
这里打个断点,释放前面的断点,重新触发请求,断到
zv(i, n, o, a, u, "next", e)
这里,然后再去向上找堆栈 -
然后你框框一顿找,发现怎么找都找不到啊, 几个函数来回调用,就是找不到在哪生成的加密,这个时候就要使用点非常规手段了
-
直接搜索关键词
encrypt
,不要问我为啥搜这个,你玩多了你就明白了,搜到的地方也不多,其中看着比较关键的位置都打上断点,最终断在了这里
-
有没有发现很熟悉的画面,其实就是我们最常见的
AES/DES
加密 -
加密的明文内容就是
t
key和iv
我这里就不泄露了,你们自己去调吧
加密测试
- 测试的网站: https://tool.lmeee.com/jiami/aes
- 解密时把前面的两个时间戳给去掉,
_
也别忘记了
JS实现
// 声明.我没有测试,大致模板就是这样,如果网站的加密结果和这个结果不一样,就在下面代码的基础上修改一下即可
// 安装插件
npm install crypto-js
const CryptoJS = require("crypto-js");
let key = CryptoJS.enc.Utf8.parse(key);
let iv = CryptoJS.enc.Utf8.parse(iv);
let info = {
mode: CryptoJS.mode.CBC,
iv: iv,
padding: CryptoJS.pad.Pkcs7
}
// 加密
let encrypt = CryptoJS.AES.encrypt('明文', key,info);
let Data = encrypt.toString(CryptoJS.enc.Utf8);
console.log(Data);
//解密
let decrypte = CryptoJS.AES.decrypt('密文数据', key, info);
let text = decrypte.toString(CryptoJS.enc.Utf8);
console.log(text);