某乐网加密参数接口逆向分析(脱敏版)

某枝网接口headers参数 X-Itouchtv-Ca-Signature-wasm 加密逆向分析 分析wasm 阅读详情

声明


本文章中所有内容仅供学习交流使用,不得用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。

若擅自使用本文讲解的技术而导致的任何意外,作者均不负责。文中若有侵权内容,请立即联系作者删除!

Ⅰ:目标


  1. 网址:aHR0cHM6Ly9kZW1vLmQuY24vYXV0aC9nb0xvZ2luLmh0bWw=
  2. 接口:aHR0cHM6Ly9kZW1vLmQuY24vYXV0aC9sb2dpbj9kaXNwbGF5PXdlYiZuYW1lPTEzNXh4eHh4eHh4JnB3ZD1iMjkyNzI4MTUyMGViLi4u
  3. 目标:请求参数 pwd reqId 【关于验证码的参数暂时不管】

Ⅱ:抓包分析


  1. 通过抓包分析查看,请求参数 pwd 和 reqId 是加密的,我们需要逆向分析出2个参数的加密逻辑,复刻其算法。在这里插入图片描述

  2. 首先想看 pwd 的算法,我们先查看调用栈是什么情况?我们可以看到前面3个看着是 jquery 库,但是我们不知道里面是否被魔改过?此时我们可以先判断没有魔改,就是原生的库,那我们在 goLogin.html 处打上断点,如果在此处的js文件中还没有加密完成,那么就有可能对 jquery 库魔改,这个时候我们再去分析。此时我们重新发送请求。在这里插入图片描述
    在这里插入图片描述

  3. 可以看到其中 submitData 变量中确实有我们的加密参数,那么我们就需要向上查找 submitData 在什么时候给 pwd reqId 赋值的。我们可以在此文件中搜索。在这里插入图片描述

  4. 此时发现 submitData 只有4处使用,但是可以发现 pwd 有2处赋值,但是它们都是由 rsaPwd 变量来的,所以此时我们需要查看rsaPwd 是如何赋值来的,我们需要进行搜索查找。在这里插入图片描述

  5. 通过查找分析只有 rsaPwd = rsa(passwordVal);这一句看着很像加密的过程,此时我们可以在此打上断点,重新发送请求。在这里插入图片描述在这里插入图片描述

  6. 观察得知,passwordVal 刚好就是我们输入的密码明文,我们在控制台调用 rsa 函数也确实得到了我们的之前加密的密文,那么就肯定 rsa就是 pwd 的加密函数,此时我么就要分析 rsa 函数的逻辑,直接进入该函数,并打上断点并释放断点。在这里插入图片描述

  7. 我们很清楚的看到,代码注释也写了是密码的加密,那就没问题,现在最主要就是看它的逻辑,通过代码的分析与经验可以知道,他是一套很古老的 rsa 加密算法,可以参考 https://ohdave.com/rsa/ ,他需要 RSA.js require BigInt.js and Barrett.js. ,我们直接把这个3个js文件放在一起一个js文件,但是外部要使用其中的方法,要导出需要使用的方法,我是这样写的,如图。在这里插入图片描述

  8. 接着我们就需要复刻加密的js的代码,并且验证。在这里插入图片描述

  9. 通过验证发现,加密算法无误,到此 pwd 的加密算法就搞定了,接着就看 reqId 的算法。

  10. 既然 pwd 是在该js文件生成,那么reqId是不是也在该文件有所表现,我们可以直接搜索 reqId 被赋值的地方。【小技巧:对于我们把js代码格式化后,那么赋值可能就会存在这样的格式 reqId :xxx 或者 reqId = xxx】 在这里插入图片描述
    在这里插入图片描述

  11. 我们可以看到可以看到有2处都有可能生成为 reqId 赋值,他们都是调用 getData3 方法返回的结果取出 reqId 赋值,我们可以在2处打上断点,要想执行到 getData3 方法,可以刷新网页或者登录状态不为9999,此时,我们通过刷新网页来实现,上面代码分析可以知道,当用户名存在,并且鼠标在密码框聚焦时则会触发 getData3 方法。在这里插入图片描述

  12. 我们直接进入 getData3 方法内,可以看到他 ajax 是发送了另一个请求获取 reqId 的。在这里插入图片描述

  13. 到此,我们本次的对 pwd reqId 的算法就分析完毕。当然还可以根据xh断点、关键字搜索等等方法去分析。

Ⅲ:总结


本次的调试过程还算是简单的,主要是这个古老的RSA算法,大家可以记住他的特点,之后就可以直接使用。对于其他的值,我们不一定非要觉得它就是加密的,有可能就是前面的接口返回的。需要具体调试,公众号【逆向学习日记】回复【某乐网】获取地址。

app逆向--获取验证码参数param加密过程(脱敏版) 到此为止,本案例的param加密逻辑就彻底完成,其实没什么难度的,只要找对了关键点,后面的逻辑基本就是明文,注意的是:在还原代码的时候要注意转成json字符串的点以及发送请求时param中关键字符转义的事。需要具体调试,公众号【逆向学习日记】回复【param v1.1.1】获取地址。 阅读详情

相关推荐

某验四代滑块验证码参数逆向分析

某验4代验证码参数逆向分析

m0_38098782的博客 2556

JS逆向入门案例4——某数据服务平台数据爬取

JS逆向入门案例4——某数据服务平台数据爬取

m0_56535661的博客 1385

【js逆向学习】数美滑块逆向流程、滑块识别和加密参数分析 附源码

大家先仔细观察下面两幅图就会发现最后还有坑在等着我们识别滑块距离的时候有一个大坑,我们请求拿到的图片的尺寸是600*300,但是前端的尺寸是300*150,所以滑块实际距离=识别结果 / 2,不除以2是过不去的😂,需要源码的私信我。

学海无涯 1297

逆向 解密接口信息(附Demo)

以实战讲解,主要以思路为主

码农研究僧的博客 1080

某度接口sig、shaOne逆向

某度注册状态查询接口逆向分析,加密算法提取

2301_77189077的博客 1856

【JS逆向学习】马蜂窝 cookie 加密(加速乐)

然后我们观察下获取到实际内容的第三次请求,可以看到是。最后,第三次请求带上第二步生成的两个参数。我们下来分析第一次请求,按照如下方式复制。可以看到通过第二次请求,我们可以拿到。同上继续分析第二次请求,返回值如下。老规矩,先分析网络请求。我们使用抓包工具来看下。,就可以拿到最终结果。

学海无涯 1384

数据加密:使用aes对接口数据进行可逆加密

PHP可以通过多种方式对数据进行加密处理,今天我们来说下aes加密和aes解密。 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图: aes加密代码: /** * aes加密 * @param $str * @return string */ function aesEncrypt($str,$ak,$sk) { r.

简庆旺同学 608

gnuradio+b210实现FM收音机

gnuradio+b210实现FM收音机环境介绍FM接收1 Flow Graph2 变量参数FM发射1 Flow Graph 环境介绍 Name Version gnuradio 3.7.14.0 uhd 3.15.0.0 ubuntu 18.04 usrp b210 参考 https://www.ijedr.org/papers/IJEDR1702038.pdf Audio File Transmission using GNURADIO and USRP FM接

u011745228的博客 5126

js逆向--某会展中心--请求参数data加密以及响应体解密逆向分析(脱敏版)

好了,本次的分析过程到此结束,如果说从最后发送请求的调用栈开始分析,可能存在难度,这时我们就要根据现象来采用不用的方式来定位位置。需要具体调试,微信公众号【逆向学习日记】回复【某会展中心】获取地址。

SC201204的博客 1481

Protege本体建模实战:从零构建电影知识图谱并导入Neo4j

本体建模是知识图谱构建的基石,通过类、属性、实例和约束系统描述领域知识,为数据提供可复用的语义骨架。OWL作为本体描述语言的标准,配合Protege工具可实现可视化建模,并借助推理机验证逻辑一致性,提升模型可靠性。在工程落地中,本体模型常需导入图数据库如Neo4j,以支持高效的关联查询与业务应用。本文以影视领域为背景,完整演示Protege中定义类层级、创建对象/数据属性、填充实例,以及导出OWL文件并通过Python脚本转换为Neo4j节点与关系的全过程,同时梳理命名空间、匿名节点、编码等易踩坑点,帮助读

weixin_29047545的博客 281

斗罗大陆叙事体系与战斗系统设计解析

在文学创作与游戏设计中,世界观构建和战斗系统设计是两大核心技术要素。世界观作为故事发生的背景框架,需要融合东西方文化元素并建立量化标准,如《斗罗大陆》中武魂觉醒与魂环等级体系。战斗系统则需突破简单数值对抗,发展出武魂特性、魂技组合与环境互动的三维体系,其中魂导器技术的引入展现了科技与魔法的创新融合。这些设计原理在RPG游戏开发、网络文学创作等领域具有广泛应用价值,特别是对需要长期运营的IP作品,完善的系统设定能有效支撑剧情延展与商业化开发。本文以现象级作品为例,剖析其武魂拟态理论和魂师工业化构思如何成就经典

weixin_29291069的博客 250

某平台登录--请求参数pwd逆向分析(脱敏版)

以上就是整个逆向分析过程,只要大家逆向的案例多了,有些就能一眼看出大概是什么加密以及关键加密函数位置的调用栈。需要具体调试网页,微信公众号【逆向学习日记】回复【某公众平台】获取地址。

SC201204的博客 1639

生成式引擎优化(GEO)- 搜索引擎优化

生成式引擎优化(GEO)是针对AI内容生成平台(如ChatGPT)的新型优化策略,旨在提升品牌内容在AI生成答案中的引用率,与传统SEO存在显著差异。GEO通过优化内容权威性、结构化和语义关联,适应AI的RAG技术架构,采用3C原则(可爬性、网络共识、反馈校正)提升内容可见性。其核心区别在于目标(引用率vs排名)、技术(语义优化vs关键词)及算法透明度(封闭vs开放)。适用场景包括商业决策、行业权威建设及公共知识服务,帮助品牌在AI时代占据信息主导权。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1401

【JavaScript 逆向】某升学助考网登录参数逆向,Hook + 跟栈

使用 Hook 注入及直接跟栈方式实现对某升学助考网登录加密参数的逆向

Yy_Rose的博客 3457

01-SA8155P 冷启动强制进入EDL模式

冷启动EDL模式

静虚待令,有物混成 3089

NET 实战:30 天搞定企业级 Web 订餐系统(附完整源码 + 数据库设计)

订餐流程:浏览菜品 → 选择菜品及数量 → 填写送餐地址 → 提交订单 → 数据库记录核心代码(绑定菜品列表):vb' 绑定菜单表到DataGrid控件,展示菜品信息user id=sa;' 查询菜品名称、价格、口味Dim adpt1 As New SqlDataAdapter("select cdishid,vdishname 菜品名称,cdishrate 价格,vdishdescription 口味 from dish", conn)End Sub用户体验优化。

m0_67740236的博客 1517

【JavaScript 逆向】521 加速乐多层响应 Cookie 逆向

AAEncode混淆、OB 混淆、加速乐、JS 文件替换、逆向

Yy_Rose的博客 5045

利用大规模生物活性挖掘,计算识别针对癌基因驱动蛋白 EGFR、BRAF 与 CDK4 的高亲和力抑制剂

背景:精准癌症治疗需要小分子抑制剂与致瘤蛋白靶点之间的精确匹配。方法:我们使用 Python 及 ChEMBL 数据库 API 开发了一套计算流程,系统性地筛选针对 EGFR、BRAF 与 CDK4 的高亲和力配体。对 IC50 < 1000 nM 的生物活性进行过滤,并检索候选化合物的分子结构(SMILES)以供后续优化。结果:本研究共识别出 [插入总数] 种独特化合物。其中,对 BRAF 激酶而言,我们挑选了一批 IC50 低至 6.0 nM 的高效实验性化合物。

u012133341的博客 96

【JS逆向】某土地市场网逆向分析

某土地市场网逆向分析,解锁debugger外的另一种反调试

weixin_71462234的博客 1460

从零到精通:BLDC电机驱动电路详解与设计思路

这套电机驱动电路从核心控制器到反馈采集模块,涉及了BLDC电机驱动的方方面面。每一个模块的设计和选择都需要综合考虑系统需求和实际使用环境。在实际应用中,很多细微的设计改进都会显著影响电机的运行性能。

weixin_43199439的博客 3102

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

某平台登录-账号密码逆向分析(脱敏版)

以上就是本次分析逆向的全过程,主要就是RSA算法,由于RSA算法结果会变化,只有通过模拟调用才能测试是否正确。需要具体调试,公众号【逆向学习日记】回复【某动】获取地址。

SC201204的博客 1806

温度PID控制PLC程序

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

【JS逆向百例】某赚网 WebSocket 套 Webpack 逆向分析

近期有粉丝私信,提到了某网站抓不到包的问题,之前还有不少新手粉丝提到不会 webpack。

K哥爬虫 1878

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

极验4消消乐验证码逆向笔记

本文分析了极验4消消乐验证码的逆向过程。通过抓包获取三个关键接口:获取captcha_id的JS文件、请求验证码的load接口和验证验证码的verify接口。重点研究了加密参数w的生成机制,并解析了消消乐验证码的解题算法,通过遍历3x3矩阵找出需要交换的元素对。最后提供了JS和Python代码实现验证码自动识别与提交。

冷雪言的博客 1077

【JS逆向案例】某五矿2024年网站请求参数逆向分析

【JS逆向案例】某五矿网站请求参数逆向分析,js逆向分析,2024年最新某五矿网站逆向参数解密请求数据分析。

2201_75645523的博客 2111

【JavaScript 逆向】拼多多 anti_content 参数逆向解析

拼多多 anti_content 参数逆向解析,补环境

Yy_Rose的博客 1万+

逆向分析SHA1加密登录接口

本文详细分析了某网站登录接口的密码加密过程。通过抓包和逆向分析,发现密码使用CryptoJS.SHA1进行加密。文章逐步展示了如何定位加密函数、提取关键代码并最终实现密码加密的完整过程。作者提供了完整的CryptoJS代码实现方案,包括SHA1加密算法核心代码,并演示了如何通过调用CryptoJS.SHA1()函数对明文密码进行加密。整个过程展示了前端加密的逆向分析方法和代码提取技巧,同时强调了仅用于学习交流的合法用途。

且做等春树,不做回头鸟 1306
上一篇: 测试一下啊
下一篇: 某库---请求头参数sign逆向分析(脱敏版)
一枚回归少年
博客等级 码龄6年 120粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值