DOS快餐店(八)
名侦探破案实录
■掌柜的
√find和tree命令的使用
√用find命令找出木马捆绑
“真相只有一个!”掌柜的刚出差回来,还没进门就听见店堂里传来小伙计的声音。掌柜的头上顿时凸显出几根青筋,嘴里嘟嚷着:“不用问,这小子又在看《名侦探X南》……”,进门后就对着正在看电视的小伙计怒斥道:“真相是你要被开除了!”
接着的几分钟里,掌柜的看着小伙计痛哭流涕状似乎大有痛改前非之势,就接着说:“既然你这么喜欢侦探,那我就给你讲讲DOS小镇里的名侦探‘find’的故事吧。”
//下方用灰度底纹
find人物资料(右侧用一张上身图片,脸上画问号)
身份:DOS小镇著名侦探  就职经历:Windows 9x/2000/XP/2003
地址:%systemroot%\\system32
格言:给我一点线索,我就能找出你想要的(笔者按:这不是狗吗-_-)……
探案工具:卫星定位系统(tree命令)

案件侦破纪实:谁携带了病毒
今天DOS小镇机场安检处显得特别严肃,因为他们收到可靠线报:在即将通过安检的几名乘客中有一人携带了恐怖的木马病毒!安检处长如临大敌,急召find侦探协助破案。仅有的一些线索(捆绑了木马的EXE文件体中能找到好几处“This program”标记)能帮助find找出犯人吗?
find /c /i “This program” D:\\download\\可疑程序.exe
用这条命令检查了第一名乘客后,DOS窗口显示“—— D:\\download\\可疑程序.exe 3”(见图1),这就说明在这个EXE文件中发现了3处“This program”标记。第一处是捆绑头部,第二处是原EXE文件,第三处……则很有可能是木马文件了,犯人成功找到。
(插入图1)
案件总结:用“find /c /i “This program” 要检测的程序(如不在当前目录则需给出完整路径)”可以检测出大部分被捆绑了木马的EXE文件,但这种方法并不能保证100%准确,任何包含1个以上“This program”字符串的文件(甚至可能是文本文件)都有可能被误报。更保险的方式是使用如“木马捆绑克星”(下载地址:http://www.uuland.com/software/mview21.rar)等工具,它采用了最精确的文件头偏移量判断。

名侦探访谈:如何根据已有线索找出文件
1.基本探案:确定当前目录下的list.txt文件中是否包含字符串“software”
find “software” list.txt
命令格式:find “要搜索的字符串” 要搜索的文件(不在当前目录则需要给出完整路径,下同)
命令讲解:这是find侦探最基本的探案手段,也就是不加任务附加参数时的命令格式。运行这行命令后会返回要搜索的文件中包含指定要搜索的字符串的行,如刚才检测木马捆绑时的命令如果不加/c参数,就会返回如图2所示的信息。用这种方式有一个缺点,那就是当文件中包含指定字符串数较多时很难统计到底搜到了多少行,侦探是如何确定疑犯人数的呢?
(插入图2)
2.确定疑犯人数:确定当前目录下的list.txt文件中包含了几个“software”字符串
find /c “software” list.txt
命令格式:find /c “要搜索的字符串” 要搜索的文件
命令讲解:加了参数/c之后,find命令在反馈信息时就不再显示包含指定字符串的行,而是直接在要搜索的文件名的右侧显示指定字符串在该文件中出现的次数(可参考上文中的图1)。参数/c也是英语单词“Count”(计数)的缩写。现在我们已经可以很方便地得到指定字符串在文件中出现的次数,但具体出现在文件的什么位置呢?
3.找出疑犯所在:找出当前目录下的list.txt中“software”字符串出现的行号
find /n “software” list.txt
命令格式:find /n “要搜索的字符串” 要搜索的文件
命令讲解:参数/n代表英语单词“Number”(号码),使用此参数后,程序反馈的信息与“基本探案”中的信息基本相同,但在显示搜索到的行之前显示了该行的行号(见图3)。如果文件中包含的是“Software”而指定的搜索字符串是“software”,那find可能就无法找到该行,为了解决这个问题必须使用另一个附加参数。
4.不能放过一个坏人:显示当前目录下的list.txt文件中包含“software”字符串的行(忽略大小写)
find /i “software” list.txt
命令格式:find /i “要搜索的字符串” 要搜索的文件
命令讲解:相信你已经猜到了,参数/i代表的是“Ignore”(忽略),也就是忽略大小写。无论文件中包含“SoFtWaRe”或是“sOfTwArE”,加了此参数后都能搜索出来。找出所有包含指定字符串的行非常方便,但如果是不包含该字符串的行,应该怎样查找呢?
5.更不能冤枉一个好人:显示当前目录下的list.txt文件中不包含“software”字符串的行
find /v “software” list.txt
命令格式:find /v “指定字符串” 要搜索的文件
命令讲解:这个参数不太常用,用于找出文件中不包含指定字符串的行。其实这些参数是可以叠加使用的,几个参数同时使用能使搜索范围更小,功能更强。
6.进阶的搜索实例
①显示当前目录下的list.txt文件中“software”字符串出现的次数,忽略大小写
find /c /i “software” list.txt
②搜索d:\\docs目录下的所有TXT文件,并显示每个文件中“hello”字符串出现的次数
find /c “hello” d:\\docs\\*.txt

小提示
find命令和copy、del等命令一样,也支持通配符(*和?)。

名侦探工具大曝光:目录地图tree
名侦探要在硬盘中的文件目录中穿梭自如,当然有他的侦探工具,下面就为大家曝光一件非常强大的目录地图工具:tree。
1.看看当地地形:显示当前目录下的结构图
tree
命令格式:tree
命令讲解:不加任何参数而直接执行tree命令,就会显示出当前目录下所有子目录的结构图(见图4)。如果每次都需要先用cd命令调整当前目录,然后才能使用tree命令,那就太麻烦了!
2.看看别处地形:显示D:\\test目录下的结构图
tree d:\\test
命令格式:tree [盘符:]\\[目录]
命令讲解:如果要显示当前目录之外的目录的结构图,就需要在tree命令后加路径参数了。可是tree命令默认只在结构图中列出目录名,如果要让结构图包含文件名应该怎么做呢?
3.更加精确:显示D:\\test目录下的结构图,包含文件名
tree d:\\test /f
命令格式:tree [盘符:]\\[目录] /f
命令讲解:参数/f我不说大家也知道是“File”(文件)的缩写,如果目录结构过于复杂(包含的子目录及文件数较多),可能会导致此命令长时间刷屏显示,可以使用“Ctrl+C”组合键中止该命令。

侦探怎么用工具:find/tree命令应用实例
1.做个光盘文件目录表(假设光盘所在盘符为G:,生成的目录表为C:\\list.txt)
tree g:\\ /f > c:\\list.txt
2.统计d:\\test目录下名为sample.txt的文件个数
tree d:\\test /f | find /c /i “sample.txt”

回音壁:attrib前后皆有可能
期号/文章:2005年第10期《DOS快餐店(七)》
读者 大鱼一条:attrib命令除了文章中介绍的格式“attrib ±属性 路径\\文件名”之外,还可以将设置属性的参数放在后面,形如“attrib 路径\\文件名 ±属性”。

DIY你的DOS菜
上期答案:
1.将最后的脚本例子改为监视其他注册表项的改动,并发出警报。
将代码中的相关注册表项加以修改即可,在此不列出代码。
2.编写能够给整个目录生成MD5文件的批处理脚本。
@echo off
for %%f in (*.*) do md5.exe “%%f” > “%%f.md5”
注意:md5.exe与此批处理脚本必须放在同一目录。
本期习题:
1.显示D:\\test目录下所有TXT文件中包含“smart”字符串的个数,忽略大小写。
2.用find命令配合tree命令统计d:\\test目录下名为“hello.exe”的文件个数。

 

转自cfan,感谢PK分享经验