web逆向-多层加密

逆向解析CTFshow中的Base64多层嵌套加密挑战 本文以CTFshow平台的一道Web安全挑战为例,详细解析了Base64多层嵌套加密的逆向过程。通过拆解前端JavaScript加密逻辑,逐步演示如何从最终密文逆向推导原始输入,并利用Python脚本进行自动化爆破。文章揭示了依赖前端加密进行安全验证的脆弱性,强调了服务端安全校验的重要性。 阅读详情
AI摘要

本文围绕Web逆向多层加密展开,先对加密货币数据分析数据进行抓包,发现数据接口返回结果加密。接着介绍定位解密函数位置的方法,以拦截器为例找到解密函数。还分析核心代码,明确解密步骤,识别出AES加密,解决解压包问题,最后给出Python和JS代码。

0 声明

本文章仅供技术交流

1 抓包

脱敏网址:aHR0cHM6Ly93d3cuY29pbmdsYXNzLmNvbS96aA==
首先明确下要抓取的数据:加密货币数据分析
在这里插入图片描述
打开开发者工具,抓一下包看一下
可以看到数据接口是通过XHR加载,并且返回结果进行了加密

2 思路

0x01 定位解密函数位置

其实思路是比较多的,比如打XHR断点或者是使用decrypt(定位解密函数,亦或者使用我们常用的拦截器,
这里就以拦截器为例:
在代码里搜索interceptors.response.use,可以发现只有一处,直接打上断点
经过翻页,断住断点,发现这个函数传入的t中包含我们需要的加密函数,但是经过Yt函数后从密文变成了明文,所以判定此函数为解密函数
在这里插入图片描述

0x02 阅读并分析核心代码

阅读代码发现主要经过了三步,1. 先通过一系列方式生成一个参数n,2. 把第一步生成的参数n和参数t.headers.user传入解密函数Yt,得到一个参数n,3. 把第二步生成的参数n和t.data.data再次传入解密函数Yt得到解密后的结果
通过控制台输出打印t,可以看到t.data为接口返回的加密数据,t.headers为接口的请求headers数据
接下来看一下解密函数Yt是什么:

var Yt = function(t, e) {
    var n = function(t) {
        var e, n = Gt.ZP.inflate(new Uint8Array(t.match(/[\da-f]{2}/gi).map((function(t) {
            return parseInt(t, 16)
        }
        )))), r = "", i = 16384;
        for (e = 0; e < n.length / i; e++)
            r += String.fromCharCode.apply(null, n.slice(e * i, (e + 1) * i));
        return r += String.fromCharCode.apply(null, n.slice(e * i)),
        decodeURIComponent(escape(r))
    }(qt.AES.decrypt(t, qt.enc.Utf8.parse(e), {
        mode: qt.mode.ECB,
        padding: qt.pad.Pkcs7
    }).toString(qt.enc.Hex));
    return '"' == n.charAt(0) && (n = n.substring(1, n.length)),
    '"' == n.charAt(n.length - 1) && (n = n.substring(0, n.length - 1)),
    n
};

第一眼看到AES加密,模式为ECB,填充为Pkcs7,那么分析一下qt,发现其和node中的crypto-js完全相同
第二眼看到有个Gt.ZP.inflate,如果要补这个函数的环境,发现要补很久,涉及到很多函数的调用,经过大佬指点得知这是一个解压用的包,其可使用pako来替代,因为这个包比较陌生,搜了一下这个包
在这里插入图片描述
至此,已经大概解决了代码,拿到本地运行,发现能得到正常结果
在这里插入图片描述

3 代码

python代码:

import requests, execjs, time

headers = {
    "accept": "application/json",
    "accept-language": "zh-CN,zh;q=0.9",
    "cache-control": "no-cache",
    "cache-ts": str(int(time.time() * 1000)),
    "encryption": "true",
    "language": "zh",
    "origin": "https://www.coinglass.com",
    "pragma": "no-cache",
    "priority": "u=1, i",
    "referer": "https://www.coinglass.com/",
    "sec-ch-ua": "\"Chromium\";v=\"136\", \"Google Chrome\";v=\"136\", \"Not.A/Brand\";v=\"99\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-site",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
}
url = "https://capi.coinglass.com/api/home/v2/coinMarkets"
params = {
    "sort": "",
    "order": "",
    "keyword": "",
    "pageNum": "1",
    "pageSize": "20",
    "ex": "all"
}
# 网站需要挂代理才能访问
proxies = {
    "http": "http://127.0.0.1:7890",
    "https": "http://127.0.0.1:7890",
}
response = requests.get(url, headers=headers, params=params, proxies=proxies)
# print(response)

arg1 = '/api/home/v2/coinMarkets'
arg2 = response.headers.get('user')
arg3 = response.json()['data']

res = execjs.compile(open('./demo.js', 'r', encoding='utf-8').read()).call("decrypt", arg1, arg2, arg3)
print(res)

JS代码:

const qt = require("crypto-js");
const pako = require("pako");

var Yt = function(t, e) {
    var n = function(t) {
        var e, n = pako.inflate(new Uint8Array(t.match(/[\da-f]{2}/gi).map((function(t) {
            return parseInt(t, 16)
        }
        )))), r = "", i = 16384;
        for (e = 0; e < n.length / i; e++)
            r += String.fromCharCode.apply(null, n.slice(e * i, (e + 1) * i));
        return r += String.fromCharCode.apply(null, n.slice(e * i)),
        decodeURIComponent(escape(r))
    }(qt.AES.decrypt(t, qt.enc.Utf8.parse(e), {
        mode: qt.mode.ECB,
        padding: qt.pad.Pkcs7
    }).toString(qt.enc.Hex));
    return '"' == n.charAt(0) && (n = n.substring(1, n.length)),
    '"' == n.charAt(n.length - 1) && (n = n.substring(0, n.length - 1)),
    n
};

function decrypt(arg1, arg2, arg3) {
    n = btoa("coinglass".concat(arg1, "coinglass"));
    n = n.substring(0, 16)
    result1 = Yt(arg2, n)
    result2 = Yt(arg3, result1)
    return result2
}
逆向分析SHA1加密登录接口:从抓包到Python复现的完整指南 哈希算法是保障数据传输安全的基础技术之一,其中SHA1作为一种经典的哈希函数,通过将任意长度的输入转换为固定长度的输出,确保数据的完整性和不可逆性。在Web安全与系统集成领域,理解哈希原理对于实现安全认证、数据校验至关重要。然而,当面对第三方系统采用自定义SHA1加密流程的登录接口时,开发者常需通过逆向分析来复现其逻辑,以满足自动化测试或系统对接需求。本文聚焦于**SHA1加密**与**接口逆向**,详细拆解如何利用浏览器开发者工具定位前端加密代码,并通过Python的hashlib库精准复现包含盐值拼接、 阅读详情

相关推荐

WASM加持Web反调试:多层混淆加密、动态加载与内存隔离熔断机制

<think>我们根据要求生成≤150字的文章摘要。需要概括主要内容:多层混淆加密、WASM加载解密、内存隔离、本地熔断,以及收益局限。控制在150字内。</think>本文介绍Web前端安全对抗的第三篇,聚焦模块加密混淆、WASM动态加载、内存隔离与本地熔断。通过控制流扁平化、字符串加密等混淆,叠加AES-GCM+RSA加密,并将解密逻辑置于WASM独立内存,防止密钥泄露;异常时触发熔断销毁敏感数据。方案提高逆向成本,但存在性能开销,需配合后端校验。

weixin_42268042的博客 155

某coinglass加密货币爬虫分析

接下来就是扣js,上拉发现网站是webpack,懒得去分析扣了,直接全搂了,进行抓包分析,发现数据是这个接口中返回的,并且数据是经过加密处理的。进行跟栈发现是由一个Yt的函数进行解密的,并且得到了明文信息。接下来找个json在线格式化网站慢慢提取需要的数据就ok了。进去以后打上断点发现加密位置就在这里,并且返回了明文信息。全局搜索.decrypt发现一个可疑的地方点进去。最后py调用得到解密后的数据。

qq_65135598的博客 1939

京东滑块验证码逆向实战:从JS加密到轨迹模拟的完整破解方案

在Web自动化与数据采集领域,验证码是常见的安全屏障,其核心原理是通过人机交互验证来区分真实用户与自动化脚本。其中,滑块验证码作为一种主流形式,结合了图像识别、行为分析和前端加密技术,旨在提升自动化破解的难度。从技术实现角度看,它通常涉及非对称加密(如RSA)和对称加密(如AES)来保护传输数据,并通过轨迹分析算法检测模拟行为是否具备人类特征。理解这些底层机制对于开发高成功率的自动化解决方案具有重要价值,尤其在电商数据采集、自动化测试等场景中。本文以京东滑块验证码为例,深入剖析其完整的逆向流程,涵盖抓包分析

weixin_34198881的博客 415

安卓逆向百例十-币xcoin

我们从中可以发现 其实就是 结果 加了一个d 对吧,但是我们通过观察 logcat 和 抓包会发现有的时候是大写 有的时候是小写而且规律也不一样。有位老哥 经过炒币失败后想做一个这种查询接口的app,但是苦于他的资金比较紧缺,就给我几百块,但是架不住苦苦哀求,我就做了,顺便当个案例。的值选择一个函数指针,并根据不同的条件设置函数的参数和值。,这是 Android 提供的一个工具,用于实时查看系统和应用程序的日志。代码的目的是根据不同的条件选择合适的处理函数,并在每次调用后更新。

A_fanyifan的博客 2905

滑块验证码逆向与风控分析:从缺口识别到加密参数破解实战

滑块验证码作为现代Web安全中常见的人机交互验证机制,其核心原理在于通过图像识别和行为轨迹分析来区分人类用户与自动化脚本。从技术实现层面看,它通常涉及前端资源动态加载、缺口位置计算、拟人化轨迹生成以及关键参数的加密传输。这种机制的技术价值在于构建了多层防御体系,不仅作为显性挑战,更充当了隐性的行为指纹采集器,广泛应用于金融、社交、电商等平台的登录、注册及敏感操作场景,以防范恶意爬虫和自动化攻击。本文以某财经资讯平台为例,深入剖析了其滑块验证的完整风控链路,重点探讨了如何通过图像处理技术进行缺口定位,并设计拟

weixin_34062469的博客 399

JS逆向破解加密实战(宝塔篇)

本文是对宝塔搭建网站的前端加密破解实战,不要错过,学到就是赚到。

m0_68868181的博客 3243

5 分钟上手 CoinGlass API

如果你在做量化交易、行情分析,或者想系统性研究加密衍生品数据,那 CoinGlass API 基本是绕不开的工具。它也是目前加密市场中使用最广泛的衍生品数据 API 之一,被大量用于量化交易、风险监控和市场研究。这篇文章的目标很简单: 👉 5 分钟内,让你完成 CoinGlass API 的基础接入。简单来说,CoinGlass API 提供的是稳定、结构化、可程序化访问的加密市场数据。你可以把它理解为: 把 CoinGlass 上的核心数据,直接接进你自己的系统。一、什么是 CoinGlass API?

m0_38016714的博客 906

py每日实战之某coinglass逆向js代码

【代码】py每日实战之某coinglass逆向js代码。

我不是码农的博客~~~ 854

python爬虫MD5加密案例:某区块链行情和资讯的平台

声明:该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。

老衲爱洗头的博客 1304

KS滑块验证码加密算法拆解:从轨迹采集到设备指纹的逆向实践

滑块验证码是现代Web安全中常见的人机校验机制,其核心并不在于单个加密参数的强度,而在于对用户行为数据、设备环境信息与加密上报链路的综合校验。从技术原理看,一次完整的滑块验证包含行为轨迹采集、浏览器指纹生成、参数序列化与AES等加密处理,最终提交服务端进行多维度风控判定。理解这一数据流,有助于开发者从工程角度构建更稳健的自动化方案,也能为安全测试与反爬实践提供参考。本文从滑块验证码的防护目标出发,拆解请求链路、轨迹生成逻辑、设备指纹采集方式以及加密参数的常见混淆手法,并结合源码级模拟思路与真实调试中的典型问

weixin_29324877的博客 335

在win10-wsl2(ubuntu)中安装jlink

在 官方下载linux版本的deb包拷贝到ubuntu的/home目录下(其他目录也可以),进行安装然后提示很多依赖缺失的错误,此时执行自动安装需要的依赖包再次重新安装就可以啦查看是否安装成功,输入JLink 再按下两次Table键,是否如下所示这样表示安装成功了。

yaq_30401的博客 3136

CTF Web安全:三类JS加密逆向实战与工具指南

在Web安全与CTF竞赛中,JavaScript加密是常见的考察点,其核心在于理解前端代码逻辑与数据编码原理。不同于复杂的密码学算法,这类加密通常基于字符编码转换、自定义位运算或浏览器环境特性实现,旨在考察选手的代码分析与逆向工程能力。其技术价值在于提升对前端安全机制、数据传输保护及代码混淆技术的认知。典型的应用场景包括CTF赛题中的登录认证绕过、参数破解与数据篡改。本文聚焦于字符编码变换、自定义运算混淆及环境依赖型加密三类高频模式,结合Base64、异或运算等热词,通过实战案例拆解,提供从在线工具验收到本

weixin_30596343的博客 369

RTOS任务调度原理:高优先级任务为何在低优先级任务执行时无法响应

实时操作系统(RTOS)的核心在于其确定性的任务调度机制,它通过优先级抢占确保关键任务及时执行。其基本原理是调度器仅在特定调度点(如任务主动阻塞、中断退出时)运行,比较就绪态任务的优先级并切换上下文。这一机制的技术价值在于为嵌入式系统提供可预测的响应时间,广泛应用于工业控制、汽车电子和物联网设备等对实时性要求高的场景。当低优先级任务执行**长时间非阻塞运算**且无中断发生时,调度器无法被触发,导致高优先级任务虽处于就绪态却无法获得CPU,造成系统响应延迟。理解**任务状态机**与调度点,是优化实时性、避免此

weixin_33508411的博客 287

网安挖洞必学!解决JS加密参数难题,Python联动MD5逆向破解登录漏洞

为什么别人随便挖洞就能拿赏金,你却连登录接口都测不动?90%的Web漏洞都被前端JS加密拦住!本篇文章结合真实实战场景,梳理漏洞挖掘基础常识、SRC挖洞规范与法律要点,手把手演示JS加密函数提取、execjs库报错修复、动态随机参数解密、Burp Suite爆破全套流程。摒弃空洞理论,全是可落地的实操步骤,新手看完直接摆脱不会解密、无法渗透的困境!

m0_56146626的博客 212

【论文笔记】Reaching agreement in the presence of faults (EIG)

1 问题定义 2 交互一致性 3 单点故障 m=1 n=4 4 多点故障(n&amp;gt;=3m+1) 计算过程 m=2 n=7 5 n&amp;lt;3m+1不能达成协定 6 带认证的算法 7 总结 这篇论文在1980年发表,是1982年著名的拜占庭将军问题论文的前身。作者Leslie Lamport是2013图灵奖得主,两篇论文引用次数分别为5000+和2000+。该论文提出的算法现在被...

zjwreal 2994

BurpSuite实战:5分钟搞定Pikachu靶场表单爆破(附最新字典配置技巧)

本文通过Pikachu靶场实战,详细演示了如何使用BurpSuite的Intruder模块对Web登录表单进行暴力破解。从代理配置、请求捕获、集束炸弹模式设置,到载荷配置与结果分析,提供了完整的操作流程。文中还分享了2024年有效的字典获取与优化技巧,帮助安全测试人员快速定位弱口令漏洞。

weixin_29327977的博客 599

攻防世界WEB(新手模式)2-5-web2

得到密文:n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf。得到密文:~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;得到密文:77`2d0af732d730646c918bfda5d37b_FTCSN{:gaclf。对整个结果进行 ROT13 替换(是字母替换,对字母 a-z/A-Z 移动13位,非字母不变。每个字符 ASCII 码加 1。进行 Base64 编码。3、base64解码。

你好 457

Eplan P8 API二次开发--插入符号(Symbol)功能(Function)并定义属性

1、目的 使用Eplan API在页中自动插入某个符号并按约定规则自动设置好属性 2. 步骤 一、基础信息 比如要在Eplan中自动插入一个电机的符号并定制属性,我们先要确定要插入的符号名,可以在Eplan中获取如下符号(Symbol)信息 可以知道我们待插入的符号名称为M3_1, 接下来,使用Visual Studio建立类库项目,并引用Eplan Api库 二、获取符号变量(SymbolVariant) 在Eplan中,当一个符号(Symbol)被插入到页中,这个符号的引用即变为一个(Function

如是道程序人生 4523

加密算法演进史:从Cookie加密看Web安全防御技术变迁

本文探讨了加密算法从早期XOR、Base64到现代混合加密策略的演进历程,重点分析了Cookie加密技术在Web安全防御中的关键作用。文章详细介绍了对称与非对称加密的结合、动态加密策略,以及未来量子加密与生物特征融合的趋势,为开发者提供了全面的Web安全技术洞察。

weixin_29296241的博客 266

【Claude】Not logged in · Please run /login 报错已解决

意味着 Claude Code 没有找到任何有效凭证。直接/login——交互式首选;检查——排查环境变量污染;CI 用——自动化场景标准方案;macOS Keychain 异常——/logout/login重置;时钟偏差——校准系统时间。参考:Claude Code 官方《错误参考》"身份验证"章节、官方认证优先级文档、社区 Token 过期排查记录。

博客 9973

MFC实现图书管理系统(附完整源码)

MFC实现图书管理系统(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 800

FastMoss加密签名逆向实战:从抓包到Python调用

在Web数据采集与接口安全领域,签名校验是常见的防护机制,它要求客户端为每个请求动态生成加密签名,以验证请求的合法性。理解签名生成原理,是爬虫开发者突破反爬限制、稳定获取结构化数据的关键。本文从基础概念出发,剖析签名机制的组成要素,包括时间戳、随机数与哈希算法的组合应用,并介绍其在电商数据监控、营销分析等场景中的技术价值。通过一个真实案例,展示了如何利用浏览器开发者工具定位加密入口,结合JavaScript调试还原签名逻辑,最终使用Node.js服务配合Python实现高效调用。文章还探讨了环境检测、参数遗

weixin_33700809的博客 370

Aip1640、TM1640驱动程序

本文介绍了AIP1640/TM1640驱动芯片的编程实现,主要包括硬件接口定义和通信协议函数。通过宏定义配置时钟(CLK)和数据线(DIO)的GPIO控制,实现了I2C协议的启动、停止、字节发送等基本操作。核心函数AIP1640_Disp_Drive()完成显示驱动流程:先发送0x40命令设置地址自增模式,再发送0xC0起始地址和16字节显示数据,最后设置亮度参数。文中还包含5微秒延时函数、显示数据缓冲区定义,以及LED和数码管(SMG)的位映射注释说明。该代码适用于控制LED数码管显示,支持亮度调节功能。

zqx的博客 1400

【Web逆向】某方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf

序列化 (Serialization) 是指将对象转换为字节序列的过程,在序列化期间,对象将其当前状态写入到临时或持久性存储区,以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。看到writeMessage,后面有serializeBinaryToWriter关键函数,跟进去,就能再次得到此message的结构层次,一样分析,就能得出完整结构。我们在e赋值的地方下断点,看看a怎么来的,重新调试一次,主要看a怎么构成的。ok,我们到这里已经把a怎么来的理解清楚了,也明白了前面5位是怎么来的。

皮埃尔的博客 2554

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【逆向篇】Web逆向WebPack结构分析

用需要找到这个加密代码段给扣下来,进行加密,方便我们写的爬虫或者采集工具去自动登录或者其他操作,一般前端加密代码一个难点是处理webPack打包结构的代码。webpack字如其名,实际上是网页代码的一种打包机制将多个js文件(也可以是其他类型文件,比如.png)统一打包为一个js文件,一个png文件当然如果是webpack多打包机制就会生成多个js文件最终目的肯定是为了压缩代码,提高代码执行效率。好几万行代码,如果是高手能直接复制要用到的代码就当我是p话。ok.这样我们就得到了webpack加载器的代码!

MAI44的博客 4121

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

前端加密与JS逆向攻防宝典:从原理到实战,掌握Web安全核心博弈技巧

摘要: 前端加密与JS逆向构成Web安全的攻防博弈。前端加密通过哈希(如SHA256加盐)、对称加密(AES-CBC/GCM)和非对称加密(RSA)保护传输数据,需结合后端校验实现纵深防御。JS逆向则通过抓包、反混淆和调试还原加密逻辑,应用于合法场景如安全测试。未来趋势包括Web Crypto API、同态加密等技术的应用。开发者需平衡安全与性能,遵循合法合规原则,避免技术滥用。本文从算法原理、实战案例到工程化实践,提供系统化的技术解析与最佳实践指南。(150字)

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 2581

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: web逆向-解决某服务平台webpack的请求体加密和对返回结果解密
下一篇: web逆向-webpack代码自吐
我真看不懂代码
博客等级 码龄7年 189粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值