一次破解js加密的过程
Kale

很早之前就知道前端基本没有安全性可言,代码都是跑在客户机上,但是居然今天才去想到破解js加密这种东西…下面就记录一次完整的破解js加密的过程

破解的是有道翻译.

首先去有道翻译的页面,随便输入一个词看接口:

Avatar

分析可知,Form Data里的salt,sign,tsbv比较像是处理后的结果,而其余字段则像是固定的.搜索salt,得到一个js文件,打开js文件:

Avatar

在js文件中查找salt可以找到这样一个函数,应该就是前端加密的函数.为了方便将函数直接复制到本地查看:

1
2
3
4
5
6
7
8
9
10
11
var r = function (e) {
var t = n.md5(navigator.appVersion),
r = "" + new Date().getTime(),
i = r + parseInt(10 * Math.random(), 10);
return {
ts: r,
bv: t,
salt: i,
sign: n.md5("fanyideskweb" + e + i + "Nw(nmmbP%A-r6U3EUn]Aj"),
};
};

这里面就比较清楚了,首先ts是与时间有关的,应该是时间戳,bv是一个哈希值,salt是时间戳再加上一个随机值,sign是一个组合的哈希值,接下来在控制台查看这些的格式及意义,也可以调试查看:

Avatar

Avatar

可以看到navigator.appVersion就是User-Agent,e就是用户输入需要翻译的词.构造方式已经弄清楚,接下来就是用python翻译一下这个函数了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import requests
import time
import hashlib
import random
import demjson


def get_ts_bv_salt_sign(e):
t = hashlib.md5(
"5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36".encode('utf-8')).hexdigest()
r = int(time.time()*1000)
i = r + int(random.random()*10)
ts = r,
bv = t,
salt = i,
sign = hashlib.md5(("fanyideskweb" + e + str(i) +
"Nw(nmmbP%A-r6U3EUn]Aj").encode('utf-8')).hexdigest()

headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36',
'Referer': 'http://fanyi.youdao.com/',
'Cookie': 'this is your cookie',
}
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
data = {
'i': e,
'from': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'ts': ts,
'bv': bv,
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}
res = requests.post(url=url, headers=headers, data=data)
res = demjson.decode(str(res.text))
return res['translateResult'][0][0]['tgt']


if __name__ == '__main__':
e = input("请输入要翻译的词:")
result = get_ts_bv_salt_sign(e)
print("翻译结果为:"+result)

这个写起来就很简单了,除了salt, sign, tsbv需要自己构造外,其余的直接照抄就行.

Avatar

然后找了一下自己的网站:

Avatar

代码都是公开的了…

  • 本文标题:一次破解js加密的过程
  • 本文作者:Kale
  • 创建时间:2020-04-20 16:33:57
  • 本文链接:https://kalew515.com/2020/04/20/一次破解js加密的过程/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!