进程创建流程

VT过游戏保护,调试有保护的游戏 VT过游戏保护,调试有保护的游戏。无视TP,HP,PP。 立即下载

;进程创建过程开始 CreateProcessA call   kernel32!CreateProcessA  ;10个参数 ; BOOL WINAPI CreateProcess( ;   __in_opt     LPCTSTR lpApplicationName, ;   __inout_opt  LPTSTR lpCommandLine, ;   __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes, ;   __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes, ;   __in         BOOL bInheritHandles, ;   __in         DWORD dwCreationFlags, NORMAL_PRIORITY_CLASS ;   __in_opt     LPVOID lpEnvironment, ;   __in_opt     LPCTSTR lpCurrentDirectory, ;   __in         LPSTARTUPINFO lpStartupInfo, ;   __out        LPPROCESS_INFORMATION lpProcessInformation ; ); ; 直接调用kernel32!CreateProcessInternalA call   kernel32!CreateProcessInternalA ; 12个参数,第一个与最后一个为零,中间10个延接了上面传入的10个参数 ; 主要任务是将ANSI字符转换成Unicode字符,很多代码用于了转换与检查,所以,直接用Unicode编程将大大增加执行效率   call   kernel32!CreateProcessInternalW ;  12个参数 ;  基本延续上面的 ;  第6个参数 and 0F7FFFFFFh

以下为kernel32!CreateProcessInternalW中的流程:

 call ntdll!ZwQueryInformationJobObject ;  ZwQueryInformationJobObjectretrieves information about a job object. ;  NTSYSAPI ;  NTSTATUS ;  NTAPI ;  ZwQueryInformationJobObject( ;  IN HANDLE JobHandle,           == 0 ;  IN JOBOBJECTINFOCLASS JobInformationClass,   == 4 ;  OUT PVOID JobInformation,         == Address ;  IN ULONG JobInformationLength,       == 4 ;  OUT PULONG ReturnLengthOPTIONAL       == 0 ;  ); ;  判断返回值是否为C0000022h (拒绝访问)  call kernel32!SearchPathW ;  进行路径搜索  call kernel32!GetFileAttributesW ;  获取文件属性  call kernel32!BasepIsSetupInvokedByWinLogon ;  判断是否WinLogon进程  call ntdll!RtlDosPathNameToNtPathName_U  call ntdll!RtlDetermineDosPathNameType_U ;  路径转换  call ntdll!NtOpenFile ;  打开文件  call ntdll!NtCreateSection ;  NtCreateSection( ;       OUT PHANDLE SectionHandle, ;       IN ACCESS_MASK DesiredAccess, ;       IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, ;       IN PLARGE_INTEGER MaximumSize OPTIONAL, ;       IN ULONG Protect, ;       IN ULONG Attributes, ;       IN HANDLE FileHandle OPTIONAL ;       ); ;  创建Section CreateFileMapping是对NtCreateSection的封装,所以在这一步,程序被映射进了内存  call kernel32!BasepIsProcessAllowed ;  就一个参数为Unicode进程名字 ;  其内部调用了RtlEnterCriticalSection进入临界区 ;  再调用NtOpenKey打开: ;  "/Registry/MACHINE/System/CurrentControlSet/Control/Session Manager/AppCertDlls" ;  解释: ;    AppCertDlls details. ;    Create in the "//Registry//MACHINE//System//CurrentControlSet//Control//Session Manager//AppCertDlls" ;     ;    The Key with name "AppSecDll" type REG_EXPAND_SZ, and put there, something like that "%SystemRoot%/system32/ .Dll" ... In fact, they may be there a lot, so keep this in mind. ;     ;    This yours DLL must have mandatory entry point with name CreateProcessNotify, and prototype as specified below. ;  结束 ;  最后调用RtlLeaveCriticalSection     call kernel32!BasepCheckBadapp ;  对进程行行兼容性检查 ;  1. IsShimInfrastructureDisabled ;  2. RtlAllocateHeap    NTDLL ;  3. __imp__memmove     ;  4. BaseCheckAppcompatCache    KERNEL32 ;    1. __SEH_prolog     ;    2. BasepShimCacheCheckBypass    KERNEL32 ;    3. BasepShimCacheLock    KERNEL32 ;    4. BasepShimCacheLookup    KERNEL32 ;    5. BasepShimCacheUnlock    KERNEL32 ;    6. __SEH_epilog ;  5. RtlFreeHeap    NTDLL ;  其中会加载: ;  call    kernel32!LdrLoadDllC:/WINDOWS/system32/Apphelp.dll ;  调用其中的“ApphelpCheckRunApp”  call kernel32!BasepCheckWinSaferRestrictions ;  1. RtlEnterCriticalSection    NTDLL ;  2. NtOpenThreadToken ;   NtOpenThreadToken  (  IN HANDLE  ThreadHandle,  == 0FFFFFFFEh(-2 当前线程) ;     IN ACCESS_MASK  DesiredAccess,       == 2000000h ;     IN BOOLEAN  OpenAsSelf,         == 1 ;     OUT PHANDLE  TokenHandle ;    )   ;   判断返值是否等于0C000007Ch(试图引用不存在的令牌)否跳走(跳走后的没跟,估计是跳向了NtSetInformationThread) ;   是则继续向下Call ;  3. NtOpenProcessToken ;   NtOpenProcessTokenEx  (  IN HANDLE  ProcessHandle,  == -1 当前进程 ;     IN ACCESS_MASK  DesiredAccess,         == 0ah ;     IN ULONG  HandleAttributes,  ;     OUT PHANDLE  TokenHandle ;    )  ;   判断返回值是否为0C0000022h(拒绝访问), ;   是跳走,否继续 ;  4. NtQueryInformationToken ;   NtQueryInformationToken  (  IN HANDLE  TokenHandle,   == 上面得到的句柄 ;     IN TOKEN_INFORMATION_CLASS  TokenInformationClass,  == 1 ;     OUT PVOID  TokenInformation,  ;     IN ULONG  TokenInformationLength,  ;     OUT PULONG  ReturnLength ;    )  ;  5. RtlInitializeSid  ;   RtlInitializeSid(    IN PSID  Sid, ;      IN PSID_IDENTIFIER_AUTHORITY  IdentifierAuthority, ;      IN UCHAR  SubAuthorityCount    ); ;  6. RtlSubAuthoritySid ;  7. RtlEqualSid ;  8. NtOpenKey "/Registry/MACHINE/System/CurrentControlSet/Control/SafeBoot/Option" ;   打开失败,继续打开下面的: ;   "/Registry/Machine/Software/Policies/Microsoft/Windows/Safer/CodeIdentifiers" ;   打开成功: ;   Call NtQueryValueKey 取"TransparentEnabled"项的值 ;   判断得到的值是否为零,不为零为设某变量为1 ;   Call NtQueryValueKey 取"AuthenticodeEnabled"项的值 ;   判断得到的值是否为零,不为零则跳转,我这里是零 ;  9. NtClose  ;  10. call kernel32!LdrLoadDll "ADVAPI32.DLL" ; 装入DLL ;  11. call kernel32!LdrGetProcedureAddress   ;获取下列API地址 ;   "SaferIdentifyLevel" ;   "SaferComputeTokenFromLevel" ;   "SaferCloseLevel" ;   "SaferRecordEventLogEntry" ;  12. NtClose  ;  13. call    kernel32!__security_check_cookie  call ntdll!ZwQuerySection ;  ZwQuerySection  (  IN HANDLE  SectionHandle,        == Section句柄 ;    IN SECTION_INFORMATION_CLASS  SectionInformationClass,    == 1 ;    OUT PVOID  SectionInformation,  ;    IN SIZE_T  Length,  ;    OUT PSIZE_T  ResultLength ;   )  call kernel32!LdrQueryImageFileExecutionOptions      ;  获取调试信息,映像劫持~ ;  LdrQueryImageFileExecutionOptions  (  IN PUNICODE_STRING  SubKey,   == "/??/E:/AAAAA.exe"进程名 ;    IN PCWSTR  ValueName,                  == "Debugger" ;    IN ULONG  Type,                    == 1 ;    OUT PVOID  Buffer,  ;    IN ULONG  BufferSize,  ;    OUT PULONG ReturnedLength  OPTIONAL ;   )   call kernel32!BasepIsImageVersionOk  call kernel32!LoadLibraryA  "advapi32.dll"  call kernel32!GetProcAddress "CreateProcessAsUserSecure"  call ntdll!ZwQuerySystemInformation  ;  ZwQuerySystemInformation( ;  IN SYSTEM_INFORMATION_CLASSSystemInformationClass,   == 47H == "SystemCreateSession" ;  INOUT PVOIDSystemInformation, ;  IN ULONGSystemInformationLength, ;  OUT PULONGReturnLength OPTIONAL ;  );   call kernel32!FreeLibrary  "advapi32.dll"  call kernel32!BaseFormatObjectAttributes  call ntdll!ZwCreateProcessEx   mov eax,30h   call ntdll!KiFastSystemCall  call ntdll!ZwSetInformationProcess ;  NtSetInformationProcess  (  IN HANDLE  ProcessHandle,  == ZwCreateProcessEx时得到的进程句柄 ;    IN PROCESSINFOCLASS  ProcessInformationClass,        == 12h == ProcessDefaultHardErrorMode             ;    IN PVOID  ProcessInformation,          == 2 == SEM_NOGPFAULTERRORBOX  ;    IN ULONG  ProcessInformationLength        == 2 ;   )   call kernel32!BasepSxsCreateProcessCsrMessage ;  1. BasepSxsGetProcessImageBaseAddress    KERNEL32 ;  2. RtlMultiAppendUnicodeStringBuffer    NTDLL ;  3. BasepSxsCreateStreams    KERNEL32 ;  4. BasepSxsIsStatusFileNotFoundEtc     ;  5. BasepSxsIsStatusResourceNotFound      call ntdll!NtQueryInformationProcess ;  ZwQueryInformationProcess( ;  IN HANDLE ProcessHandle,         == 进程句柄 ;  IN PROCESSINFOCLASS ProcessInformationClass,   == 0 == ProcessBasicInformation ;  OUT PVOID ProcessInformation, ;  IN ULONG ProcessInformationLength, ;  OUT PULONG ReturnLength OPTIONAL ;  );   call kernel32!BasePushProcessParameters ;  1. __SEH_prolog     ;  2. GetFullPathNameW    KERNEL32 ;  3. BaseComputeProcessDllPath    KERNEL32 ;  4. RtlInitUnicodeString     ;  5. RtlCreateProcessParameters    NTDLL ;  6. NtAllocateVirtualMemory     ;  7. NtWriteVirtualMemory     ;  8. __security_check_cookie     ;  9. __SEH_epilog  call kernel32!BaseCreateStack ;  1. RtlImageNtHeader    NTDLL ;  2. NtAllocateVirtualMemory     ;  3. NtProtectVirtualMemory  call kernel32!BaseInitializeContext ;  BaseInitializeContext(PCONTEXT Context, // 0x200 bytes ;  PPEB Peb, ;  PVOID EntryPoint, ;  DWORD StackTop, ;  int Type // union (Process, Thread, Fiber) ;  );   call kernel32!BaseFormatObjectAttributes  call ntdll!ZwCreateThread   mov eax,35h   call ntdll!KiFastSystemCall  call kernel32!GetModuleHandleA "NULL"   eax == 0400000h ;程序装入地址  call ntdll!RtlImageNtHeader eax ; 验证NTHeader ; 下面是通知Cress.exe的几个函数  call ntdll!CsrCaptureMessageMultiUnicodeStringsInPlace  call ntdll!CsrClientCallServer  call ntdll!CsrFreeCaptureBuffer ;--------------   call ntdll!ZwResumeThread ;启动线程移交控制权并返回  ret ;;进程创建过程结束 CreateProcessA 

共享单车需求预测问题:建模篇 机器学习训练营——机器学习爱好者的自由交流空间(qq群号:696721295) 在上一篇里,我们使用可视化的方法分析了“共享单车”的数据集,理解了特征(变量)之间的关系。我们将在本篇建立几个模型预测单车的需求量,并比较它们的预测效果。 随机森林填充法 首先,导入必需的库、训练集和检验集。 import pylab import calendar import numpy as np impor... 阅读详情

相关推荐

浅谈武术擂台格斗机器人大赛

武术擂台机器人赛是工科类专业的一个跨学科的竞赛项目,它涵盖了机械结构、硬件电路和计算机程序等技术领域。笔者在校期间有幸参加过四次这样的比赛,有成功也有失败,对此深有感悟。本文仅为个人观点,有说得不对的地方,望积极指出,希望能帮助到有需要的人。

weixin_43811044的博客 1万+

重载内核(x86)

#include #include #include #include #include #include #include #ifndef MAX_PATH #define MAX_PATH 256 #endif typedef unsigned char *PBYTE; typedef unsigned char BYTE; typedef unsigned int UIN

125096 2490

开箱即用的Platform IO开发平台(包括Arduino,ESP8266,ESP32,STM32)

开箱即用的 Platform IO 离线开发环境,包含(ESP32,ESP32S2,ESP8266,Arduino,STM32)

qq_19703307的博客 755

干掉KV 2008, Rising等大部分杀软

作 者: sudami时 间: 2008-03-23,10:01链 接: http://bbs.pediy.com/showthread.php?t=61762前言:写这篇文章不是为了传播病毒技术,而是让广大的电脑安全爱好者对病毒常用的伎俩有一个比较清楚的认识,才能更好的防范. 写的很菜,老鸟飘过~主题:利用驱动结束掉大部分的安全软件(eg. KV 2008, 瑞星,微点, 360),禁止一些AR

1319

小程序 video 控制器外观调整_Kessil 360X Tuna Sun无线控制器使用分享

之前分享了Kessil 360X Tuna Sun开箱记录,时间关系,没来得及使用WiFi Dongle无线控制器。昨晚抽空实操了一下,做个操作记录,希望对大家有参考Kessil无线模块操作指南官方视频英文教程配中文字幕,非常详尽语速较快,重点位置可以暂停操作点击边框调出视频工具条1、拆包取控制器,保存二维码Kessil WiFi Dongle包装打开包装就能看到Kessil无线控制模...

weixin_39759060的博客 4733

告别LM2596!用LM5175打造400W自动升降压数控电源(附完整电路图与代码)

本文详细介绍了如何利用LM5175芯片设计400W自动升降压数控电源,替代传统的LM2596方案。通过四开关Buck-Boost拓扑结构,LM5175实现了高达98%的转换效率和400W大功率输出,支持无缝升降压切换。文章涵盖芯片选型、电路设计、PCB布局及STM32数控实现,为工程师提供完整的实践指南。

weixin_27032989的博客 598

十个有用的内核 API

RtlPcToFileName() 和 RtlPcToFilePath() 演练定位在 PsLoadedModuleList 的 KLDR_DATA_TABLE_ENTRY 结构列表,并确定给定地址 (Pc) 是否属于 KLDR_DATA_TABLE_ENTRY 中的盘区。根据 Buffer 参数中传递的结构类型,UnitSize 参数可以是 sizeof(RTL_MODULE_BASIC_INFO) 或 sizeof(RTL_MODULE_EXTENDED_INFO)。

maomao171314的专栏 1282

LangChain + Milvus Lite:从零搭建本地RAG知识库

本文详细介绍了如何利用LangChain、Milvus Lite和gte-large-zh模型,在本地从零搭建一个完整的RAG知识库系统。文章涵盖了环境配置、文档处理与向量化、本地向量库构建以及检索问答实现的全流程,重点突出了完全本地化部署带来的数据隐私安全和成本优势,为开发者提供了一条实践性极强的技术路径。

weixin_29044713的博客 443

《Undocumented Windows 2000 Secrets》翻译 --- 第六章(4)

第六章  在用户模式下调用内核API函数翻译:Kendiv( fcczj@263.net )更新:Friday, May 06, 2005 声明:转载请注明出处,并保证文章的完整性,本人保留译文的所有权利。 通往用户模式的桥梁现在,内核调用接口的演化已经缓慢的到达了终点----至少已经涉及内核模式(kernel-mode)。让我们总结一下到目前为止,我们已经获得了什么:l         名为Sp

Kendiv's Box 3551

工业相机的检测原理课件(建议收藏)

本课件为各位工程师详细介绍了工业相机的视觉检测原理 ,旨在为工程师调试工业相机的视觉检测原理时提供理论性指导。

Bamboo265925的博客 498

74.9008深度刷机原理|高通QPST/Firehose底层刷写协议详解

移动设备刷机与底层维修技术指南 本文为移动设备维修人员和高级玩家提供全面的刷机与底层维修技术指南,涵盖高通、联发科和苹果A系列芯片的主要操作。 主要内容 核心操作:Bootloader解锁、Fastboot刷写、EDL深度修复、iTunes DFU模式恢复和分区表重建 适用场景:系统故障修复、底层损坏恢复、安全限制解除、系统降级和深度硬件维修 关键技术:详细解析刷机协议栈层级、关键分区作用和刷机安全机制 操作步骤: 环境搭建与驱动安装 Bootloader解锁(以小米为例) 高通机型系统刷写 苹果设备DFU

2601_95651806的博客 205

Activity启动流程(五)请求并创建目标Activity进程

     Android四大组件之Activity启动流程源码实现详解(五) Android四大组件源码实现详解系列博客目录: Android应用进程创建流程大揭秘 Android四大组件之bindService源码实现详解 Android四大组件之Activity启动流程源码实现详解概要 Android四大组件之Activity启动流程源码实现详解(一) Android四大组件之Activity启动流程源码实现详解(二) Activity启动流程(三)- Activity Task调度算法复盘分析 A.

IT先森 3347

基于YOLOv5/v8/v10的答题卡填涂识别与评分系统(附数据集+UI界面+完整代码)

在教育信息化的大背景下,传统的手工阅卷方式正在被智能化技术所取代。答题卡识别作为标准化考试的核心环节,其准确率和效率至关重要。本文将详细介绍如何利用YOLO系列目标检测算法(YOLOv5、YOLOv8、YOLOv10)构建一个答题卡填涂识别与评分系统。文章从数据集的制作与标注开始,逐步深入到模型的训练、评估与对比,最后基于PyQt5设计了一个用户友好的桌面端UI界面,实现了从图像输入到得分输出的全流程自动化。

YOLO 634

理解Android进程创建流程

进程:每个App在启动前必须先创建一个进程,该进程是由Zygote fork出来的,进程具有独立的资源空间,用于承载App上运行的各种Activity/Service等组件。进程对于上层应...

qxf865618770的博客 754

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

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

从linux核心进程学习进程创建基本流程

本文主要0、1、2这三个进程来分析创建进程的大体流程。使用的代码是从官网上下载的linux6.4的版本。

bruk_spp的博客 621

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

进程及线程创建流程

今天在MuseHero的博客看到的资料,先收藏下来,以后慢慢学习,顺便了解一下WINDOWS的进程机制。;进程创建过程开始 CreateProcessAcall   kernel32!CreateProcessA ;10个参数; BOOL WINAPI CreateProcess(;   __in_opt     LPCTSTR lpApplicationName,;   __inout_op

yaozhu88的专栏 1750

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android进程框架:进程的创建、启动与调度流程

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节祝大家都能得到自己心仪工作。讲义、实战项目、讲解视频,并且后续会持续更新**

m0_56169789的博客 813

Android进程创建流程

进程创建过程的简要图: 图解: App发起进程:当从桌面启动应用,则发起进程便是Launcher所在进程;当从某App内启动远程进程,则发送进程便是该App所在进程。发起进程先通过binder发送消息给system_server进程; system_server进程:调用Process.start()方法,通过socket向zygote进程发送创建新进程的请求; zygote进程:在执行Zyg...

gsj0722的博客 615

Activity之应用进程创建流程简析

android 应用进程创建流程分析

Android framework 633

Android 9(P)应用进程创建流程大揭秘

        Android 9 应用进程创建流程大揭秘 前言   我们知道zygote是Android世界的孵化大师,当Android终端在启动过程中创建了zygote进程之后,历史的重任就赋予在zygote身上了。zygote的重任主要就是孵化,而zygote进程对于孵化有两种不同的处理逻辑: 第一种就是zygote感觉自身担子太重了,所以必须得培养一个得力干将,从而zygote主动孵化了system_server进程来处理一些重要的事务,这个就是我们在章节Android 9 系统启动之Sys

IT先森 5477

linux内核,从进程创建-启动流程

else#endif函数是 Linux 内核中 ELF 二进制格式加载的核心实现,它完成了从解析 ELF 文件头、加载程序段到内存、设置进程地址空间到初始化执行环境的整个过程。通过细致的资源管理和错误处理,确保了 ELF 二进制文件能够正确加载和执行,同时维护了系统的安全性和稳定性。

weixin_43228946的博客 916

Linux进程创建,调度,切换流程

│ wake_up_new_task() │ // 设置 TASK_RUNNING。│ fork() / vfork() / clone() │ // glibc 封装系统调用。│ -> alloc_pid() │ // 分配 pid/tgid。│ - dup_task_struct() │ // 分配并复制 PCB。│ - switch_to() │ // 保存/恢复寄存器与栈。

JISIC的博客 517

C语言 创建守护进程的一般流程

这段代码的主要功能是创建一个子进程,并终止父进程,使得子进程可以在没有父进程的情况下继续运行,从而为将子进程设置为守护进程打下基础。这种方法确保了子进程能够在后台长期运行,而不受父进程状态的影响。守护进程是指在后台运行、没有控制终端的进程,通常用于提供长期服务。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 874

Windows进程创建的流程分析。

.   创建进程的大体流程:   创建进程的过程就是构建一个环境,这个环境包含了很多的机制 (比如自我保护, 与外界通信等等)。 构建这个环境需要两种“人”来协调完成(用户态和内核态),他们各有分工,其中用户态提供原料(提供创建的那些参数), 内核态负责来构建这个环境,由于环境是由内核态构建的,因此他持有这个环境的控制权, 而用户由于提供了原料, 因此他具有使用权。 内核态开始构建环境中的基

内心的宁静带给我们力量。 3060

Windows进程创建的流程分析

.   创建进程的大体流程:   创建进程的过程就是构建一个环境,这个环境包含了很多的机制 (比如自我保护, 与外界通信等等)。 构建这个环境需要两种“人”来协调完成(用户态和内核态),他们各有分工,其中用户态提供原料(提供创建的那些参数), 内核态负责来构建这个环境,由于环境是由内核态构建的,因此他持有这个环境的控制权, 而用户由于提供了原料, 因此他具有使用权。 内核态开始构建环境中的基

swanabin的专栏 2562
上一篇: WinXP 关于POINT-H万能断点 的教
下一篇: 线程创建流程
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值