反病毒理念、历史、现状与未来

创建时间:2006-12-31 更新时间:2006-12-31
文章属性:原创
文章提交: killer (killer_at_xfocus.org)

反病毒理念、历史、现状与未来

killer <killer②xfocus.org>

注:图片不方便显示,PDF版下载: http://killer.9i3g.cn/tmp/AVhistory&future_killer.pdf

一、玩的就是概念:

AV是我习惯的简写,全名应该叫Anti-Virus,从这个英语字面含义和一些对反病毒历史的追溯,我发现最初人们想表现的并不是杀毒,今天我们总是习惯叫杀毒软件,其实是不准确的。Anti的本意是抵制、防护,它应该叫抗病毒,或者防病毒。不论抗或者防都说明对病毒的未雨绸缪。杀毒则是一种后发补救的策略,虽说亡羊补牢犹未晚,但毕竟还是有一些损失的。

叫杀毒软件则是典型的中国特色,比如健康,中国人一般平时是不太注意健康的,等到有病了才要去看病。中国的反病毒公司出于宣传效果需要,就必然要搞的威风凛凛,给AV技术带来一层杀气腾腾的神秘色彩。
    说起概念,我很欣赏一些国外的宣传,这里不防就给NAV做个广告:
    
[img]http://killer.9i3g.cn/imgage/aver/Symentec1.jpg[/img]
    
    看到没,上面这图就是Symentec给自己做的宣传页,诺顿在发布会上用瑜伽诠释了它的文化“自由分享,安心沟通”,瑜伽的充分舒展身体,意味着自由,意味着无限延伸。

如今的网络你可以安心沟通么?显然不能!网络上广告满天飞,流氓插件群魔乱舞,垃圾邮件像一只只马蜂乱蛰,一些“黑客”整天无聊的扫来扫去,D站D得不亦乐乎。这个时候,你认为你需要的,显然不是浪费时间和精力的去检查,去杀灭,你希望的也许是一个安心的防护套件,让我们可以自由、安心的冲浪。
    反病毒理念的不同造就各种不同的反病毒产品,不过上天有好生之德,本文作者亦本着万物以自己的喜好为准,所以并不特别推荐你用哪种AV,也请勿问我。

二、混沌初开:

自从盘古开天辟地的以来,出来了两个神仙级的人物,一个被人称为Doctor Soloman,一个叫Eugene Kaspersky,另外还有两个叫Peter Norton和Mcafee。这几位神仙有感人间妖风阵阵^-^,病毒横行。决定制定一套法典,用来解救世人,于是他们的研究,促成了当年反病毒理论的基础。这些基础理论,经过后来的一些教授、专家们推广开来,就形成了今天的反病毒体系。

在那个时代,还有无数的高人,自己苦心孤诣的修炼,但终因天资所限、时不与我,或者剑走偏锋,步步险招,无法修炼成正果。
    
    远古的反病毒软件主要有:
    Anti-virus collection by V.Bontchev
    F-Prot
    File Shiled  by McAfee
    NOD of Slovak AV
    TbScan
    AVP by E.Kaspersky
    Dr.Web by Igor Daniloff
    Norton AV
    Solomon's Toolkit
    LEVEL3 virus dedicated AV by SAC
    IBM Anti-Virus
    
    除了这些,还有更多的针对某个病毒的专杀,这里就不一一列出了。值得注意的是:我在这里尽量列出今天你还能熟知的名字,然而尽管我努力,历史终究是无情的。你在上面看到的,一部分和大多数我没列出来的已经成为遥远的过去,只有像我这样喜欢怀旧的人,偶尔会想起那些曾经的同病毒决战的侠士。
    
    最初病毒不多,能掌握写病毒会被人视为天才,好像现在还是这样?大家的抗病毒办法都是针对一个个病毒写专杀,后来因为病毒多了,大家开始编写类似批处理的脚本,这样用户在选择1 2 3 菜单来选择查杀哪个病毒,这本质还是一对一的检测方式。

还有多少朋友记得DOS中那个编制菜单用来选择的命令?  
    
    早期的AV几乎都是这样过来的,但是随后神仙们发现这样做不行,病毒数量膨胀的太快,文件格式具备通用处理过程,每次的专杀都有一些重复工作的地方。所以神仙们的反病毒理论逐渐浮出水面,这个时候,开始形成了通用反病毒技术。整个的针对大量的病毒的处理,也开始了模块化分工,扫描/清除,文件修复等。

于是AV开始转型,具备扫描模块、清除模块、特征库,AV外围技术也开始如火如荼的发展起来,主动监控、完整性检查、免疫技术等等。

下面这一段就是最初一个完整的用来清除引导病毒的AV源代码:
=====================================================================
.model tiny
.radix 16
.code
        org 100
start:
        mov     dx,offset message
        mov     ah,09
        int     21
        xor     ax,ax
        int     16
        or      al,20
        cmp     al,'y'
        je      Goforit
        mov     dx,offset notdone
        mov     ah,09
        int     21
        mov     ax,4c01
        int     21
GoForIt:
        xor     ax,ax
        mov     ds,ax
        mov     ax,word ptr ds:[413]
        mov     cs:ConvMEM,ax        
        mov     di,offset Int13
        mov     si,13*4
        movsw
        movsw
        push    cs
        pop     ds
        cmp     ConvMem,280
        je      RegConvMem
        mov     ah,09
        mov     dx,offset StrangeConv
        int     21
RegCOnvMem:
        mov     ax,0201
        mov     bx,offset OrgSector
        mov     cx,1
        mov     dx,80
        int     13
        call    TunnelInterrupts
        mov     ax,0201
        mov     bx,offset NewSec
        mov     cx,1
        mov     dx,80
        int     13
        push    cs cs
        pop     es ds
        mov     di,offset NewSec
        mov     si,offset OrgSector
        mov     cx,200
        repz    cmpsb
        jcxz    NoDifference
        mov     ax,0301
        mov     bx,offset OrgSector
        mov     cx,1
        mov     dx,80
        int     13
        mov     ah,3c
        mov     dx,offset sample
        xor     cx,cx
        int     21
        xchg    bx,ax
        mov     ah,40
        mov     dx,offset NewSec
        mov     cx,200
        int     21
        mov     ah,3e
        int     21
LOCKEMIN:
        cli
        mov     ah,09
        mov     dx,offset fixed
        int     21
        xor     ax,ax
        int     16
        jmp     LOCKEMIN
Nodifference:
        mov     ah,09
        mov     dx,offset noprob
        int     21
        mov     ax,4c00
        int     21
TunnelInterrupts:
        push    ax bx cx dx es ds si di
        xor     ax,ax
        mov     ds,ax
        push    word ptr ds:[04]
        push    word ptr ds:[06]
        cli
        mov     word ptr ds:[04],offset Int1
        mov     word ptr ds:[06],cs
        pushf
        pushf
        pop     ax
        or      ax,100
        push    ax
        popf
        xor     ax,ax
        call    dword ptr cs:[int13]   ;tunnel interrupt 13
        pushf
        pop     ax
        and     ax,0feff
        push    ax
        popf
   ExitTunnel:
        les     bx,dword ptr cs:[Root13]
        cli
        xor     ax,ax
        mov     ds,ax
        pop     word ptr ds:[06]
        pop     word ptr ds:[04]
        mov     word ptr ds:[13*4],bx
        mov     word ptr ds:[13*4+2],es
        sti
        pop     di si ds es dx cx bx ax
        ret
Int1:
        cmp     cs:found,1
        je      exitint1
        push    bp
        mov     bp,sp
        push    ax bx cx dx es ds si di
        mov     ax,ss:[bp+2]
        mov     cx,4
        shr     ax,cl
        add     ax,ss:[bp+4]
        cmp     ax,0c000
        jb      DoneInt1
        mov     cs:found,1
        les     bx,SS:[bp+2]
        mov     word ptr cs:[Root13],bx
        mov     word ptr cs:[Root13+2],es
  DoneInt1:
        pop     di si ds es dx cx bx ax bp
exitint1:
        iret
StrangeConv db   0a,0dh,'Conventional Memory Suspicious.',0a,0dh,24
Fixed   db      0a,0dh,'Virus Cleaned - sample saved in VIRUS.MBR .',0a,0dh  
        db             'Now COLD REBOOT IMMEDIATELY!!!!!!!!!!!!!!!!',0a,0dh,24
NoProb  db      0a,0dh,'No Stealthing Detected.  No Action Taken.',0a,0dh,24
notdone db      0a,0dh,'No Action Taken.',0a,0dh,24
Message:
db      0a,0dh
db      '--==[Stormbringer''s Instant Stealth MBR Virus Remover.]==--',0a,0dh
db      '          USE AT YOUR OWN RISK!  RTFM Before Using!         ',0a,0dh
db      0a,0dh,'Continue (y/N)',24
sample          db      'Virus.MBR',0
found           db      0
NewSec          db      200 dup(?)
OrgSector       db      200 dup(?)
Int13           dd      ?
Root13          dd      ?
ConvMem         dw      ?
end start
======================================================================    
    此时的反病毒程序,基本都是采用汇编编写。我们通过更多早期的反病毒程序源代码可以看出这个事实:抗病毒软件基本都使用纯汇编语言编写。而一个建立在理论体系化上面的完整杀毒程序代码量都不会少,这使得进入反病毒这个领域的门栏高得让人望而生畏。后来,使用纯C和C++编写的反病毒程序和相关模块多了起来,其中一部分还是基于跨平台的考虑。而在整个AV历史中,只有极少的爱好者使用Pascal语言来编写反病毒程序。

这是某AV查壳部分源代码:
======================================================================unp proc
        call readTitle
        jc noUnp
        cmp varNP,0
        je noUnp
        call scanPack
noUnp:
        ret
        endp
scanPack proc
        push ax bx cx dx bp di es
        mov es,baseSeg
        mov di,regIP
        lea si,sigUnp
noLastSig:
        push si
scanMore:
        call scanChSumB ;1
        jne nextSig
        ......
======================================================================    还有一些扫描和清除模块的源代码,限于篇幅,就不一一贴出了。
    
    远古的病毒库也较为简单,别惊讶,下面这几行,就是当年的大名鼎鼎的F-PORT的病毒特征库中的一小段:
======================================================================Valert      y0Jny5dM+OMjnm-2mljm7hpsUBQrVAqq5M6i05mO0m+4gBqYUlBNBU
Taiwan      OVn5aMFMA6-KNMqpYCbw-qCOqWQBEPDX553mpwNRvlehJgNldYp6Bz
Durban      fEJn-jPjD2m5mjIrJb8oKcVZJMgmhkBcjcaOMnjj3YnYjvuDtW
Pretoria    G7kmu5s5rypVosPPtvczLY7fKUc5MjucEPYkkM7F0od24-HW
XA1         g0knPMSjgjKH5mj5PhOA4gK6l7jr8KJWYhOKw3mm8KgCHYMM-W
Kennedy     h0ljSMDMd864oME5TM+YjgeKpLuHbjmjah0fuOTM0ptAfu6LZI
8-tunes     jp1TKjd5htmjnMZcwNwj+THd70MrOFFKM4X55TjjURT5JMBsnv
Virdem      NWk5s5Ij9osXSctXAX82MMnmm674Rtw09rkRDu7e9fTlbO479rNbvdIipT
======================================================================
    后来,时代要求科学合理的病毒库出现,病毒库不单包括病毒名、特征码,还要包括清除方法。于是人们改进了原来病毒库的结构,如下就是后来许多人采用的改进病毒库结构:
======================================================================    .!.:rc393,[VD/SLAM]
.:0.:16.:66.:00.:0C 4F8E 0D9A.:3E.:0C.:20 BC46 CF5D.:AUTO+.:62.:0.:AUTO
.!.:rc393,[VD/SLAM]
.:0.:16.:E9.:00.:0C 2A7F 96BF.:DD.:0C.:20 48A4 2DBD.:AUTO+.:152.:0.:AUTO
======================================================================

三、开元盛世:

从1994年起,AV正式成熟起来,此时的AV正慢慢走入了鼎盛时代,这个时候,以AVP为首的反病毒厂商开始大刀阔斧的占领市场,反病毒从最初的谁行谁上,演变为需要靠广告战,价格战来抢夺市场。市场的竞争就难免豪夺巧取,于是在欧洲强胜一时的Dr.Solomon开始走下坡路,最终无奈被NAI(MCAFEE)收购。
    更多后起之秀们,从前辈那学来的知识,也开始参与了市场激烈的竞争,只是在反病毒技术和体系上,再也没有突破过AVP和Dr.Solomon的厂商。由于Dr.Solomon被MCAFEE收购,所以天下的反病毒引擎分为了两个派系,一个AVP(Kaspersky Antivirus)派系,一个NAI派系(Dr.Solomon派)。
    
    而只有Eugene Kaspersky此时正式开创了一个反病毒的神话(见本人AVP神话一文),其它的商家无一不搅在市场的这个利益的角斗场。在地下病毒站,VXER们讨论和剖析的反病毒产品主要有:AVP、TBAV、F-Prot、Dr.Web,说起这个不外乎有这样的意义,我们把目光放得更远,抛却商业的争夺看到的是,在病毒作者心目中反病毒产品的力量。事实上AVP和F-PROT以大量的病毒样本库闻名,地下的VXER经常使用这两款杀毒软件来进行样本交换。
    
    这里,让我们怀念一下Dr.Solomon,这位反病毒历史上极其重要的人物,他在1989年的反病毒产品图片(来之不易啊):
    
    [img]http://killer.9i3g.cn/imgage/aver/drsolomon.jpg[/img]
    
    [img]http://killer.9i3g.cn/imgage/aver/drsolomon_chanpin.jpg[/img]
    后来的For Windows 3.x Win NT 3.X 的:

[img]http://killer.9i3g.cn/imgage/aver/drsolomon_win.jpg[/img]
  
    [img]http://killer.9i3g.cn/imgage/aver/drsolomon_win_set.jpg[/img]
          
    由于AVP的技术成功,使得大量第三方AV产品使用AVP的引擎来工作,这里面知名的有F-Secure、AVK等。也有许多后来学习利用AVP技术的产品,比如DR.Web,它是Igor Daniloff所领军打造的产品,这哥们也是一个顶尖逆向工程高手,而且很早以前他还经常在地下站点发表反病毒和逆向的相关文章,从对Drweb的老版本查看,我经常发现AVP的影子,连病毒库的结构,都有几分形似。

这个时候的反病毒不仅在市场上大获全胜,赚了大把的票子,在用户的需求和市场的竞争下,技术上也成熟起来,具备了:
    
    1、高速的扫描/特征匹配算法。
    2、合理的病毒库,大量的病毒样本,完善的病毒清除方法。
    3、产品线全面,各种主流系统的兼容DOS/Win9x/Winnt/2000,NOVELL、LINUX/UNIX四处开花。
    4、以监控为主的防护概念普及和应用。
    5、启发扫描、虚拟机、人工智能全面应用。

直到今天,这些技术依然是整个AV体制的坚石和基础,而今天AV技术的发展却缓慢鲜有创新。

四、赚并堕落着:

没错,反病毒的今天已经开始了堕落,这种堕落体现在关键技术上的不思进取,市场上的尔虞我诈。反病毒商家的自我炒作,彼此炒作已经屡见不鲜。而由于基础反病毒技术的浅显化,使得大量的小手工作坊又一次涌现出来,这些手工作坊的产品不仅没有多少创意。而且它们这些良莠不齐的反病毒/反木马产品,混淆着用户的视听。
    
    在网络上,各个BBS中,你会发现N多人都在谈论病毒,整天谈论的就是怎么清除一个木马,木马又改注册表哪里啦?木马把文件拷贝到哪儿啦?TXT文件关联是不是又被修改啦?等等,并觉得这就是“技术”,乐此不疲。我经常被人家这样问来问去,在某种意义上,我觉得这侮辱了反病毒技术,这个活儿应该叫客服!

当然这种堕落也是病毒技术的堕落,初接触计算机那种对病毒的神秘感已经彻底消失,今天的病毒是看得见的,今天的病毒作者十有八九的不懂变形、多态,你看那几百K的木马,近1M的后门,形形色色的蠕虫和垃圾邮件们依靠操作系统漏洞、应用程序的BUG和对用户的社交工程欺骗来传播。

反病毒公司这个年代大喜过望,因为几乎不用对抗那些诡异的病毒,传统的那些多态、变形的DOS/WIN9X病毒已经随着系统的变换成为昨日黄花,那个年代AV做的再烂都已经无关紧要,新的平台给了大家站在同一个起跑线的机会。如今的商业反病毒公司面对木马几乎是居高临下的傲视,这让反病毒的公司的分析员多少有些无聊,是的,整天面对那些重复着、弱智的木马,那些单一的、垃圾的代码,生活变得那么乏味,没有激情,没有可敬的敌人,惺惺相惜的对手。病毒和反病毒从原来的曲高和寡,彻头彻尾的沦落为下里巴人。

我们以前要面对的是这样一些天才:
        [img]http://killer.9i3g.cn/imgage/aver/benny.jpg[/img]

29/A成员,以Benny为首的29/A不少高手,写过许多非常具有创意的病毒、包括一些划时代的病毒,Benny是一个对技术执着的顶尖高手。值得一提的是:他虽然写了很多病毒,但他写的这些病毒仅仅是一种技术研究,事实上国内也有不少病毒高手,在默默研究病毒技术,以更深层次的技术交流为目的。有的高手还研究病毒技术的应用,包括针对爆发蠕虫的遏制。安全届最初找到通过PEB获取kernel.dll地址,从而获得ShellCode 使用API的方法时,人人叫好,而这却是被病毒高手们玩烂的技术。还有一些高手,自己写出来针对自己病毒的清除程序,原因仅仅是反病毒公司编写的清除模块不能检测和正常的清除病毒。您不信么?看看下面这段SMF病毒组织一个作者在自己的病毒清除工具包中的自述:
From author:
~~~~~~~~~~~~
I write this program, because AV programs like AVP or DrWeb can't cure
some of my virii :) Sorry, this version not tested archives and packed
files. They test only COM/EXE files. Make report at dav.rep file.
Detected all HLL-virii from DVL #3 - #4.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[img]http://killer.9i3g.cn/imgage/aver/cheninghau.jpg[/img]
    
    CIH作者,不管怎么说,陈赢豪的学习能力是值得敬佩的,因为在他写CIH之前不久,大约是两周,捷克的加密解密高手EliCZ刚刚公开自己的研究成果:通过IDT从Ring3切换到Ring0的方法,这个方法刚刚被披露没几天,就被陈赢豪创造性的应用在的病毒上。
    
    然而,今天我们对抗的却是这样一些所谓“高手”
    
        [img]http://killer.9i3g.cn/imgage/aver/jeremy_jaynes_spam.jpg[/img]
    
    Jeremy Jaynes是个百万富翁,也是个垃圾邮件发送高手,他雇佣人专门进行收费互联网垃圾邮件发送业务。
    
        [img]http://killer.9i3g.cn/imgage/aver/jay_echouafni_ddos.jpg[/img]
    
    Jay Echouafni ,CEO,同时也是一个黑客,控制了傀儡网络进行给竞争对手DDOS攻击。
    
        [img]http://killer.9i3g.cn/imgage/aver/andrew_schwarmkoff_phisher.jpg[/img]
    
    Andrew Schwarmkoff 是俄罗斯一个黑客团体成员,善于自己改造木马/后门利用来发动社会工程学的钓鱼攻击。

病毒和反病毒仿佛商量过似的,一起开始了赚钱,不同的是,病毒作者“低调”的赚钱,钻着法律的空子,依靠网络的不可控的现实。而反病毒公司则天经地义,明目张胆。

五、前路在哪里:

今天,似乎没有多少人对反病毒产品的未来进行探索。F-Prot已经不像当年那么风光无限,虽然它的启发扫描的逻辑依然被我所赞叹。卡巴斯基(Kaspersky)“独孤求败”的寂寞和不能出世的无奈并不为多少外人所知。然而市场毕竟是市场,用户并不关心你的启发扫描模块的优劣。据我所知,有几个厂商的反病毒引擎,已经近4年几乎没有更新过,这些年惟一更新的就是不断的炒作。有的“要求进步”的公司则直接建立了研究室,你别以为这是独立探索最新反病毒技术的地方,事实上这是逆向先进反病毒产品,从而用来亦步亦趋的跟着学的研究室。

每天都是一个变革的开始,给新生的力量带来了机会,Microsoft也正式的介入了这个领域,事实上在遥远的DOS年代Microsoft就染指了一次反病毒市场,那是个时候正好是免疫技术流行的时代,Microsoft错误的以为免疫技术足以应对各种病毒,于是CPAV一度在DOS下流传。然而天山派剑术的轻灵终究无法抵挡昆仑派内力的雄厚,所以Microsoft败得很惨。但Microsoft又是一个善于学习的商家,今天Anti-Spyware 、Windows OneCare 、Windows Defender 卷土重来,一波波态势逼人。

而传闻中MS Anti-Spyware某次升级后会不小心删除Norton Antivirus,这是不是又预示一场不公平的竞争开始。
    
    未来在那里,谁又能看的清呢,于是笔者killer只好寻根一下历史,企图借历史一双慧眼去先知一下未来。现在看来,有所惑有所不惑,把酒夜话,一切尽在不言中。

Creditz:F-Secure,提供部分图片。

反病毒理念、历史、现状与未来相关推荐

  1. 【元宇宙】元宇宙(metaverse)的简介(多角度理解与探讨)、发展历史、现状与未来

    High&NewTech:元宇宙(metaverse)的简介(多角度理解与探讨).发展历史.现状与未来 导读:博主曾在去年,2020年9月份撰写了一篇文章<AGI:走向通用人工智能的[哲 ...

  2. 微型计算机地未来发展,微型计算机的发展历史、现状和未来(最新) PDF.doc

    微型计算机的发展历史.现状及未来 学号:030841019 姓名:向世柱 中文摘要: 计算机自从问世以来,就对世界产生了很大的影响,随之就带来了工业上的一次飞跃,使我们的生活发生了前所未有的一次变革, ...

  3. 计算广告的历史、现状及未来

    计算广告的历史.现状及未来 本文转载自:http://www.csdn.net/article/a/2013-10-21/15816923 摘要:广告是企业为了一定目标(比如市场占有率.知名度等),通 ...

  4. 网络系列--参考互联网的发展历史,分析物联网的发展现状与未来。

    文章目录 物联网发展现状 物联网未来展望 开放.标准 软化.边缘化 安全 参考互联网的发展历史,分析物联网的发展现状与未来. 物联网发展现状 ​ 物联网能够高效的利用资源.大限度的减少人力消耗,因此其 ...

  5. 从微服务架构的现状和未来看学习路径

    在当今的互联网系统架构中,微服务已然成为整个服务端系统架构的标配,但不同的公司由于发展阶段.规模及历史现状的不同,所以在具体的实现路径及形态上一般会有所差别. 一般来说,对于新生的创业公司来说,由于没 ...

  6. Dubbo开源现状与未来规划

    摘要: Dubbo 在过去一段时间疏于维护,去年阿里高调宣布重启 Dubbo 开源之后,社区里问的最多的问题是,这次开源与上次有什么一样,还有就是 Dubbo 和 Spring Boot.Spring ...

  7. 币未来趋势分析_分析:中国便利店零售市场现状以及未来发展趋势

    QYResearch预测:2019-2025全球与中国便利店零售市场现状及未来发展趋势 [纸版价格]:RMB 15000 [电子版(PDF)价格]:RMB 15000 [报告篇幅]:153 [报告图表 ...

  8. Dubbo学习总结(6)——Dubbo开源现状与未来规划

    前言 http://dubbo.incubator.apache.org/zh-cn/docs/user/preface/background.html 大家好,非常荣幸有机会和大家做这个分享.我先做 ...

  9. 张一鸣倡议AI发展要讲责任,马维英谈头条AI现状和未来 | 实录

    李根 假装发自 诺金酒店  量子位 报道 | 公众号 QbitAI △ 今日头条创始人.CEO张一鸣 "作为人工智能的企业,应该永远恪守一条原则:必须对整个人类的未来充满责任感,充满善意.& ...

最新文章

  1. Java项目:在线拍卖竞价系统(java+SpringBoot+FreeMarker+Mysql+redis)
  2. Groovy—沉睡的雄狮
  3. Cocos Creator学习目录
  4. nginx配置反向代理解决前后端分离跨域问题
  5. unix linux 命令参考,Unix/Linux 命令参考
  6. 超详细图解!【MySQL进阶篇】MySQL事务和锁
  7. P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
  8. 原 R语言柱状图排序和x轴上的标签倾斜
  9. 专访香侬科技:致力于让世界听到中文NLP的声音
  10. python+webdriver(三)
  11. 2017.9.1 公路修建问题 思考记录
  12. 剑指offer48-最长不含重复字符的子字符串(双指针经典)
  13. zabbix3.0.4 邮件告警详细配置
  14. 花生壳 Linux arm
  15. 江西政务服务“掌上办”新模式分享
  16. Centos7.X安装mariadb及卸载mariadb安装mysql方法
  17. 银河麒麟桌面系统V10解决微信无法登录
  18. 如何在C加加的面向对象写石头剪刀布游戏
  19. 关于七彩虹显卡命名解说
  20. HDU 6146:Pokémon GO

热门文章

  1. python--真气网监测站点数据的抓取
  2. 美国本科计算机专业叫cs吗,美国本科cs专业
  3. mStar 6A648 双 WiFi
  4. jmeter-取token
  5. 深耕技术的同时,别忘了走出自己的舒适区
  6. 杠杆炒股利息一般是多少
  7. arcgis10.2以上dbf用excel打开中文乱码问题(10.8为例)
  8. 《安富莱嵌入式周报》第292期:树莓派单片机100M双通道示波器开源,MDK5.38发布,万用表单芯片解决方案,8通道±25V模拟前端芯片,开源贴片拾取电机板
  9. 服务器主机本地系统6,服务器主机本地系统开机
  10. php软件测试课程资源共享网站