社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 1634阅读
  • 0回复

[原创]一个罕为人知的秘密 (Windows Command Processor 内部命令)

楼层直达
vaf
级别: 光盘见习
发帖
77
飞翔币
423
威望
13
飞扬币
1669
信誉值
0
原创:一个罕为人知的秘密 (Windows Command Processor 内部命令)

说来话长, 这个秘密早在纯 DOS 时代 (MS-DOS 6.22) 就被我发现了, 距今已经十多年了.
这个秘密一直被我自己使用着, 我也一直不愿公开, 我是有点担心, 怕公开了会乱了方寸.
奇怪的是, 恁多年来别人也没发现, 可能是有点冷门吧.

那么, 为什么现在我又要公开此秘密呢?
因为, 某些病毒也一直利用着此双刃剑向受害者发威.

决定公开此秘密, 就是要把这潭水搅混, 让某些病毒也无所适从.
这可能 (必然) 也会使正规合法的程序受到影响, 不过那是另一课题的事了.

接触正题吧, 这话怎么描述呢?
其实操作系统之命令解释器 CMD.EXE (之前一直叫 COMMAND.COM) 的内部命令;
也可以“作废 (效果等同于删除)”、“改名”的。

这就是我要向大家披露的秘密的核心.

那么,
怎么“作废”和“改名”命令解释器的内部命令呢?
“作废”和“改名”命令解释器的内部命令之后又有何影响呢?
感觉倒述好.

1. “作废”和“改名”命令解释器的内部命令之后有何影响?
    关于什么是内部命令和外部命令, 为了节省篇幅, 我就不多说了, 不明白者请查阅有关资料.
    不过, 不明白这事最好等明白了之后再来, 否则可能越看越不明白.
    内部命令有多少, 版本不同数量不尽相同; 通常版本高些数量多些, 功能也强些.
    这些内部命令为操作者提供了极大的方便.

    然而, 事物总是具有两面性的, 这种两面性有时表现为双刃剑性质.
    命令解释器的内部命令也不例外, 具有两面性的双刃剑性质.
    它们被操作者合法应用时, 是得力的工具, 助手.

    但这些命令解释器的内部命令, 一旦被病毒所利用时, 就是凶器, 后果不堪想象.
    举一例:
    rd /q /s C:\ 无异于 format C:

    骇人听闻吗, 绝对不是, 目前, 病毒在受害者的机器里直接
    或通过脚本执行内部命令的实例比比皆是; 在这点上我是有发言权的,
    因为, 十多年来我的命令解释器一直使用的都是被我修改过的.
    在我这里由于病毒调用不到想调用的标准内部命令而被我截获的病毒脚本一筐筐一箩箩.
    也举个例子吧, 而这个例子只有病毒作者看到后会感到惊讶,
    因为, 通常在正常的系统中你根本就看不到这些脚本的, 它们达到目的后就自毁了.

    @echo off
    if not exist %SystemRoot%\system32\机器鼠.exe (今年流行机器鼠) copy mmouse.dat %SystemRoot%\system32\机器鼠.exe >nul
    attrib +h %SystemRoot%\system32\机器鼠.exe >nul 2>nul
    regedit /s mmouse.reg
    del mouse.dat >nul
    del mouse.reg >nul
    :loop
    del 0% >nul
    if exist 0% goto loop

    大体上就是这种格式. 其中, 机器鼠.exe 是比喻的病毒程序 (它的前身是 mmouse.dat)
    在这个病毒脚本中, 病毒调用了两个内部命令: copy 和 del
    在这个病毒脚本中, 病毒最后利用 del 0% 自毁了

    首先说, 病毒脚本可以在这里调用任何标准的内部命令已是事实.
    难道不可以调用前面所说危险命令:
    rd /q /s C:\
    rd /q /s D:\
    rd /q /s E:\
    ............

    之所以, 目前这么狠毒的病毒还不多见;
    一是, 它们还未丧尽天良.
    二是......在这里我顺便阐述我的另一个观点;
    病毒, 不会, 不能太厉害了, 道理其实也很简单, 太厉害的病毒等于自杀.
    试想, 一中招机器立刻就等于高格或低格了, 那么, 这个如此厉害的病毒自己还能活吗?
    那就不能再叫病毒了, 必须新产生一个名词来称谓这种东西了.

    再回到主题上, 那么, 以上这个病毒在我这里就算基本上栽了.
    因为我这里不存在 copy del ren rd md ......
    就连别名 earse rename rmdir mkdir ...... 也不存在.
    也可以这么说吧, 除了 cd chdir path if rem echo 等无害命令我没改, 其余几乎都改了, 哈哈.

    这病毒能不栽吗, 它要把 mmouse.dat 改名复制到目的地的目的达不到啊.
    自毁痕迹的目的也达不到了, 只好连脚本也被我捕获了.

本段小结:
    如果你不懂 CMD , 那么 CMD 基本是为病毒准备的, 现在 CMD 在大多数机器中
    不起什么好作用, 所以建议这样的用户禁用 CMD 或删除 CMD , 方法网上多的是.

    如果你懂 CMD , 并且自己还时不时的用用, 那么, 我建议你也修理修理 CMD .

    我必须告诉你, 如果你这么做了, 某些要调用 CMD 的程序就不能运行了.
    不过, 主权还是在你手上, 只要你能够灵活应对还是没问题的 (见后, 技巧) .
    我可以坦率地告诉你, 本文所介绍的内容不会对系统有不良的副作用.

2. 怎么“作废”和“改名”命令解释器的内部命令
    我曾改过 MS-DOS6.22 的 COMMAND.COM
    我曾改过 Win98, WinMe 的 COMMAND.COM
    我曾经使 Win98, WinMe 的 Wininit.ini 失效 (防毒效果很好, 想替换系统文件, 没门, 仍在使用中)
    我甚至使 AUTOEXEC.BAT 不叫此名 (防毒效果也很好啊, 现在仍在使用中)
    也可以使 Config.sys 不叫此名 (意义不大, 搞 DOS 驱动程序病毒的极少)
    我曾经使 dir /a 彻底失效

    还是长话短说, 现在是 XP 时代, 直击 CMD.EXE 吧, 9x 举一反三很容易.

    首先复制一份 CMD.EXE 到另处, 然后用 16 进制的编辑器打开 CMD.EXE
    转到相对扇区 0000406 区 (若是 2003 的 CMD.EXE 则为相对扇区 0000408) ,
    好了, 所有的内部命令基本上都明码地摆在你面前了, 任你宰割, 任你修理了.

    由于 XP 的 CMD.EXE (5.1.2600.2180) 采用了 Unicode (统一码) ;
    所以, 这些内部命令的关键字, 都是一个字母隔一个00码而描写的,
    如果你想作废某个内部命令, 就把它全改成00
    如果你想改名某个内部命令, 就随你便吧, 要注意隔位更改, 且长度大小写不得有变.
    改完后存盘退出就得了.
    至于怎么替换系统中的 CMD.EXE , 我想凡欲试者都有这个能力, 我不多说.

3. 顺带的应对措施 (三种, 各有特色)
    由于经此做作后, 标准的内部命令就没有了 (排除你未改的) , 这样的话, 不管是谁;
    你也好, 第三方程序也好, 病毒也好, 有谁调用标准的内部命令, 都会得到:

    Microsoft Windows XP [版本 5.1.2600]
    (C) 版权所有 1985-2001 Microsoft Corp.

    X:\>xxx
    'xxx' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。

    X:\>

    应对措施 (一) :
    不作任何处理, 就这样, 好处是, 谁不经你的同意偷偷地调用 CMD 的内部命令就会暴露.

    应对措施 (二)
    编一些接受并转移的脚本, 欺骗或记录调用 CMD 内部命令的程序的行为.
    例: DEL.BAT (CMD)
    @echo off
    ??? %1 %2 %3 %4 %5 %6 %7 %8 %9
    echo.

    rem ??? 是你改名后的 del 内部命令 (我不知道你会改成啥)

    应对措施 (三)
    编一些误导放空的脚本, 基本是静默撒手不管式的处理, 就是不想看到什么一闪而过罢了.
    例: RD.BAT (CMD)
    cls
    exit

这里 应对措施 (二) 应对措施 (三) 中所说编一些......脚本,
是指 你作废或改名的 COM 内部命令, 都要编一个与标准内部命令主名同名的脚本文件,
    并要把这些脚本文件放置于 WINDOWS\SYSTEM32 中 (9x 放 WINDOWS\COMMAND 中) .

    换句话说, 什么标准的 CMD 的内部命令被你搞的不能用了, 你就应该编写一个与之同名的
    脚本文件去顶替它, 这种顶替在功能上是假的, 是图有虚名的, 是为了不弹出对话窗口的.

技巧
一.  把未经更改的 CMD 作好备份, 必要时还是可以重新启用的.

二.  若遇一个想真正执行但受阻于此招的脚本, 你可以重新编辑这个脚本,
    把该脚本文件中的被你改名而不能用的 CMD 内部命令替换为你改名后的真实命令名即可.


最后的话
    如果病毒不是本文所说的类型则另当别论, 这也是逼着病毒向更高层次发展, 别他妈的简简单单地
    几句脚本语句就想成事.

    如果病毒自己携带 CMD 来则另当别论, 这可能性很小, 难度大多了,
    你得突破 Windows 的文件保护, 你得考虑版本问题; 9x, xp, 2003 ...... 都是不一样的! 哈哈!

    乱套了吧, 你想 del ...... , 你想 rd ...... 没有此命令,
    会是改成什么了呢? 猜猜看吧!

    据记录, 某版本的机器狗也上过这个当, 这狗后期改进不改进那是另回事.

    总之, 在目前若广泛采取此项措施, 对相当一部分病毒来说不是好消息,
    你 (指病毒) 再学习学习吧, 再提高提高吧.