【中等】 猿人学web第一届 第6题 js混淆-回溯

news2024/9/22 5:21:31

文章目录

  • 请求流程
    • 请求参数
  • 加密参数定位
    • r() 方法
      • z() 方法
  • 加密参数还原
    • JJENCOde js代码加密
    • 环境检测
      • _n("jsencrypt")
      • 1
      • 2
      • 3
      • 4
      • 5
  • 计算全部中奖的总金额
  • 请求代码
    • 注意

请求流程

请求参数

打开 调试工具,查看数据接口 https://match.yuanrenxue.cn/api/match/6

在这里插入图片描述

请求参数携带了 m,q 参数
q参数 “点击次数” + “-” + “时间戳” + “|”
m参数为加密值

cookie 没有加密字段
在这里插入图片描述

加密参数定位

查看请求堆栈在这里插入图片描述

对应的请求参数
在这里插入图片描述
t 在 node 中直接声明即可

window.i = '';  // 初始值 ''
request = function() {
   t = Date.parse(new Date());  // 时间戳,直接在 node 中定义即可
   var list = {
       "page": window.page,  // 对应的页码信息
	    // t 在上方有声明
	    // window.o 是点击页面页码的次数,为 1
       "m": r(t, window.o),
       // windiw.i  = windiw.i + window.o + '-' + t + "|"
       "q": window.i += window.o + '-' + t + "|",
 };
 window.o += 1;  // 页面每请求完一次之后 window.o会自增

r() 方法

上断点刷新页面在对应的位置断住,查看 r 方法在这里插入图片描述
在这里插入图片描述

// window.o 初始值为 1
// 每点击一次 window.o 就会自增 1
// 初始值为 1, 点击 4 次页码后就会执行 if 块里的代码
if (window.o >= 6) {
    alert('不要戳这么多下,人家好痛嘛~');  // 弹窗
    location.reload();  // 刷新页面
}

z() 方法

在这里插入图片描述

var n = _n(“jsencrypt”); // _n 是在上方自执行函数中赋值的
在这里插入图片描述

加密参数还原

分析 delect.js 文件

JJENCOde js代码加密

在文件的开头有很长的一段 JJENCODE 加密的代码
在这里插入图片描述

仔细观察这段 JJencode 代码
前面是给变量赋值的操作
最后一行代码是将前面赋值的变量加起来并执行
在这里插入图片描述
将最后一行代码放在浏览器执行
在 JJENCODE 最后一行代码打上断点并刷新页面
将代码最后一行的括号删除
在这里插入图片描述
这行代码实际上生成了一个 自执行函数
给 window.o 赋予了初始值 1
在这里插入图片描述

这段代码在 node 中并不用扣

环境检测

整个加密的值是在 _n 方法中生成的

function z(pwd, time) {
    var n = _n("jsencrypt");  // 主要是靠 _n 加载模块
    var g = (new n);  // new n 方法
    var r = g.encode(pwd, time);  // 取 n 方法中的 encode 进行加密
    return r;  // 将加密的值返回
}

_n(“jsencrypt”)

前面有说到 _n 是在一个 自执行函数中赋值的
在这里插入图片描述

将自执行函数 copy到本地, 模拟执行
在这里插入图片描述

1

window = {};

在这里插入图片描述

2

xe = [][(![] + [])[!+[] + !![] + !![]] + ([] + {})[+!![]] + (!![] + [])[+!![]] + (!![] + [])[+[]]][([] + {})

在这里插入图片描述

3

window.addEventListener ? window.addEventListener(“mousemove”, Be, !1) : window.attachEvent && window.attachEvent(“onmousemove”, Be)

在这里插入图片描述

4

s = navigator

在这里插入图片描述

5

r = t || navigator && navigator.userAgent,

在这里插入图片描述

在 node 文件

window = global;
navigator = {
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
};

// 这里是浏览器中的自执行函数

// 这里是自己定义的方法,方便 python 调用
function sdk(time, clickNum){
    //  _n 加载模块
    let n = _n("jsencrypt")
    // 模拟浏览器执行函数
    let g = new n;
    return g.encode(time, clickNum);
}

计算全部中奖的总金额

接口只返回三等奖的金额

在这里插入图片描述
计算 1,2,3 等奖的值,并除以三等奖
(142620 + 76064 + 9508) / 9508 = 24
(47730 + 25456 + 3182) / 3182 = 24
(131085 + 69912 + 8739) / 8739 = 24
得出 3等奖的金额 * 24 就为全部中奖的金额

请求代码

python 代码

import requests
import execjs
import time

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.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 send_match6(page, click):
    url = "https://match.yuanrenxue.cn/api/match/6"
    time_ = int(str(int(time.time() * 1000))[:10] + '000')
    q = str(click) + '-' + str(time_) + '|'
    m = call_js('6.js', 'sdk', time_, click)
    params = {
        "page": f'{page}',
        "m": m,
        "q": q
    }
    response = requests.get(url, headers=headers, cookies=cookies, params=params)
    print(params)
    print(response.text)
    print('==================================================')


if __name__ == '__main__':
    str_concat = ''
    click_Nums = 1
    for page in range(1, 6):
        concat = send_match6(page, click_Nums)
        click_Nums += 1
        str_concat = concat

注意

浏览器请求的时候,q 参数值是自增的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在 python 中,不需要自增,自增反而会被检测到
大概率是浏览器自增了,但是发送给服务器的数据只是这一次生成的值,并没有发送拼接了的值

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL运维-分库分表

介绍 问题分析 拆分策略 垂直拆分 水平拆分 实现技术 Mycat概述 介绍 概念介绍 Mycat配置 schema.xml schema标签 schema标签(table) datanode标签 datahost标签 rule.xml sever.xml system标签 user标签 Mycat分片 分片规则-范围 分片规则-取模 分…

linux部署elasticserch单节点

简介 Elasticsearch概述:Elasticsearch是一个建立在Apache Lucene之上的分布式、实时文档存储搜索引擎,它能够胜任上百个服务节点的扩展,并支持PB级别的结构化或非结构化数据。 Lucene与Elasticsearch:简要介绍Lucene作为搜索引擎…

分布式中的CAP理论是什么?BASE理论是什么?看完你就彻底懂啦

CAP 理论 CAP理论是分布式系统理论中的一个重要概念,它阐述了在分布式计算环境中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)三者之间的权衡关系…

深化解析:企业内耗的解决之道

在缺乏有效的冲突解决机制下,企业内部冲突难以得到妥善处理,这加剧了内耗,破坏了团队协作的和谐氛围。而当工作环境充满紧张和压力时,员工容易陷入焦虑和疲劳的困境,进而影响工作效率和团队士气。 当员工感受不到应有…

拯救中医 刻不容缓

文|琥珀食酒社 作者 | 积溪 “真是毫无底线” “这是挂羊头卖狗肉” “这钱也赚,华为太让人失望了” 看到网上的这些评论 我的拳头都硬了 华为进军中医药产业 给咱中医药打造独一无二的人工智能大模型 让中医彻底摆脱西方的围剿 这是多好的事情…

如何提取PDF其中的一页或多页?推荐4种方法!

工作中,我们经常需要用到PDF文件,如果需要提取PDF文件中的其中一页或多页内容,要如何做呢?下面小编分享4种方法,看下哪种适合你! 方法1:使用复制粘贴 如果PDF文件中需要提取的内容是纯文字&am…

一起学习LeetCode热题100道(42/100)

42.将有序数组转换为二叉搜索树(学习) 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0…

python连接mysql+mycat读写分离实现

python连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execute(&quo…

ISO 13485认证:医疗器械行业的质量护航者

在医疗器械行业,产品质量关乎生命。为确保每一件医疗器械的安全与可靠,ISO 13485认证作为全球公认的质量管理体系标准,正为无数企业提供强大的质量保障。对于企业来说,获得这一认证不仅是质量管理的提升,更是开拓全球市…

FFmpeg源码:av_log2函数分析

一、av_log2函数的声明 av_log2函数声明在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavutil/common.h中: #ifndef av_log2 av_const int av_log2(unsigned v); #endif 该函数作用是:求形参v是2的多少次幂&#…

【漏洞复现】某成科信票务管理系统 TicketManager SQL注入漏洞

声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 某成科信票务管理系统以私有/公有云为基础部署,实现了基础六管控多协同的智慧票务系统。该系…

企业的安全管家——加密软件

一、加密软件的重要性 数据安全保护:加密软件能够对企业数据进行加密处理,确保即使数据被窃取,也无法被未经授权的人员轻易解密。 合规性要求:许多行业和企业都面临严格的数据保护法规要求,如GDPR、HIPAA等&#xff…

和小米比起来希喂宠物空气净化器怎么样?

有宠物用哪个牌子空气净化机比较好呢?有宠物的家庭除异味、除毛、除菌需求比不养宠的更大,所以有宠物的家庭选空气净化器时一定要着重看这几点。 最近,我发现身边的朋友们都开始重视起家居空气质量,特别是有了宠物之后&#xff0…

Linux笔记 --- 文件属性

在操作文件时时常要获取文件的属性,比如类型、大小、权限、所有者等等信息,这些信息对于文件的传输管理等非常重要,而这些信息则可以通过下面这些函数获取。 这三个函数功能相同,区别在于,stat参数是文件名字&#xff…

git的下载与安装(Windows)

Git是一个开源的分布式版本控制系统(Distributed Version Control System,简称DVCS),它以其高效、灵活和强大的功能,在现代软件开发中扮演着至关重要的角色。 git官网:Git (git-scm.com) 1.进入git官网 2…

[图解]用例规约之扩展路径

1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…

【题解】【高精度】—— [NOIP2003 普及组] 麦森数

【题解】【高精度】—— [NOIP2003 普及组] 麦森数 [NOIP2003 普及组] 麦森数题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 1.题意解析1.1.求位数1.2.输出最后500位1.2.1.输出1.2.2.高精度乘法1.2.3.快速幂 2.AC代码 [NOIP2003 普及组] 麦森数 题目描述 形如 2…

(一)C++学习笔记(满满的都是水货咕噜!)

1、基本概念 1 – 什么是C c就是c语言的扩展,完全兼容c语言 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效,简洁,快速和可移植的传统。 c融合了3种不同的编程方式: c语言代表的过程性语言. c在c语言基础上添加…

爬虫 Web Js 逆向:RPC 远程调用获取加密参数(2)使用 JsRPC 框架

RPC (Remote Procedure Call) 是远程调用的意思。 在 Js 逆向时,本地可以和浏览器以服务端和客户端的形式通过 WebSocket 协议进行 RPC 通信,这样可以直接调用浏览器中的一些函数方法,不必去在意函数具体的执行逻辑,可以省去大量的…

苹果macOS 15 Sequoia投屏功能 实现Mac上iPhone桌面管理

8月14日消息,苹果最新的 iOS 18 和 macOS 15 Sequoia 测试版为 iPhone 投屏功能带来了重大更新。用户可以直接在 Mac 上管理 iPhone 桌面。 iPhone 镜像功能 macOS Sequoia最大的更新是带来了iPhone 镜像功能,这个功能能让给 Mac 用户将 iPhone 的屏幕镜…