发信人: llihuang()
整理人: zjxyz(2002-01-26 13:59:00), 站内信件
|
有待改进,源程序如下:
import java.io.*;
/**
* 运行方法:
*
set classpath=%classpath%;.
javac killNimda.java
java killNimda c:
java killNimda d:
*
*/
public class killNimda{
String script="<html><script language=\"JavaScript\">window.open(\"readme.eml"; //脚本代码
String[] nimdaFileName={"readme.eml","readme.exe","admin.dll"}; //病毒文件
int fCount=0; //病毒文件数
int sCount=0; //被感染文件数
public killNimda(String Path){
System.out.println("正在查找病毒...");
listPath(new File(Path));
System.out.println("查找完毕 "+fCount+"个病毒文件,"+sCount+"个文件被感染");
}
//遍历目录
private void listPath(File path){
File[] files=path.listFiles();
for(int i=0;i<files.length;i++){
if(files[i].isDirectory()){
listPath(files[i]);
}else{
String filePath=files[i].toString();
if( filePath.endsWith(".htm")
|| filePath.endsWith(".html")
|| filePath.endsWith(".asp")){
clearScript(files[i]);
}else{
deleteNimdaFile(files[i]);
}
}
}
}
//清除脚本代码
private void clearScript(File file){
try{
int len;
byte[] ob=new byte[1024];
byte[] sb=(script).getBytes();
String endStr="***temp文件结束标志***";
byte[] eb=endStr.getBytes();
File temp=new File("temp.txt");
FileInputStream is=new FileInputStream(file);
FileOutputStream os=new FileOutputStream(temp);
while( (len=is.read(ob)) != -1 ){
os.write(ob,0,len); //暂存到临时文件
}
os.write(eb,0,eb.length);
is.close();
os.close();
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(temp)));
PrintWriter wr=new PrintWriter(new FileOutputStream(file),true);
while( br!=null ){
String s=br.readLine();
int index=s.indexOf(endStr); //是否文件结束
if( index != -1 ){
s=s.substring(0,index);
wr.println(s);
break;
}
index=s.indexOf(script); //是否感染病毒
if( index != -1 ){
s=s.substring(0,index);
sCount++;
System.out.println("发现病毒代码 : "+file.toString()+" ...已清除");
}
wr.println(s); //写回原文件
}
wr.close();
br.close();
temp.delete();
}catch(FileNotFoundException fe){
fe.printStackTrace();
}catch(IOException ie){
ie.printStackTrace();
}
}
//删除病毒文件
private void deleteNimdaFile(File file){
String filePath=file.toString();
for( int i=0; i < nimdaFileName.length; i++ ){
if( filePath.endsWith(nimdaFileName[i]) ){
file.delete();
fCount++;
System.out.println("发现病毒文件 : "+filePath+" ...已删除");
}
}
}
public static void main(String[] args){
new killNimda(args[0]);
}
} |
|