Autor
|
Tema: Como crear un Troyano en Java (Leído 39,399 veces)
|
egyware
|
Hola saludos, aqui estoy dando un aporte grandisimo, me he animado de ganas para copiar y pegar mi antiguo post de otro foro a acá para que lo vean. Omitire el faq que hice hace tiempazo porque al parecer todo son hackers, le agradezco tambien a Casidiablo que estubo ayudandome con algunos algoritmos, en especial para enviar imagenes. Bueno no les enviare mi source ni jar, porque no quiero que sean flojos hagan el suyo propio a mi me costo mucho!!!. Post Orignal: Post en Tecnolust comunidad peruanaConocimientos PreviosAntes de empezar Debes saber el uso de ciertas clases - Socket y SocketServer (si ya sabes puedes probar SSLSocket), estas clases estan en java.net - InputStream y OutputStream y todas sus derivadas, estas estan en java.io - saber usar el Programa Telnet, es muy util a la hora de enviar comandos Entendibles - saber Programar en Java, no te enseñare aqui si no sabes pregunta en otro tema o bajate manuales. - Usar un IDE, te ayudara a editar mucho mas rápido tu codigo, probarlo. - No importa el OS que uses, linux y windows son lo mismo para java (a excepcion de windows que es mas facil de implementar el autoejecutable reg...) Esta obra está publicada bajo una Atribución-No Comercial 2.0 Chile de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc/2.0/cl/.
|
|
« Última modificación: 25 Agosto 2009, 17:26 pm por egyware »
|
En línea
|
|
|
|
egyware
|
Uso de la Clase que nos dara un gran poder sobre el pc infectado (desde ahora el pc zombie guajaajaa) java.awt.Robot vee en http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Robot.htmlThis class is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. The primary purpose of Robot is to facilitate automated testing of Java platform implementations.
Upss!!!! Bueno resumidamente dice esta clase es solo para probar y testear implementacions de Java Pero lo usaremos para otros motivos -ConstructorRobot() Robot(GraphicsDevice screen) El primero se contruye para el monitor principal El Segundo para un monitor que uno defina -MetodoscreateScreenCapture(java.awt.Rectangle screenRect) returns java.awt.image.BufferedImage Permite obtener screenshoots de la pantalla o monitor zombie, su parametro es la dimesion a copiar keyPress(int keycode) y keyRelease(int keycode) Nos permitiran presionar y soltar teclas, las teclas estan definidas en java.awt.event.KeyEvent.VK_*, donde * es una tecla tb si usamos char pero solo conteniendo letras en mayusculas como parametro se escribira la tecla correspondiente en mayuscula o minuscula dependiendo si tiene el bloqueo de mayuscula activado mouseMove(int x, int y) Moverá el mouse a la posicion indicada mousePress(int buttons) y mouseRelease(int buttons), presionar o soltara el boton del mouse eso esta definido en java.awt.event.InputEvent.BUTTONX_MASK, donde X es igual a 1,2,3 que corresponden al boton izquierdo, centro, derecho respectivamente. - CuidadosEsta clase puede lazar una excepcion del tipo AWTExcepcion, asi que mucho cuidado, tratenla con amor, y en linux hay que tener permisos especiales a la aplicacion para lanzar eventos de bajo nivel. Bueno eso es todo si quieren pueden revisar la pagina que les di tiene mas informacion sobre la clase.
|
|
« Última modificación: 25 Agosto 2009, 16:19 pm por egyware »
|
En línea
|
|
|
|
egyware
|
Hasta este punto creo a alguien ya se a topado con estas clases. java.util.Properties y java.awt.Toolkit Bueno estas clases nos daran cierta informacion util sobre el pc zombie, pero asi por si solas no haran nada, de por si nada, entonces hay que inicialisarlas
ok tenemos los datos inicialisados, pero que ganamos con eso con Toolkit toolkit. getScreenSize();obtenemos el tamaño de la pantalla que es util para obtener screenshoot Properties propiedades. list(System.out);Con esto obtenemos una lista de propiedades, con esa lista solo seleccionaremos la que nos mas nos gusta como os.name nombre del os user.name nombre del usuario ....... bueno eso es todo ahora espero que con esto creen una clase que sea capas de crear eventos de bajo nivel(Robot) obtener informacion del sistema y realizar capturas de pantalla. Asi como tarea haganlo!!! Enojado yo ya hice uno mejor al que tenia pero tiene ademas acceso a la consola(Cmd o bash) y registro de windows. Espero que realicen esta clase y vean como controlan su propio pc jijiji.
|
|
|
En línea
|
|
|
|
egyware
|
Mostrar informacion sobre los ficheros en el pc. Bueno esto no se si será taaaan util mas bien de curioso Pero si puede ser util cuando nos encontramos algún pedofilo y denunciarlo y hacer algo bueno por el mundo. Bueno entre otras cosas. Clase a utilizar java.io.Fileprimero que nada como mostramos los ficheros contenidos en el pc zombie Huh ¿Como sabemos si es un windows o un linux? Porque el sistema de ficheros es distinto Aunque con la repuesta anterior se sabe bien que os con cual estamos trabajando, pero hay otra forma mucho mas facil File root[] = File.listRoots(); Con esto de inmediato obtenemos los archivos del directorio raíz. Pero como si Windows no tiene un directorio raíz como los Linux!!!!! Bueno en realidad no pero sin embargo el arreglo root en Windows contendrá las unidades de disco como A: B: C: D: ..... mientras que en un Linux (no estoy seguro) mostrara todos los archivos contenidos en / (directorio raíz), entonces ya sabemos cuales son sus archivos y/o directorios empezamos a trabajar con ellos. Basta solo tomar un elemento del arreglo y usar el metodo listFiles() para mostrar los archivos contenidos en ese directorio, como nota nunca he probado con un archivo que lo que pasa siempre he tenido la precaución de solo usar directorios(haciendo la precaucion isDirectory()). En Resumen un poco de codigo: //getAbsolutePath() uso este metodo para mostrar la ruta completa del archivo involucrado //Mostrarlos for(int i=0;i<root.length;i++) System. out. println(root [i ]. getAbsolutePath()); //tomando cualquiera File dirs [] = root [0]. listFiles(); for(int i=0;i<dirs.length;i++) System. out. println(dirs [i ]. getAbsolutePath()); //ahora uno cualquiera File dirs [] = new File("C:\\Windows"). listFiles(); for(int i=0;i<dirs.length;i++) System. out. println(dirs [i ]. getAbsolutePath());
Eso es todo, usen el ultimo metodo solo con la precaucion que de exista y sea directorio por que no he probado que es lo que pasa y como Regalito Sonreir parte de mi codigo, de la clase que contrala el pc, que muestra los archivos del pc zombie try { StringBuilder sb = new StringBuilder(); if (CS. CheckEqual("ROOT", parameter ))mostrar = File. listRoots(); else { if(!ver.exists()) return "No Existe\n\r"; if(!ver.isDirectory()) return "No es un Directorio\n\r"; mostrar = ver.listFiles(); } for(int i = 0;i <mostrar.length ;i++){ sb.append('\r'); sb.append(mostrar[i].getAbsoluteFile()); sb.append('\n'); } sb.append('\r'); return sb.toString(); return "Error: "+e+"\n\r"; } }
Eso es todo, por hoy. La proxima respuesta sera control remoto
|
|
|
En línea
|
|
|
|
egyware
|
Hola a Todos Como algunos se dieron cuenta puse una carita triste, porque este tema es muy dificil de implementar, aunque existe varias formas de hacerlo usando Comandos por Texto o comandos binarios, pero por comodidad de prueba lo hare por texto porque es mas facil de probar que el binario pero es mas lento en comunicacion que el binario, por ejemplo definimos un comando de mover el mouse Binario (byte)(int)(int) el primer byte es el codigo para mover el mouse los 8 siguientes bytes son dos enteros que tienen la posicion (x,y) para mover el mouse Algoritmo leer un byte revisar con un if o swicth si es igual al byte predefinido como MOVE crear 2 variables x e y como enteras leer un entero de 4 bytes y guardarlo en x leer un entero de 4 bytes y guardarlo en y mover el mouse a la posicion indicada Nota: Cuidado los bytes del entero pueden estar en Big o Little Endian
Texto (char ?)(char) "MOVE 100 100\n" la longitud del comando es desconocida pero sabemos que termina en un char y ese char es un salto de linea '\n' a esto debe tratarse de forma especial Algoritmo leer una linea empieza con "MOVE" crear una variable auxiliar parametro parametro toma el mismo valor que la linea leida sin "MOVE " buscar el indice del espacio ' ' crear variable x con el valor del numero que esta contenido en parametro desde 0 hasta el indice del espacio crear variable y con el valor del numero que esta contenido en parametro desde indice del espacio + 1 mover el mouse el mouse a la posicion indicada
Bueno en resumen estamos metidos en un problema, como lo hacemos bueno por recomendacion yo digo hacerlo en txt ya que con el programa Telnet podemos probar rapidamente pero sin embargo en binario deberiamos hacer un programa aparte para probar.
|
|
« Última modificación: 25 Agosto 2009, 16:57 pm por egyware »
|
En línea
|
|
|
|
egyware
|
Clases a usar java.net.ServerSocket java.net.Socket
Programa para testear TelnetPrimero que nada haremos un ejemplo de un servidor de eco este ejemplo lanza IOException pero no los colocare para simplificar el codigo import java.net.*; import java.io.*; public class Manejador implements Runnable{ public Manejador (Socket socket ){ //esto siempre lo haremos this.socket = socket; } public void run(){ while(true){ line = in.readLine(); out.write(line); out.write("\n\r"); out.flush(); } } public static void main (String args []){ int puerto = 4444; while(true){ new Thread(new Manejador (servidor. accept())). start(); } } }
Este servidor es simple, primero deben compilarlo y ejecutarlo es posible que en windows salga alguna advertencia del firewall solo hagan click en desbloquear despues de eso escriben en su consola telnet localhost 4444 luego cada cosa que escriban se les devolvera bueno este ejemplo es para que conozcan un poco la mecanica de de un Servidor y cliente si se dieron cuenta tiene un bucle while que se repite siempre luego lee un mensaje entrante (se bloquea hasta conseguir uno) y lo escribe mas \n y \r y libera el buffer(out.flush) bueno eso es todo por el momento. En el siguiente post concretaremos algo mejor.
|
|
« Última modificación: 25 Agosto 2009, 16:46 pm por egyware »
|
En línea
|
|
|
|
egyware
|
Hola a todos, siguiendo el tema public static void main (String args []){ int puerto = 4444; while(true) new Thread(new Manejador (servidor. accept())). start(); }
Pero que es esto Bueno antes de seguir les debo mas explicación lo que hace este codigo se pone a la escucha en el puerto 4444, pero ¿Qué es un puerto? un puerto es una entrada o conexión a la internet (red), una computadora usa una direccion (IP) y un puerto para conectarse a otra computadora como por ejemplo google.com y 80, google.com se traduce a una direccion ip, entonces uno para bajar contenido desde la internet generalmente (no siempre) uno se conecta al puerto 80 del computador remoto. Siguiendo con la explicacion la clase ServerSocket se pone a la eschucha en el puerto 4444 en la direccion localhost (127.0.0.1), eso es lo que hace ese constructor, pero no solo con crearlo basta hay que ponerse a la escucha servidor.accept() este metodo lo que hace es ponerse a la escucha y esperar una conexión(se bloquea hasta recibirla), entonces cuando llega una devuelve un objeto Socket con tal conexión, luego esa conexión se la pasamos como argumento a nuestro clase Manejador, el objeto recien creado se lo pasamos a Thread y le echamos andar el thread un poco complicado eh!!! Dentro del run es donde hacemos todo bueno eso depende del programador como lo haga, pero yo prefiero hacer lo ahí. Ahora nuestro servidor eco lo moficaremos solo en la parte donde esta el metodo run public void run(){ //debes saber que omito las capturas de errores //esta variable se usa para seguir la ejecución (done significa hecho) la inicializo false porque es natural decir que no esta listo boolean done = false; //esta variable se usa para almacenar la linea leida //como no esta listo uso la negacion de done (!done) while(!done){ //dentro del while aqui bucle while viene la magia (la magía como decia mi abuelo Q.E.P.D) line = in.readLine().trim(); //al igual que el servidor eco, pero borramos los espacios que pueda tener (adelante o atras) //vamos con la magia (redoble de tambores) if(line.equalsIgnoreCase("Comando1")){ //eee lo logramos //accion 1 out.write("Respuesta1"); }else if(line.equalsIgnoreCase("Comando2")){ //otro más //accion 2 out.write("Respuesta2"); }//..... y todos los que se te ocurra //ves facil aa se me le olvidava //aqui antes de salir del bloque while hacemos un flush de los datos out.flush(); } }
Viste que facil ahora es solo cuestión de inventar comandos y acciones concretas complementando con las primeras respuestas ya tenemos nuestro troyano y poderlo probar de inmediato con el programa telnet este programa correra hasta que tu inventes un comando para que done se haga true Nota: Puedes modificar la Implementación de StringTokenizer para revisar comandos y argumentos actualmente lo tengo asi y me funciona de maravilla
|
|
|
En línea
|
|
|
|
egyware
|
Bueno hasta el momento tenemos listo nuestro troyano ¿Pero como podemos infectar a otros pc? ¿Como hacemos que se conecte a nosotros? Bueno la pregunta de como infectar estan en los temas de diseño de Malware (sumpongo ) Entonces como hacemos que se conecte??? Facil tenemos 2 metodos conexión Directa conexión Inversa No explicare de que se tratan porque existe una explicacion mejor en otros foros de aqui pero hare un resumen de ellas conexión DirectaSe trata de que el pc zombie se pone a la escucha y espera conecciónes Ventajas: - No se ninguna Desventajas - Bloqueo Firewall - Debes buscar la IP del infectado (las mayoria de las IP son dinámicas Enojado) PC Zombie.....
PC Cliente (osea el tuyo).....
conexión Inversa Se trata de el pc zombie se conecta a ti Ventajas - No buscas la IP del pc infectado Desventajas - Debes desbloquear puertos del router (no hay problema existen muchos manuales ) - Debes tener una direccion no-IP(ó un nomnbre DNS) en caso de que tengas una direccion IP dinámica PC Zombie....
PC Cliente (osea el tuyo).....
Asumiendo nombre_cualquiera.no-ip.info es una direccion no-ip tuya actualizada a la ip que tienes
|
|
|
En línea
|
|
|
|
egyware
|
|
Añadidos
« Respuesta #8 en: 25 Agosto 2009, 17:07 pm » |
|
Hola he terminado de transcribir todo mis mensajes y creo que faltaron algunas cosas, como por ejemplo tranferencia de Archivos y Imagenes, bueno voy hacer un esbozo de como hacerlo. Para la pantallaDebes capturar la pantalla usando la clase Robot, luego debes escribirla en un Arreglo de bytes. Para eso puedes usar las clases que estan en javax.imageio que permiten escribir y leer imagenes y para el Arreglo de Bytes usa la clase ByteArrayOutputStream(creo que se llama asi) pero puedes encontrartelas en el paquete java.io. Luego envias el arreglo de bytes usando algun protocolo. El post donde le preguntaba a casidiablo como enviar imagenes debe estar perdido por aqui si se dan la flojera pueden buscarlo yo no lo he encontrado. Para los archivosEs casi lo mismo que la pantalla pero te recomiendo que uses un simple arreglo de bytes de 512, 1024,... osea un buffer porque si subes un archivo de golpe a la memoria tu troyano se caera. Entonces inventas un sistema que te permita enviar de a pedazos y reconstruirlo en tu pc. Para esto yo invente sistemas apartes, osea realizo otras conexiones, con protocolos distintos. Bueno eso es todo, no tengo mas que enseñarles y/o mostrarles. Me despido espero que sea de su compresión y agrado. Adios
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
crear un troyano en java
« 1 2 »
Java
|
danielo-
|
13
|
12,449
|
28 Noviembre 2009, 03:32 am
por egyware
|
|
|
¿como enviar un archivo especifico(troyano) como una actualizacion java?
Hacking
|
thedevilini
|
5
|
6,066
|
25 Noviembre 2011, 08:44 am
por adastra
|
|
|
Ayuda Troyano Java
Análisis y Diseño de Malware
|
patxiku10
|
1
|
2,825
|
22 Abril 2012, 01:39 am
por $Edu$
|
|
|
Como crear un troyano vbasic
« 1 2 »
Análisis y Diseño de Malware
|
âtâck8
|
13
|
7,696
|
28 Abril 2012, 21:28 pm
por âtâck8
|
|
|
Como crear un virus troyano actualizado
« 1 2 »
Análisis y Diseño de Malware
|
rober21
|
11
|
29,254
|
23 Junio 2021, 09:42 am
por xxxposeidonxxx
|
|