-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscan.java
More file actions
167 lines (145 loc) · 7.34 KB
/
scan.java
File metadata and controls
167 lines (145 loc) · 7.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
package Scan;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class scan {
private static final List<String> semnaturaMalware = new ArrayList<>();
private static int fisiereScanate = 0;
private static int fisiereSuspecte = 0;
// Semnături simple pentru demonstrație
static {
// Semnături comune pentru malware (doar pentru exemplificare)
semnaturaMalware.add("4d5a9000"); // Semnătura executabile PE
semnaturaMalware.add("7f454c46"); // Semnătura executabile ELF
semnaturaMalware.add("504b0304"); // Semnătura arhive ZIP (posibile malware ascunse)
semnaturaMalware.add("cafebabe"); // Semnătura pentru fișiere Java Class
// Adăugare semnături suplimentare executabile
semnaturaMalware.add("23212f62"); // Shebang pentru scripturi bash #!/b
semnaturaMalware.add("23212f75"); // Shebang pentru scripturi Unix #!/u
semnaturaMalware.add("3c3f7068"); // PHP Script <?ph
semnaturaMalware.add("3c68746d"); // HTML/posibil malware <htm
semnaturaMalware.add("3c736372"); // JavaScript în HTML <scr
semnaturaMalware.add("696d706f"); // Python import impo
semnaturaMalware.add("52656d6f"); // Macro VBA Remo
semnaturaMalware.add("d0cf11e0"); // Fișier Office vechi (OLE) - poate conține macro-uri
semnaturaMalware.add("2521444f"); // Adobe PDF cu JavaScript %!DO
semnaturaMalware.add("41430b00"); // Fișier Windows Help (CHM) - folosit în atacuri phishing
semnaturaMalware.add("5349502d"); // Windows Installer MSI SIP-
semnaturaMalware.add("7b5c7274"); // Format RTF (poate conține exploituri) {\rt
semnaturaMalware.add("4c000000"); // Windows LNK (shortcut) L...
semnaturaMalware.add("4a415243"); // JAR (arhivă Java) JARC - corectat
semnaturaMalware.add("377abcaf"); // 7-Zip archive (poate conține malware) 7{..
semnaturaMalware.add("25504446"); // PDF %PDF - corectat
semnaturaMalware.add("0000000c"); // JNLP (Java Web Start) - corectat
// Semnături specifice malware comune (șabloane cunoscute)
semnaturaMalware.add("6575726f"); // Signatura troian euro - corectat
semnaturaMalware.add("4c6f6164"); // Signatura downloader Load - corectat
semnaturaMalware.add("54726f6a"); // String "Troj" în binar
semnaturaMalware.add("57696e64"); // WinDefender fals (string "Wind")
semnaturaMalware.add("6e657463"); // Netcat sau reverse shells (string "netc") - corectat
semnaturaMalware.add("6d657461"); // Signatura Metasploit (string "meta") - corectat
semnaturaMalware.add("68656c6c"); // Signatura hello tipică în programe ransomware - corectat
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== SCANARE MALWARE ===");
System.out.println("Introduceți calea directorului pentru scanare (ex: C:\\Users\\nume):");
String dirPath = scanner.nextLine();
System.out.println("\nÎncepere scanare în: " + dirPath);
System.out.println("Vă rugăm așteptați, scanarea poate dura câteva minute...\n");
try {
Path startingDir = Paths.get(dirPath);
Files.walkFileTree(startingDir, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
scanareFisier(file.toFile());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
System.out.println("Nu s-a putut accesa: " + file.toString());
return FileVisitResult.CONTINUE;
}
});
System.out.println("\n=== REZULTATE SCANARE ===");
System.out.println("Fișiere scanate: " + fisiereScanate);
System.out.println("Fișiere suspecte detectate: " + fisiereSuspecte);
} catch (IOException e) {
System.out.println("Eroare în timpul scanării: " + e.getMessage());
}
scanner.close();
}
private static void scanareFisier(File fisier) {
fisiereScanate++;
if (fisiereScanate % 100 == 0) {
System.out.println("Scanare în progres... " + fisiereScanate + " fișiere verificate.");
}
// Verificare extensii periculoase
if (areExtensiePericuloasa(fisier)) {
System.out.println("[SUSPECT] Extensie potențial periculoasă: " + fisier.getAbsolutePath());
fisiereSuspecte++;
return;
}
// Scanare conținut fișier pentru semnături
if (fisier.length() < 10_000_000) { // Scanăm doar fișiere mai mici de 10MB
try {
String signatura = calculareHashPrimiiBytes(fisier);
if (signatura != null && esteSignaturaVirus(signatura)) {
System.out.println("[PERICOL] Posibil malware detectat: " + fisier.getAbsolutePath());
fisiereSuspecte++;
}
} catch (Exception e) {
// Ignorăm erorile la deschiderea fișierelor
}
}
}
private static boolean areExtensiePericuloasa(File fisier) {
String nume = fisier.getName().toLowerCase();
return nume.endsWith(".exe") || nume.endsWith(".dll") ||
nume.endsWith(".bat") || nume.endsWith(".cmd") ||
nume.endsWith(".scr") || nume.endsWith(".vbs") ||
nume.endsWith(".js") || nume.endsWith(".jar");
}
private static String calculareHashPrimiiBytes(File fisier) {
try {
byte[] buffer = new byte[4]; // Citim primii 4 bytes pentru semnătură
if (Files.size(fisier.toPath()) >= 4) {
byte[] data = Files.readAllBytes(fisier.toPath());
System.arraycopy(data, 0, buffer, 0, 4);
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(buffer);
byte[] digest = md.digest();
return byteArrayToHex(buffer).toLowerCase();
}
} catch (IOException | NoSuchAlgorithmException e) {
// Ignorăm erorile
}
return null;
}
// Metodă pentru convertirea unui array de bytes în format hexazecimal
private static String byteArrayToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
private static boolean esteSignaturaVirus(String signatura) {
for (String sig : semnaturaMalware) {
if (signatura.startsWith(sig)) {
return true;
}
}
return false;
}
}