【JS逆向学习】某壁纸下载(ast混淆)

逆向目标

  • 目标网址:https://bz.zzzmh.cn/index
  • 逆向接口一:https://api.zzzmh.cn/bz/v3/getData
  • 逆向接口二:https://cdn2.zzzmh.cn/wallpaper/origin/0d7d8d691e644989b72ddda5f695aca2.jpg?response-content-disposition=attachment&auth_key=1706716800-4fd9d400aa760d347954198f61eefb01e5036dcf-0-af3114185da04f1d74e64be705918aab
  • 加密参数:
    • result
    • auth_key

逆向过程

像这种带有页数的网页走的一般都是ajax接口,我们直接点击下一页观察网络请求,确实走的是ajax接口,而且只有response中的数据是加密的
请添加图片描述

在前面的文章中有介绍过返回内容加密的我们可以直接 hook JSON.parse,我们在控制台注入hook代码

var _prase = JSON.parse;JSON.parse = function(param){debugger;return _parse(param);
}

然后再次翻页,可以看到断住了,直接跟栈分析
请添加图片描述

逆向分析

单步跟进,找到加密的入口了,可以看到js代码是经过混淆的,不过不影响我们的分析,涉及的方法调用内部都打上断点,调试分析发现走完这几个方法就拿到了我们想要的结果
请添加图片描述

我们把加密内容和这几个方法扣到本地,本地运行会报错,如下
请添加图片描述

node是没有window这个变量的,这里是调用了atob方法进行解码

atob() 方法用于解码使用 base-64 编码的字符串。base-64 编码使用方法是 btoa()

node环境里我们可以直接调用,修改后再次运行,得来全不费功夫
请添加图片描述

到这里我们的工作完成了一半了,接下来分析下载接口里的auth_key,取消过滤网络请求,然后随便点击一张图片然后观察网络请求,如下要什么来什么,接口请求https://api.zzzmh.cn/bz/v3/getUrl/71e52c67f5094e44b92ccaed93db15c521,返回的状态码是302重定向,然后重定向网址Location就是我们要找的东西

请添加图片描述

我们直接打开Location的网址https://cdn2.zzzmh.cn/wallpaper/origin/71e52c67f5094e44b92ccaed93db15c5.jpg/fhd?auth_key=1706716800-4fd9d400aa760d347954198f61eefb01e5036dcf-0-63b18ffb82f5a0ddab9cf92880576e7a
请添加图片描述

逆向结果

获取图片ID列表
function _0x476691(_0x4eff8a) {let _0x5f0aa7 = [-0x6f, 0x34, 0x5b, 0x41, -0x41, 0x74, 0x77, 0x6a, -0x79, -0x52, -0x5, 0x50, 0x33, 0x61, 0x44, -0x53, -0x70, -0x33, 0x17, -0x2e, -0x22, -0x72, -0x37, -0xb, -0x7f, 0x5a, 0x21, 0x16, -0x1f, 0x32, -0x11, 0x14, -0x2c, 0xf, -0x5e, -0x7b, 0x76, -0x17, -0x3d, 0x72, 0x47, -0x68, -0x7e, -0x75, -0x51, -0x36, -0x12, -0x6e, -0x4, -0x5f, -0x5b, 0x5e, -0x50, -0xe, 0x78, 0x69, 0x55, 0x68, -0x56, -0x6c, 0x43, 0x19, 0x65, 0x6c, 0x10, -0x69, 0x6f, -0xa, 0x75, -0x49, 0x4d, 0x59, -0x1d, -0x62, -0x44, 0x70, 0x6b, -0x1, 0x56, 0x79, 0x58, -0x65, -0x7c, 0x45, -0x1e, -0x8, -0x71, -0x4a, -0x76, 0x39, -0x19, 0xc, -0x73, -0x6a, 0x5f, 0x7f, 0x54, 0x7c, -0x66, -0x1c, 0x49, 0x2b, -0x3c, 0x1c, 0x2e, 0x73, 0x1e, 0x7a, -0x4b, 0x7d, -0x43, -0x4d, 0x3, -0x7, -0x35, -0xd, 0x35, 0x4e, -0x48, 0x1, 0xb, -0x47, -0x27, -0x4f, -0x3, 0x13, 0x29, 0x7e, -0x2b, -0x7d, -0x1b, 0x22, 0x3f, 0x8, 0x48, -0x23, -0x29, -0x3f, 0x3c, -0x18, 0x66, 0x2f, -0x77, -0x67, -0x16, 0x2d, 0x3b, 0x40, -0x60, 0x31, 0x53, -0x6b, -0x78, -0x39, -0x46, 0x0, -0x26, -0x54, -0x28, 0x18, 0xe, 0x30, 0x1d, 0x2c, -0x24, -0x2f, 0x38, -0x5c, 0x26, 0x25, 0x4, -0x32, 0x67, 0xa, -0x59, 0x37, 0x71, -0x1a, 0x6e, 0x36, 0x24, -0x14, -0x4e, -0xc, -0x74, 0x46, -0x25, 0x5, -0x3e, -0x4c, -0x30, -0x40, 0x4f, 0x64, 0x28, 0x6, -0x3a, -0x5a, -0x13, -0x9, 0x27, 0x5d, -0x63, 0x15, 0x7, 0x1a, -0x2, 0x1b, -0x2d, 0x51, 0x3a, -0x7a, 0x4c, -0x42, 0x2, 0x5c, -0x2a, 0x62, -0x10, 0x9, 0x3d, 0x3e, -0xf, 0x63, -0x15, 0x1f, -0x38, 0x57, 0x11, -0x34, -0x45, -0x21, -0x3b, -0x55, 0x42, 0x4a, 0x12, -0x5d, -0x80, -0x57, -0x20, 0x2a, 0x20, -0x58, 0x6d, 0x60, 0xd, -0x6, 0x4b, -0x64, -0x31, 0x23, -0x61, 0x52, -0x6d, 0x7b], _0x48065b = 0x0, _0x5274e8 = 0x0, _0x86b937 = 0x0, _0x114065 = new Array();for (let _0x4aff5a = 0x0; _0x4aff5a < _0x4eff8a['length']; _0x4aff5a++) {_0x48065b = _0x48065b + 0x1 & 0xff,_0x5274e8 = (0xff & _0x5f0aa7[_0x48065b]) + _0x5274e8 & 0xff;const _0x3c8821 = _0x5f0aa7[_0x48065b];_0x5f0aa7[_0x48065b] = _0x5f0aa7[_0x5274e8],_0x5f0aa7[_0x5274e8] = _0x3c8821,_0x86b937 = (0xff & _0x5f0aa7[_0x48065b]) + (0xff & _0x5f0aa7[_0x5274e8]) & 0xff,_0x114065['push'](_0x4eff8a[_0x4aff5a] ^ _0x5f0aa7[_0x86b937]);}return _0x114065;
}
function _0x300484(_0x17a9d3) {let _0x1403b1, _0x491f1a, _0x58689c = '';for (var _0x2a4fe4 = 0x0; _0x2a4fe4 < _0x17a9d3['length']; )_0x1403b1 = _0x17a9d3[_0x2a4fe4],_0x491f1a = 0x0,_0x1403b1 >>> 0x7 === 0x0 ? (_0x58689c += String['fromCharCode'](_0x17a9d3[_0x2a4fe4]),_0x2a4fe4 += 0x1) : 0xfc === (0xfc & _0x1403b1) ? (_0x491f1a = (0x3 & _0x17a9d3[_0x2a4fe4]) << 0x1e,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x1]) << 0x18,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x2]) << 0x12,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x3]) << 0xc,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x4]) << 0x6,_0x491f1a |= 0x3f & _0x17a9d3[_0x2a4fe4 + 0x5],_0x58689c += String['fromCharCode'](_0x491f1a),_0x2a4fe4 += 0x6) : 0xf8 === (0xf8 & _0x1403b1) ? (_0x491f1a = (0x7 & _0x17a9d3[_0x2a4fe4]) << 0x18,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x1]) << 0x12,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x2]) << 0xc,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x3]) << 0x6,_0x491f1a |= 0x3f & _0x17a9d3[_0x2a4fe4 + 0x4],_0x58689c += String['fromCharCode'](_0x491f1a),_0x2a4fe4 += 0x5) : 0xf0 === (0xf0 & _0x1403b1) ? (_0x491f1a = (0xf & _0x17a9d3[_0x2a4fe4]) << 0x12,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x1]) << 0xc,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x2]) << 0x6,_0x491f1a |= 0x3f & _0x17a9d3[_0x2a4fe4 + 0x3],_0x58689c += String['fromCharCode'](_0x491f1a),_0x2a4fe4 += 0x4) : 0xe0 === (0xe0 & _0x1403b1) ? (_0x491f1a = (0x1f & _0x17a9d3[_0x2a4fe4]) << 0xc,_0x491f1a |= (0x3f & _0x17a9d3[_0x2a4fe4 + 0x1]) << 0x6,_0x491f1a |= 0x3f & _0x17a9d3[_0x2a4fe4 + 0x2],_0x58689c += String['fromCharCode'](_0x491f1a),_0x2a4fe4 += 0x3) : 0xc0 === (0xc0 & _0x1403b1) ? (_0x491f1a = (0x3f & _0x17a9d3[_0x2a4fe4]) << 0x6,_0x491f1a |= 0x3f & _0x17a9d3[_0x2a4fe4 + 0x1],_0x58689c += String['fromCharCode'](_0x491f1a),_0x2a4fe4 += 0x2) : (_0x58689c += String['fromCharCode'](_0x17a9d3[_0x2a4fe4]),_0x2a4fe4 += 0x1);return _0x58689c;
}
function _0x4176cc(_0x529333) {const _0x2bc465 = atob(_0x529333), _0x5384be = new Int8Array(_0x2bc465['length']);for (let _0x41c9e8 = 0x0; _0x41c9e8 < _0x2bc465['length']; _0x41c9e8++)_0x5384be[_0x41c9e8] = _0x2bc465['charCodeAt'](_0x41c9e8);return _0x5384be;
}
function _0x58b5da(_0x512f6f) {return _0x300484(_0x476691(_0x4176cc(_0x512f6f)));
}var content = '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';
var data = JSON.parse(_0x58b5da(content));
console.log(data);

解密结果:

{currPage: 2,list: [{ t: 2, w: 2560, h: 1440, i: '265410565e874f71a09db1d35689f8cd' },{ t: 2, w: 3840, h: 2160, i: '71e52c67f5094e44b92ccaed93db15c5' },{ t: 1, w: 3840, h: 2160, i: '2ed7cfb8882411ebb6edd017c2d2eca2' },{ t: 2, w: 3840, h: 2160, i: 'a9982f7441bd4e07a3b1a26af43457d9' },{ t: 2, w: 1920, h: 1080, i: 'c5398839880411ebb6edd017c2d2eca2' },{ t: 2, w: 4996, h: 3392, i: '73c31ad1881611ebb6edd017c2d2eca2' },{ t: 2, w: 3840, h: 2160, i: 'c586cac74b474b5ea5458a046e8b14c0' },{ t: 2, w: 2562, h: 1459, i: 'c89083824f074c0bad71a976de306a83' },{ t: 2, w: 2735, h: 1632, i: '6355071687f84cfcb2cb002f9073f5a4' },{ t: 2, w: 3840, h: 2160, i: '86040f2d880811ebb6edd017c2d2eca2' },{ t: 2, w: 1920, h: 1440, i: 'ac20ee62882611ebb6edd017c2d2eca2' },{ t: 2, w: 3500, h: 2333, i: '19a4c26f880511ebb6edd017c2d2eca2' },{ t: 2, w: 7680, h: 4320, i: 'b3eb9d03e5704f619f3fe55d809568ce' },{ t: 2, w: 3833, h: 2270, i: '0d7d8d691e644989b72ddda5f695aca2' },{ t: 2, w: 3840, h: 2160, i: '3f878fc75ad84405bffa29a309238655' },{ t: 2, w: 1920, h: 1080, i: '45663c9f2ce54eb2ae8628efb0c43390' },{ t: 2, w: 4500, h: 2800, i: '0c0f3f16880511ebb6edd017c2d2eca2' },{ t: 2, w: 7680, h: 4320, i: '78dc5761ab8c4b55b940967ae24ebe3a' },{ t: 1, w: 4276, h: 2160, i: '792a4b6934fc491b81342206e3192e59' },{ t: 2, w: 5628, h: 2880, i: '24aea7a7f9b6478698b6f8cdd6a016e0' },{ t: 1, w: 2560, h: 1440, i: '0494e945880511ebb6edd017c2d2eca2' },{ t: 2, w: 4435, h: 2951, i: '020a1051d89f40bd92ad4ce455860ff5' },{ t: 2, w: 6000, h: 3375, i: 'c85ca642880411ebb6edd017c2d2eca2' },{ t: 2, w: 2560, h: 1440, i: '5268d877a2a04864b36b4961ab793f4f' }],number: 1707926400,pageSize: 24,totalCount: 41581,totalPage: 1733
}
拼接图片下载URL

url:https://api.zzzmh.cn/bz/v3/getUrl/ + 图片ID

请求url——>解析Response Headers取出 Location字段的值,至此,大功告成

原创声明:未经许可,不得转载。
如有侵权,请联系作者删除删除。

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

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

相关文章

AnimatedDrawings:让绘图动起来

老样子&#xff0c;先上图片和官网。这个项目是让绘制的动画图片动起来&#xff0c;还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹&#xff0c;启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…

react18介绍

改进已有属性&#xff0c;如自动批量处理【setState】、改进Suspense、组件返回undefined不再报错等 支持Concurrent模式&#xff0c;带来新的API&#xff0c;如useTransition、useDeferredValue等 如何升级React 18 npm install reactlatest react-domlatestnpm install ty…

VS2022 在非Qt项目中引用QString、QList等方法

目录 一、新建项目 二、拷贝 三、工程属性设置 四、测试 一、新建项目 在VS中创建了一个c控制台项目&#xff0c;会默认打印“Hello world”&#xff1b; 二、拷贝 需要拷贝的包括QtCore相关的lib, dll, 以及头文件&#xff1b; 1、lib文件 在下述qt安装路径下拷贝Qt5…

[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

07章【常用类库API】

字符串操作 String类 String可以表示一个字符串。String类实际是使用字符数组存储的。 String类的两种赋值方式&#xff1a; 一种称为直接赋值&#xff1a; String name “小白” 通过关键字new调用String的构造方法赋值 String name new String(“小白”)String类的两…

【Github】作为程序员不得不知道的几款Github加速神器

背景 众所周知&#xff0c;近几年国内用户在访问Github时&#xff0c;经常间歇性无法访问Github。 接下来推荐几款 作为程序员不得不知道的Github加速神器。 推荐1&#xff1a;FastGithub FastGithub是一款Github加速神器&#xff0c;解决github打不开、用户头像无法加载、r…

【数据结构和算法】--- 二叉树(3)--二叉树链式结构的实现(1)

目录 一、二叉树的创建(伪)二、二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历 三、二叉树节点个数及高度3.1 二叉树节点个数3.2 二叉树叶子节点个数3.3二叉树第k层节点个数3.4 二叉树查找值为x的节点 四、二叉树的创建(真) 一、二叉树的创建(伪) 在学习二叉树的基本操作前…

Unity Text超框 文字滚动循环显示

Unity Text超框 文字滚动循环显示 //container Text using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.UI;public class AutoScrollText : MonoBehaviour {private Text[] _texts new Text[…

MATLAB字符串编辑常用代码

1.字符串赋值 % 字符串赋值 sabcdefg 2.字符串属性和操作 (1)获取字符串长度 sabcdefg;% 字符串赋值 length(a) % 获取字符串长度 (2)连接字符串 % 连接两个字符串,每个字符串最右边的空格被裁切 s1a s2b s3strcat(s1,s2) 3.字符串比较 % strcmp 比较两个字符串是…

9. UE5 RPG创建UI(下)

在上一篇文章里&#xff0c;制作了显示血量和蓝量的ui&#xff0c;并且还将ui和获取数据使用的控制器层创建出来并初始化成功。现在只有主用户控件上面被添加了控制器层&#xff0c;还未给每个用户控件赋予控制器层。接下来要实现对属性的广播功能&#xff0c;在属性值变化的时…

gitlab.rb主要配置

根据是否docker安装,进入挂载目录或安装目录 修改此文件,我一般是在可视化窗口中修改,有时候也在命令行手敲 将下面的配置复制到该文件中 external_url http://192.168.100.50 # nginx[listen_port] = 8000 (docker安装的这一行不需要,因为端口映射导致此处修改会导致访问…

2024茶饮品牌如何出圈,媒介盒子分析

随着新式茶饮的消费场景更加多元化&#xff0c;品类不断拓宽&#xff0c;消费者对新式茶饮的热情也是只增不减。居民可支配收入水平不断上升&#xff0c;居民消费升级为新式茶饮的发展也提供了良好基础&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;2024茶饮品牌如何出圈…

win10系统 pdf 文件无法正常预览

网上也看了不少办法&#xff0c;修改注册表什么的&#xff0c;太麻烦了&#xff0c;尝试了一下下载Adobe Acrobat Reader&#xff0c;安装后就可以成功预览显示啦&#xff01;对&#xff0c;就是这么简单&#xff01;Adobe Acrobat Reader下载链接&#xff1a;link

随机森林中每个树模型分裂时的特征选取方式

随机森林中每个树模型分裂时的特征选取方式 随机森林中每个树模型的每次分裂都是基于随机选取的特征子集进行分裂的。 具体来说&#xff0c;对于每个决策树&#xff0c;在每个节点的分裂过程中&#xff0c;随机森林算法会从原始特征集合中随机选择一个特征子集&#xff0c;然…

vulhub之Zabbix篇

CVE-2016-10134--SQL注入 一、漏洞介绍 zabbix是一款服务器监控软件&#xff0c;其由server、agent、web等模块组成&#xff0c;其中web模块由PHP编写&#xff0c;用来显示数据库中的结果。 漏洞环境 在vulhub靶场进行复现&#xff0c;启动zabbix 3.0.3。 二、复现步骤 1…

[代码随想录2]51单片机1T/12T到底怎么选?

为什么说51单片机怎么选&#xff1f; 时至今日&#xff0c;44年来51单片机自强不息&#xff0c;怎么描述它&#xff0c;堪称控制芯片中的王者&#xff01;&#xff01;&#xff01; 假设你21岁大学毕业进入社会&#xff0c;交社保交到今天恭喜你成功退休了214465 传统即标准5…

搭建一个简单的Spring Demo

要学习Spring 源码&#xff0c;一个是从Spring GitHub 上去down源码&#xff0c;然后倒入IDEA编译&#xff0c;但这种方法费时费力&#xff0c;如果你不需要对Spring 源码进行修改后&#xff0c;再编译的话&#xff0c;直接搭建一个Spring Demo 的Maven项目&#xff0c;引入Spr…

代理设计模式JDK动态代理CGLIB动态代理原理

代理设计模式 代理模式&#xff08;Proxy&#xff09;&#xff0c;为其它对象提供一种代理以控制对这个对象的访问。如下图 从上面的类图可以看出&#xff0c;通过代理模式&#xff0c;客户端访问接口时的实例实际上是Proxy对象&#xff0c;Proxy对象持有RealSubject的引用&am…

使用DockerFile构建镜像与镜像上传

目录 前言&#xff1a;为什么要使用Dockerfile &#xff1f; DockerFile构建镜像 1、构建基础对象 2、Dockerfile文件结构 3、构建Dockerfile文件镜像 二、镜像上传&#xff08;阿里云&#xff09; 前言&#xff1a;为什么要使用Dockerfile &#xff1f; 首先Dockerfile …

IOS-生命周期-Swift

目录 App生命周期应用状态未运行——Not running未激活——Inactive激活——Active后台——Backgroud挂起——Suspended 关系图生命周期方法相关方法注意在其他地方监听 ViewController生命周期UIView生命周期 App生命周期 应用状态 App主要有五种状态&#xff0c;分别是&…