编程实现清除temp1.exe,temp2.exe木马
编程实现清除temp1.exe, temp2.exe木马.(这个木马没查用叫什么名称...-_-!!!, 看到网上好象都是这样叫, 就用上了那个名字)
今天打开本本的时候, 又击驱动器图标的时候, 总是在新窗口中打开, 立马感觉不对头, 查看一下进程, 发现里面多了一个”temp1.exe”的进程, 在网上一查, 原来是中标了……..-_-!!! 本本上面还好,只有3个驱动器, 挨个删除以后也就没来了, 可台式机上分了6个区…..所以就有了下面这个小程序…..因本人机器的木马均已手工清除, 未能再测试程序了. 下面代码仅仅是参考用, 希望对中标的兄弟们有帮助….
今天(8/9/2006)不小心又中上了, U盘带来的(我不用杀毒软件的). 这次对代码进行了编译我运行, 程序有问题, 因为copy.exe, host.exe的文件属性问题, 添加下面红色部分的代码后, 可以杀毒了. 不过杀完后, 好象注册表仍不干净, 重启会提示无法找到"c:\windows\svchost.exe", 手动在注册表中找到这个删除后就没问题了.
.Net Framework 2.0 : http://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en
经过编译的程序:/Files/XiaoHui/killvirus.rar
PS:见到有人提出运行不了的疑问,特将经过编译的程序放上来。程序需要在.Net Framework 2.0下面运行。当然你完全可以自己复制代码,然后自己编译。
1
using System; 2

3
using System.Diagnostics; 4

5
using System.IO; 6

7
using System.Management; 8

9
using System.Collections; 10

11
using Microsoft.Win32; 12

13
using System.Security.Permissions; 14

15
16

17
[assembly:RegistryPermissionAttribute(SecurityAction.RequestMinimum, 18

19
ViewAndModify="HKEY_CURRENT_USER")] 20

21
class Program 22

23


{ 24

25
static readonly string XCopy = "xcopy.exe"; 26

27
static readonly string SVCHost = "svchost.exe"; 28

29
static readonly string Temp1 = "temp1.exe"; 30

31
static readonly string Temp2 = "temp2.exe"; 32

33
static readonly string Copy = "copy.exe"; 34

35
static readonly string Host = "host.exe"; 36

37
static readonly string AutoRun = "autorun.inf"; 38

39
static readonly string RegKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"; 40

41
static readonly string LoadKey = "load"; 42

43
44

45
static void Main() 46

47

{ 48

49
bool foundVirus = QueryProcess(true); 50

51
bool isRegistryExists = IsRegistryExists(); 52

53
Console.WriteLine(isRegistryExists.ToString()); 54

55
if (!foundVirus) 56

57

{ 58

59
Console.WriteLine("Not found virus."); 60

61
return; 62

63
} 64

65
66

67
Console.WriteLine("Starting kill the virus."); 68

69
Console.WriteLine("Delete the xcopy.exe"); 70

71
string xcopyPath = string.Concat(GetWindowPath(), Path.DirectorySeparatorChar, XCopy); 72

73
KillVirus(xcopyPath); 74

75
76

77
Console.WriteLine("Delete the svchost.exe"); 78

79
string svchostPath = string.Concat(GetWindowPath(), Path.DirectorySeparatorChar, SVCHost); 80

81
KillVirus(svchostPath); 82

83
84

85
Console.WriteLine("Delete the temp1.exe"); 86

87
string temp1Path = string.Concat(GetSystemPath(), Path.DirectorySeparatorChar, Temp1); 88

89
KillVirus(temp1Path); 90

91
92

93
Console.WriteLine("Delete the temp2.exe"); 94

95
string temp2Path = string.Concat(GetSystemPath(), Path.DirectorySeparatorChar, Temp2); 96

97
KillVirus(temp2Path); 98

99
100

101
Console.WriteLine("Starting kill virus in each drive"); 102

103
ArrayList drives = GetAllLogicalDrives(); 104

105
string drive = string.Empty; 106

107
for(int i = 0; i < drives.Count; i++) 108

109

{ 110

111
string copyPath = string.Concat(drives[i], Path.DirectorySeparatorChar, Copy); 112

113
string hostPath = string.Concat(drives[i], Path.DirectorySeparatorChar, Host); 114

115
string autorunPath = string.Concat(drives[i], Path.DirectorySeparatorChar, AutoRun); 116

117
KillVirus(copyPath); 118
// 上次下面的代码忘记写了, 导致只删除了copy.exe, host.exe和autorun.inf没删除 -_-!!!119
KillVirus(hostPath);120
KillVirus(autorunPath);121

122
} 123

124
Console.ReadLine(); 125

126
} 127

128
129

130
static ArrayList GetAllLogicalDrives() 131

132

{ 133

134
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); 135

136
ManagementObjectCollection queryCollection = query.Get(); 137

138
ArrayList drives = new ArrayList(30); 139

140
foreach(ManagementObject mo in queryCollection) 141

142

{ 143

144
Console.WriteLine("Drive: " + mo["Name"].ToString()); 145

146
drives.Add(mo["Name"].ToString()); 147

148
} 149

150
151

152
return drives; 153

154
} 155

156
157

158
static bool QueryProcess(bool killProcess) 159

160

{ 161

162
Process currentProcess = Process.GetCurrentProcess(); 163

164
Process[] localByName; 165

166
167

168
localByName = Process.GetProcessesByName("temp1"); 169

170
if (localByName.Length > 0) 171

172

{ 173

174
if (killProcess) 175

176

{ 177

178
KillProcess(localByName); 179

180
} 181

182
return true; 183

184
} 185

186
187

188
localByName = Process.GetProcessesByName("temp2"); 189

190
if (localByName.Length > 0) 191

192

{ 193

194
if (killProcess) 195

196

{ 197

198
KillProcess(localByName); 199

200
} 201

202
return true; 203

204
} 205

206
207

208
return false; 209

210
} 211

212
213

214
static void KillProcess(Process[] processes) 215

216

{ 217

218
foreach(Process p in processes) 219

220

{ 221

222
p.Kill(); 223

224
} 225

226
} 227

228
229

230
static void KillVirus(string filePath) 231

232

{ 233

234
if (File.Exists(filePath)) 235

236

{ 237

238
Console.WriteLine("Are your sure want to delete: {0} [y/n]", filePath); 239

240
string answer = Console.ReadLine(); 241

242
243

244
if (answer.ToUpper().Equals("Y")) 245

246

{247
// 加上文件的只读属性判断. 如果文件带只读属性, 就去除248

if ((File.GetAttributes(filePath) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{249
File.SetAttributes(filePath, FileAttributes.Archive);250
}251
File.Delete(filePath); 252

253
} 254

255
} 256

257
} 258

259
260

261
static void DeleteRegisterKey() 262

263

{ 264

265
bool isRegistryExists = IsRegistryExists(); 266

267
268

269
if (!isRegistryExists) 270

271

{ 272

273
Console.WriteLine("Not found Registry Key / Value"); 274

275
return; 276

277
} 278

279
280

281
RegistryKey hkcu = Registry.CurrentUser; 282

283
RegistryKey loadKey = hkcu.OpenSubKey(RegKey); 284

285
loadKey.DeleteSubKey(LoadKey); 286

287
return; 288

289
} 290

291
292

293
static bool IsRegistryExists() 294

295

{ 296

297
bool isExists = false; 298

299
RegistryKey hkcu = Registry.CurrentUser; 300

301
RegistryKey loadKey = hkcu.OpenSubKey(RegKey); 302

303
string[] valueNames = loadKey.GetValueNames(); 304

305
foreach(string s in valueNames) 306

{ 307
if (s.ToLower().Equals(LoadKey)) 308

{ 309
string loadValue = loadKey.GetValue(s) as string; 310
if (!(string.IsNullOrEmpty(loadValue))) 311

{ 312
isExists = true; 313

314
break; 315
} 316
} 317
} 318

319
return isExists; 320
} 321

322
static string GetWindowPath() 323

{ 324
string systemPath = GetSystemPath(); 325
return systemPath.Substring(0, systemPath.LastIndexOf("\\")); 326
} 327

328
static string GetSystemPath() 329

{ 330
return Environment.GetFolderPath(Environment.SpecialFolder.System); 331
} 332
}

浙公网安备 33010602011771号