该文章是在工作碰到的需要js破解的网站,记录下破解过程。希望对js破解有一定的帮助,用以参考。
查询加密的大招:
全域搜索enc.utf8.parse,在此打断点,调试查看运行过程
第一个网站
-
分析请求
请求参数是经过加密的,因此需要分析发送请求的过程。 -
ajax请求分析
2.1 开启ajax断点
2.2 点击按钮后会进入调试模式,一直按 F10 键,跑完一次请求,并观察。
2.3 发现请求参数,然后在其前面打断点(下次直接按 F8即可到达断点位置) -
分析代码
3.1 通过url全局搜索,来寻找函数入口。
Sources栏下,右击网站网址,出现 search in all files,点击进入输入部分url
此处可以输入:ScoreLines/UCodes/QueryList
即可到达请求入口函数
该处可以得到原始请求参数和对参数进行加密处理的函数。
3.2 继续向下搜索,
此处即为全局搜索:(函数名称) youzyEpt
当然,还要根据调用路径找到所有调用函数及文件。
然后对每行代码进行分析,可以尝试使用python实现。
var text = JSON.stringify(data);# 该行对字典进行字符串化,可以用python实现
var textBytes = youzyEptService.utils.utf8.toBytes(text);
var aesCtr = new youzyEptService.ModeOfOperation.ctr(tzyCollegeFirst.aesKey(), new youzyEptService.Counter(5));
var encryptedBytes = aesCtr.encrypt(textBytes);
var encryptedHex = youzyEptService.utils.hex.fromBytes(encryptedBytes);
- 最快速的js破解方式
最快的方式就是使用 execjs包直接调用js函数实现加密破解。
4.1 首先要将js代码剥离出来
-.自建一个js文件,将 youzyEpt函数copy到文件内,在将执行过程中的js代码依次分析并剥离,copy到自己的js文件中。
-.此处相对较为容易,因为加密代码都在一个文件(即youzyEpt.sever.js)中,只是将加密的密匙进行了几个文件处理,由于是AES加密,密匙肯定固定可以进行分析得到。
-.此处我的处理就是:将youzyEpt.sever.js文件整个copy,将youzyEpt函数copy到文件内,然后根据调用顺序,找到最低层调用函数,将这些函数copy,独立为独立函数。
python调用js代码如下:
# 如果运行报错,可能需要安装node.js
import execjs
def get_js(path):
f = open(path, 'r', encoding='utf-8') # 打开JS文件
line = f.readline()
htmlstr = ''
while line:
htmlstr = htmlstr + line
line = f.readline()
return execjs.compile(htmlstr)
path1 = "./youzyEpt.sever1.js"
ctx = get_js(path1)
data = {
"provinceId": provinceId,
"collegeId": collegeId
}
res_str = ctx.call('youzyEptt', data)
4.2 然后,运行文件,根据报错来提取函数,再运行,如此循环处理,直到跑通,得到需要的结果。
在这过程中,不管是单一方法,还是类对象,都是copy,提到最外层,
最终的效果如下:
# 加密函数 此处的加密密匙已经固化处理
var youzyEptt = function (data) {
var text = JSON.stringify(data);
var textBytes = toBytes(text