python爬虫-教你js解密

该文章是在工作碰到的需要js破解的网站,记录下破解过程。希望对js破解有一定的帮助,用以参考。

查询加密的大招:
全域搜索enc.utf8.parse,在此打断点,调试查看运行过程

第一个网站

  1. 分析请求
    请求方式
    请求参数
    请求参数是经过加密的,因此需要分析发送请求的过程。

  2. ajax请求分析
    2.1 开启ajax断点
    打开ajax抓包
    2.2 点击按钮后会进入调试模式,一直按 F10 键,跑完一次请求,并观察。
    请求参数位置
    2.3 发现请求参数,然后在其前面打断点(下次直接按 F8即可到达断点位置)

  3. 分析代码
    3.1 通过url全局搜索,来寻找函数入口。
    url全局搜索
    Sources栏下,右击网站网址,出现 search in all files,点击进入输入部分url
    此处可以输入:ScoreLines/UCodes/QueryList
    即可到达请求入口函数
    ajax请求入口函数
    该处可以得到原始请求参数和对参数进行加密处理的函数
    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);
  1. 最快速的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
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值