某乎X-Zse-96(xzse96)分析

news2024/11/17 12:52:29

特别声明!本章只单纯为了学习!

前言

今天通过知乎的一个参数,来学习逆向的新思路,希望大家能有所掌握。

一.抓包分析

我们进入之后搜索,发现这个数据包比较大,肯定就是这个了包了

 然后我们就进去观看请求头

 我这里就直接说明了,我们今天要逆向的就是这个值X-Zse-96,这个值其实压根不检测,但是我想通过这个值来教会大家逆向新思路。

二.入口定位

我们直接搜索,发现有两个X-Zse-96

在两个的位置上都打上断点

 发现成功断住,发现 x-zse-96=t2 + "_" + tO  而t2是固定值,所以我们要找到tO,这里我就不给出截图了,大家一看就知道

观察这个可以发现 实际上就是要找tT的生成,,其中tT的参数都是不变的大家可以测试下,现在进入ed函数。

发现这个signature不就是我们要的值吗,我们在控制台打印一下。

确定就是了。

三.代码分析 

我么上面已经能够确认入口了,那我们就要开始分析了。

我们打印参数

 可以发现 tp是传进来的参数,而 ty()(tp)一直不变而且很像是一个摘要算法,tJ(ti).encrypt(ty()(tp))又一直改变。我们就思考为什么呢?

首先来验证y()(是不是摘要算法

发现的的确确就是md5,那为什么tJ(ti).encrypt(ty()(tp))会一直变呢,我们猜想一下,可能是时间戳,可能是随机数,还有可能是rsa算法,如果是rsa那就麻烦了,如果是前两个我们给他hook掉,不就好了吗,那我们来验证一下,这里给出hook代码。

//hook掉时间戳
    Date.prototype.getTime=function name(params) {
        //正常是要在这执行以下的
        return 1700000000000;
    }

//hook掉随机数
    Math.random=function name(params) {
        //正常是要在这执行以下的
        return 0;
    }

我么来验证一下

hook时间戳

发现还是变的

hook随机数

发现值不变了,那我们是不是只需要扣完的代码再对random进行hook,对11111111进行加密,看看值匹不匹配就知道对不对啦!

四.抠代码

我们从加密点进去

发现是一个webpack,那我们就往前面找

 这个函数存在于这个里面,所以我们先把这个扣取,再扣取加载器,然后执行这个模块,导出函数就大工搞成了。

 我们全局搜索1514,然后打一个断定,发现这个tr就是调度器,我们进去

把这里全扣就好了,于是我们把两处代码进去扣去,先补上常见的环境,再对random进行hook

我们运行,发现报错,我们就把self都换成是window 

 

至此,代码扣好,准备补环境

五.补环境 

先补上我们常见的,然后再放入proxy代理,这里我给出proxy代理和常见的补环境代码

function setProxy(proxyObjs) {
    for (let i = 0; i < proxyObjs.length; i++) {
        const handler = `{
      get: function(target, property, receiver) {
       if (property != "Math" && property != "isNaN") {
            if (target[property] && typeof target[property] != 'string' && Object.keys(target[property]).length > 3) {

            } else if(property=='webpackChunkheifetz'){

            }else {
            console.log("方法:", "get  ", "对象:", "${proxyObjs[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", target[property], ", 属性值类型:", typeof target[property]);}}
            return target[property];
      },
      // set: function(target, property, value, receiver) {
      //   console.log("方法:", "set  ", "对象:", "${proxyObjs[i]}", "  属性:", property, "  属性类型:", typeof property, ", 属性值:", value, ", 属性值类型:", typeof target[property]);
      //   return Reflect.set(...arguments);
      // }
    }`;
        eval(`try {
            ${proxyObjs[i]};
            ${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});
        } catch (e) {
            ${proxyObjs[i]} = {};
            ${proxyObjs[i]} = new Proxy(${proxyObjs[i]}, ${handler});
        }`);
    }
}
logger = function () {
    console.log('\x1B[31m%s\x1B[0m', arguments)
}

window = global;
delete global;
delete Buffer;

document={}
navigator={}
screen={}
localStorage={}
location={}
history={}

setProxy(['window', 'navigator', 'screen', 'document', 'localStorage', 'location','history',])

 发现值还是不对,代理一看就知道,缺少ua,那我们补上

补上这些, 接着运行

看到这个,我们一看就知道是toString的检测,下面是浏览器的返回值

 那我们补上就好了,接下来几个都是一样的,这里我们只挑重点讲

发现这是要补document.createElement方法,那我们就先这样

document.createElement=function (arr){
    logger(arr)
}

 发现打印的是canvas,那我么就这样补

canvas={}
document.createElement=function (arr){
    logger(arr)
    if(arr='canvas'){
        return canvas
    }
}

同时把canvas添加到proxy的数字里监听起来 

 发现又对canvas进行操作,也是按照那个方法,补就行了。这里我就不多说1,主要是教重点。

把这些方法补的都差不多的时候,发现

这里都是undefined,大家也可以去补补,发现确实都是undefined,那怎么办呢,这个时候就很有可能是,try的问题咯,那我们一搜,发现那么多try,我们就想到,webpack把所有模块都导入了,很有可能用不上几个

 我们就在调度器这里加上

 发现只加载了两个模块,我们干掉其他的和里面的try,发现就一个,删除之后

运行报这个错,我们直接补个空方法就好了

 此致,环境补充完成。 

 总结

通过知乎这个,虽然这个没有逆向,大家肯定也能想到,都有随机值了,怎么可能逆向呢?但是我们能学到补环境的很多知识!

补充

如有需要学习资料和交流加我绿泡泡

这里插入一条广告(希望理解一下,养家糊口)!!!

有需要逆向需求或者是项目,课设等等,都能找我接单,麻烦大家了

公众号(后续会更新相关文章) 

 期待你的关注!

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

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

相关文章

SSRS中生成二维码

1.二维码搭建, fastapi,qrcode,python-barcode from fastapi import FastAPI, HTTPException from pydantic import BaseModel import qrcode from io import BytesIO from fastapi.responses import StreamingResponse import barcode from barcode.writer import ImageWrite…

[Labview] Excel读表 输出表单中选中的单元格内容

简而言之 循环外 是读取excel文件&#xff0c;并写入labview表格 循环内 会输出表格中被选中的单元格内容 属性节点&#xff1a;编辑位置 如果需要改写单元格内容并储存替换Excel&#xff0c;可见这篇&#xff1a;[Labview] 改写表格内容并储存覆盖Excelhttps://blog.csdn.ne…

项目收获总结--MySQL的知识收获

一、概述 最近几天公司项目开发上线完成&#xff0c;做个收获总结吧~ 今天先记录MySQL的收获和提升。 二、MySQL表分区 项目中遇到数据量过大导致在查询过程中会出现各种超时的情况&#xff0c;当然是可以使用各种中间件比如MyCat&#xff0c;ShardingJDBC 等分库工具来进行…

如何选择最佳的照片和视频恢复软件

您是否意外从硬盘或 USB 卡中删除了照片或视频&#xff1f;最好的视频和照片恢复软件可以帮到您&#xff01;如果您一直在寻找最好的照片恢复软件&#xff0c;那么您来对地方了。本文将分享一些帮助您找到最佳视频恢复软件的提示。 重要提示&#xff1a;事实&#xff1a;媒体文…

VirtualBox 安装 Ubuntu Server24.04

环境&#xff1a; ubuntu-2404-server、virtualbox 7.0.18 新建虚拟机 分配 CPU 核心和内存&#xff08;根据自己电脑实际硬件配置选择&#xff09; 分配磁盘空间&#xff08;根据自己硬盘实际情况和需求分配即可&#xff09; 设置网卡&#xff0c;网卡1 负责上网&#xff0c…

通过SDK使用百度智能云的图像生成模型SDXL

登录进入百度智能云控制台&#xff0c;在模型广场按照图像生成类别进行筛选&#xff0c;可以找到Stable-Diffusion-XL模型。点击Stable-Diffusion-XL模型的API文档后在弹出的新页面下拉可以找到SDK调用的说明。 import qianfandef sdxl(file: str, prompt: str, steps: int 2…

grpc-go服务端接口添加

【1】新建一个目录whgserviceproto&#xff0c;目录下新建一个proto包&#xff1a;whgserviceproto.proto &#xff08;注意目录和包名称保持一致&#xff09; //协议为proto3 syntax "proto3"; // 指定生成的Go代码在你项目中的导入路径 option go_package"…

Midjourney 预设

使用命令/settings 进入预设,根据点击不同选项来配置。 🌹 1. 设置工作所使用的模型版本。 1️⃣ MJ Version 1 2️⃣ MJ Version 2 3️⃣ MJ Version 3 4️⃣ MJ Version 4 5️⃣ MJ Version 5 5️⃣ MJ Version 5.1 🔧Raw Mode 🌈 Niji Version 4 🍎 Niji Versio…

CV04_PASCAL VOC2012数据集介绍

1.1 简介 PASCAL Visual Object Classes (VOC) 2012 数据集是计算机视觉领域中一个广泛使用的标准数据集&#xff0c;用于评估和促进对象识别、分类、目标检测、图像分割以及其他视觉理解任务的算法性能。PASCAL VOC项目起始于2005年&#xff0c;并且每年都会更新数据集&#…

【前端项目笔记】7 商品管理

商品管理 效果展示&#xff1a; 在功能开发之前&#xff0c;创建商品列表的子分支 git branch 查看所有分支 git checkout -b goods_list 创建并切换到新分支goods_list git push -u origin goods_list 将新分支goods_list推送到云端仓库origin并命名为goods_list保存 通过…

景色短视频:成都柏煜文化传媒有限公司

景色短视频&#xff1a;定格自然之美&#xff0c;邂逅心灵之旅 在这个被数字洪流包围的时代&#xff0c;短视频以其独特的魅力&#xff0c;为我们打开了一扇通往无限可能的大门。而在众多短视频类型中&#xff0c;景色短视频以其无与伦比的视觉冲击力&#xff0c;成为了许多人…

大模型周报|15 篇必读的大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.谷歌推出风格感知拖放新方法 Magic Insert 来自谷歌的研究团队提出了 Magic Insert&#xff0c;用于以物理上可信的方式将用户提供的图像中的对象拖放到不同风格的目标图像中&#xff0c;同时与目标图像的风格相匹…

利用C语言实现三子棋游戏

文章目录 1.游戏界面2.游戏内容2.1 棋盘类型2.2棋盘的初始化2.3 打印棋盘的界面展示 3.游戏操作3.1 玩家操作3.2 电脑操作3.3 胜负判定 4.代码整合 1.游戏界面 无论写任何程序&#xff0c;我们都需要先去了解它的大概框架&#xff0c;这里我们先把它的初始界面写出来。一个游戏…

使用maven搭建一个SpingBoot项目

1.首先创建一个maven项目 注意选择合适的jdk版本 2.添加依赖 2.在pom.xml中至少添加依赖 spring-boot-starter-web 依赖&#xff0c;目的是引入Tomcat&#xff0c;以及SpringMVC等&#xff0c;使项目具有web功能。 <!-- 引入 包含tomcat&#xff0c;SpringMVC&#xff0c…

广州星启帆:点亮自闭症儿童康复之路的璀璨星辰

在广州这座充满温情的城市中&#xff0c;广州星启帆自闭症康复中心如同一颗璀璨的星辰&#xff0c;照亮了无数自闭症儿童及其家庭的前行之路。这家机构以“点亮希望&#xff0c;启航未来”为使命&#xff0c;向所有踏入这里的家庭承诺&#xff1a;我们将携手并肩&#xff0c;共…

springcloud分布式架构网上商城 LW +PPT+源码+讲解

3系统分析 3.1可行性分析 在开发系统之前要进行系统可行性分析&#xff0c;目的是在用最简单的方法去解决最大的问题&#xff0c;程序一旦开发出来满足了用户的需要&#xff0c;所带来的利益也很多。下面我们将从技术、操作、经济等方面来选择这个系统最终是否开发。 3.1.1技术…

el-scrollbar组件使用踩坑记录

一、el-scrollbar和浏览器原生滚动条一起出现 问题描述 el-scrollbar组件主要用于替换浏览器原生导航条。如下图所示&#xff0c;使用el-scrollbar组件后&#xff0c;发现未能成功替换掉浏览器原生导航条&#xff0c;二者同时出现。 引发原因 el-scrollbar的height属性如果…

怎样把自己电脑ip改成动态ip:步骤与解析

在今天的网络世界中&#xff0c;IP地址是计算机与互联网沟通的桥梁。而动态IP地址&#xff0c;作为其中的一种类型&#xff0c;由于其自动分配和管理的特性&#xff0c;为用户提供了更大的便利性和灵活性。那么&#xff0c;您是否想知道怎样将电脑IP改为动态呢&#xff1f;本文…

win11中配制了系统的环境变量mvn/java,但是mvn/java就是提示不存在的解决方法。

1、已经配制了环境变量&#xff0c;但是提示mvn不存在 2、然后我们在开始程序中查看到cmd&#xff0c;然后以管理员运行&#xff1a; 这样的话&#xff0c;是可以mvn这个命令的&#xff0c;而且只有这种方式是可以的&#xff0c;其它的方式&#xff0c;就算设置了以管理员身份运…