1. js混淆-源码乱码

目录

  • 调试干扰
  • 参数逆向

调试干扰

打开开发者工具,首先会进入 setInterval 生成的 debugger

在这里插入图片描述
将 uzt.js uyt.js 内容替换 将这两个文件的内容置空,并刷新页面就可以正常调试了
在这里插入图片描述

参数逆向

点击翻页,可以发现 https://match.yuanrenxue.cn/api/match/1 接口的数据与页面的数据是对应的
在这里插入图片描述
请求参数 m 参数是动态加密的 每次加密的信息都不一样
在这里插入图片描述
在这里插入图片描述
查看对应的堆栈信息,并点击进入
在这里插入图片描述
在这里插入图片描述
点击翻页请求数据,会在断点处断住
在这里插入图片描述
‘data’ 参数是 _0xb89747 变量,向上查看 _0xb89747 变量生成的位置
在这里插入图片描述
代码是经过了 ASCII 码混淆的,手动解混淆之后代码逻辑会清晰很多

var _0x2268f9 = Date['parse'](new Date()) + 100000000
var _0x57feae = oo0O0(_0x2268f9['toString']()) + window['f'];
const _0x5d83a3 = {};
_0x5d83a3['page'] = window['page'];
_0x5d83a3['m'] = _0x57feae + '丨' + _0x2268f9 / 1000;
var _0xb89747 = _0x5d83a3;

AST 解混淆代码
在这里插入图片描述

遍历 StringLiteral 节点,将 rawValue 与 raw 替换即可

// 安装 babel 库:  npm install @babel/core
const fs = require('fs')const traverse = require('@babel/traverse').default  // 用于遍历 AST 节点
const types = require('@babel/types')  // 用于判断, 生成 AST 节点const parser = require('@babel/parser')  // 将js代码解析成ast节点
const generator = require('@babel/generator').default  // 将ast节点转换成js代码// 读取
const ast_code = fs.readFileSync('1\\demo.js', {encoding: 'utf-8'
})let ast = parser.parse(ast_code)  // 将js代码解析成ast语法树// 解混淆
traverse(ast, {StringLiteral(path){console.log('替换前: ', path.node.extra);path.node.extra.raw = `'${path.node.extra.rawValue}'`console.log('替换后: ', path.node.extra);console.log('============================================================')}
})let js_code = generator(ast).code  // 将ast节点转换成js代码// 写入
fs.writeFileSync('1\\New_demo.js', js_code, {encoding: 'utf-8'
})

解混淆后的代码

在这里插入图片描述

_0x5d83a3[‘m’] 是由 _0x57feae + ‘丨’ + _0x2268f9 / 1000 还需要找 _0x57feae

_0x2268f9 参数是 Date[‘parse’](new Date()) + 100000000

_0x57feae 是 oo0O0 方法传入 _0x2268f9[‘toString’]() 再加上 window[‘f’]

点击查看 oo0O0 方法在这里插入图片描述

在 eval 处下断 能发现方法中的 eval 前的代码是用于生成执行 在eval中执行 的代码
在这里插入图片描述
将执行的代码解混淆 在这里插入图片描述
window[‘b’] 代码是固定的,mw 是传进来的时间戳

将atob(window[‘b’])代码扣到本地
在这里插入图片描述
在这里插入图片描述
扣下来的代码最后是 window.f = hex_md5(mwqqppz)
是
mwqqppz 在 eval 执行前被替换成了时间戳
在这里插入图片描述
查看 oo000 方法,返回值是空字符串,返回查看执行这个方法的代码
在这里插入图片描述
eval 将加密参数的值赋值给了 window.f
方法的返回值为 ‘’, 调用加密方法的代码又加上了 window[‘f’]
扣下来的 js 代码最后可以改写为

function sdk(timeStrap){return hex_md5(timeStrap)
}

查看浏览器参数与加密结果
在这里插入图片描述

在这里插入图片描述
结果一致

python 代码

import requests
import execjs
import timeheaders = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
}
cookies = {"sessionid": "你的sessionid",
}def call_js(file_name, func_name, *args):with open(file_name, mode='r', encoding='utf-8') as f:js_code = execjs.compile(f.read())return js_code.call(func_name, *args)def get_data(page):url = "https://match.yuanrenxue.cn/api/match/1"time_ = int(str(int(time.time() * 1000))[:10] + '000') + 100000000encrypt_txt = call_js('1.js', 'sdk', str(time_))params = {"page": f"{page}","m": f"{encrypt_txt}{int(time_ / 1000)}"}response = requests.get(url, headers=headers, cookies=cookies, params=params)print(response.json())if __name__ == '__main__':get_data(1)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino导入实例程序的过程,实例包文件却编译显示缺失文件

参考中实例程序中的readme.txt 导入方式 下面是文档中的使用方式 1.基本信息: 本例程是基于Arduino进行开发的,例程均在E-Paper ESP8266 Driver Board上进行了验证;2.基本使用:方法1:将整个esp8266-waveshare-epd文件夹复制到C…

【Go】通过反射解析对象tag信息,实现简易ORM

反射是运行时,需要在运行时解析类型信息,编译期无法优化这些操作,因此比编译时已知类型信息的直接调用效率要低。 package mainimport ("fmt""reflect""strings" )type Person struct {Name string json:&quo…

PicGo + gitee 免费搭建个人图床

目录 1 图床概念2 使用gitee和PicGo搭建图床流程2.1 下载安装PicGo工具 3 图片上传错误处理3.1 PicGo客户端提示404错误信息图片上传失败3.2 PicGo客户端提示400错误信息图片上传失败 1 图床概念 ​ "图床"是一个网络术语,它指的是一种用于存储和托管图片…

理解张量拼接(torch.cat)

拼接 维度顺序:对于 3D 张量,通常可以理解为 (深度, 行, 列) 或 (批次, 行, 列)。 选择一个dim进行拼接的时候其他两个维度大小要相等 对于三维张量,理解 torch.cat 的 dim 参数确实变得更加抽象,但原理是相同的。让我们通过一…

算法力扣刷题记录 六十九【动态规划基础及509. 斐波那契数】

前言 调整一下做题顺序,多个章节同步进行,穿插练习。可以在各章节的专栏中找同一类。 记录 六十九【动态规划基础】。 一、动态规划理论基础学习 参考学习链接 二、509. 斐波那契数 2.1 题目阅读 斐波那契数 (通常用 F(n) 表示&#x…

html+css+js网页设计 中国移动5个页面(带js)

htmlcssjs网页设计 中国移动5个页面(带js) 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xf…

Cpp中的this指针--复习记录

1.什么是this指针? 每个类都有一个this指针,我们的非静态成员函数可以通过这个this指针来操作对象的成员属性。this指针存储的就是类的实例的地址,this指针时时刻刻指向的都是这个实例对象本身。 由下图可知: 我在主函数中栈上创建了一个类的实例(由操…

【Python-实操】LabelMe to YOLOv8 Converter

LabelMe to YOLOv8 Converter 这是一个 Python 脚本,用于将 LabelMe 标注工具导出的 JSON 文件转换为 YOLOv8 格式的标注文件,并同时在图像上绘制标注的多边形。 功能 读取 LabelMe JSON 文件。解码并显示图像。从 classes.txt 文件加载类别标签。将多…

Java | Leetcode Java题解之第327题区间和的个数

题目&#xff1a; 题解&#xff1a; class Solution {public int countRangeSum(int[] nums, int lower, int upper) {long sum 0;long[] preSum new long[nums.length 1];for (int i 0; i < nums.length; i) {sum nums[i];preSum[i 1] sum;}BalancedTree treap ne…

Java参数传递

Java参数传递 一、 方法重载 一个类中可以存在多个同名的方法&#xff0c;只要这些方法的参数列表不同即可。 参数列表不同&#xff1a;参数个数或者参数类型不同方法重载与修饰符、返回值类型等统统无关&#xff0c;只看参数列表 二、 可变个数的形参 从Java5.0开始&…

陶瓷材质的防静电架空地板越来越受欢迎的原因

目前市面上的陶瓷防静电架空地板主要分为两种&#xff1a;钢基和硫酸钙基。前者是以全钢冲孔裸板作为板基&#xff0c;经粘接、固定整型和灌浆的方式加工而成&#xff0c;后者是以复合硫酸钙板为基材&#xff0c;表面粘接防静电陶瓷砖&#xff0c;四周导电PVC边条封边。近年来陶…

【C++】vector 的模拟实现

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

02_快速启动 Demo 创建 Electron 项目、electron-forge 搭建一个 electron 项目、手动创建electron项目

快速启动 Demo 创建 Electron 项目 一、克隆一个仓库、快速启动一个项目二、electron-forge 搭建一个 electron 项目三、手动搭建一个 electron 项目四、开发工具中配置 Eslint 一、克隆一个仓库、快速启动一个项目 要使用 git 的话首先电脑上面需要安装 git //克隆示例项目的…

Qt3D给圆环等立体图形添加纹理图片

添加纹理图片&#xff0c;首先需要自己找一个纹理图&#xff0c;当然了&#xff0c;随便什么图片都行。 创建3D图形的主要步骤查看另一篇文章。 这里主要代码如下&#xff1a; 使用QTextureLoader加载图片&#xff0c;图片路径需为qrc:/的路径。 auto *planeTransform1 ne…

嵌入式学习day13(C高级Linux命令)

一丶进程管理命令 1.grep 功能&#xff1a;从文件中查找字符串 格式&#xff1a;grep "要查找的字符串" 文件名 精确查找&#xff1a;grep "\<要查找的字符串\>" 文件名 结合ps以及管道&#xff1a;ps -ef | grep a.out: 从进程信息中查找带…

10个理由告诉你,为什么鸿蒙是下一个职业风口!

在当今科技飞速发展的时代&#xff0c;新的技术和趋势不断涌现&#xff0c;为人们带来了前所未有的机遇和挑战。鸿蒙操作系统作为我国自主研发的创新成果&#xff0c;正逐渐成为科技领域的焦点&#xff0c;被认为是下一个职业风口。 10个理由告诉你&#xff0c;为什么鸿蒙是下一…

【海贼王航海日志:前端技术探索】CSS你了解多少?(二)

目录 1 -> 字体属性 1.1 -> 设置字体 1.2 -> 字体大小 1.3 -> 字体粗细 1.4 -> 文字样式 2 -> 文本属性 2.1 -> 文本颜色 2.1.1 -> 认识RGB 2.1.2 -> 设置文本颜色 2.2 -> 文本对齐 2.3 -> 文本装饰 2.4 -> 文本缩进 2.5 -&g…

vue的nextTick是下一次事件循环吗

如题&#xff0c;nextTick的回调是在下一次事件循环被执行的吗&#xff1f; 是不是下一次事件循环取决于nextTick的实现&#xff0c;如果是用的微任务&#xff0c;那么就是本次事件循环&#xff1b;否则如果用的是宏任务&#xff0c;那么就是下一次事件循环。 我们看下Vue3中…

【Canvas与艺术】黄色立体感放射光芒五角星

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>黄色立体感放射光芒五角星</title><style type"text/c…

Html详解——Vue基础

HTML是什么&#xff1f; 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用来结构化 Web 网页及其内容的标记语言。网页内容可以是&#xff1a;一组段落、一个重点信息列表、也可以含有图片和数据表…