Título: Como crear un Troyano en Java Publicado por: egyware en 25 Agosto 2009, 16:14 pm 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 peruana (http://www.tecnolust.com/foro/index.php?topic=625.msg3485) Conocimientos Previos Antes 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/. Título: Controlando el PC Publicado por: egyware en 25 Agosto 2009, 16:17 pm 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.html Citar This 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 -Constructor Robot() Robot(GraphicsDevice screen) El primero se contruye para el monitor principal El Segundo para un monitor que uno defina -Metodos createScreenCapture(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. - Cuidados Esta 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. Título: Obteniendo informacion util Publicado por: egyware en 25 Agosto 2009, 16:36 pm 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 Código 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. Título: Obteniendo informacion util(2) Publicado por: egyware en 25 Agosto 2009, 16:39 pm 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.File primero 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: Código 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 Código Eso es todo, por hoy. La proxima respuesta sera control remoto ;D :P Título: Control Remoto Publicado por: egyware en 25 Agosto 2009, 16:42 pm 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. Título: Control Remoto (2) Publicado por: egyware en 25 Agosto 2009, 16:44 pm Clases a usar
java.net.ServerSocket java.net.Socket Programa para testear Telnet Primero que nada haremos un ejemplo de un servidor de eco este ejemplo lanza IOException pero no los colocare para simplificar el codigo Código
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. Título: Control Remoto (3) Publicado por: egyware en 25 Agosto 2009, 16:51 pm Hola a todos, siguiendo el tema
Código Pero que es esto :huh: 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 Código
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 ;D Título: Concretanto el programa Publicado por: egyware en 25 Agosto 2009, 16:56 pm 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 :huh:) 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 Directa Se 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 Código
PC Cliente (osea el tuyo) Código
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 Código
PC Cliente (osea el tuyo) Código Asumiendo nombre_cualquiera.no-ip.info es una direccion no-ip tuya actualizada a la ip que tienes Título: Añadidos Publicado por: egyware 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 pantalla Debes 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 archivos Es 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 ;D ;D ;D Título: Re: Como crear un Troyano en Java Publicado por: kinos en 25 Agosto 2009, 17:59 pm Muy interesante tu post :o ;-)
Título: Re: Como crear un Troyano en Java Publicado por: h0oke en 26 Agosto 2009, 04:01 am Código
Una pregunta... existen puertos negativos? Título: Re: Como crear un Troyano en Java Publicado por: egyware en 26 Agosto 2009, 04:11 am Que yo sepa no, ademas los puertos son enteros sin signo de 2 bytes.
Asi que tienes un limite de 65000(aprox) puertos pero los primeros 1000 son reservados. PS: redaccion mala!! Título: Re: Como crear un Troyano en Java Publicado por: h0oke en 26 Agosto 2009, 04:36 am :O Entonces en java el int solo implica enteros sin signo?
Título: Re: Como crear un Troyano en Java Publicado por: [u]nsigned en 26 Agosto 2009, 06:09 am Supongo que depende de si la JVM trabja a 32 o 64bits. Pero no existe una cosa como unsigned int en Java.
[offtopic]no es un lenguaje positivo[/offtopic] De modo que la unica forma de hacerle un 'cast' a enteros positivos es mediante algun algoritmo propio con condicionales. Saludos Título: Re: Como crear un Troyano en Java Publicado por: h0oke en 26 Agosto 2009, 12:11 pm Gracias por la aclaración Facu.
Título: Re: Como crear un Troyano en Java Publicado por: juancho77 en 28 Agosto 2009, 05:22 am La instrucción:
Código
es totalmente válida. No se por qué dicen que no se pueden guardar enteros negativos en int. ON-TOPIC: El manual esta muy bueno, pero esta muy mal redactado. Podrías empeñarte en desarrollar mejor las ideas. Título: Re: Como crear un Troyano en Java Publicado por: egyware en 28 Agosto 2009, 05:33 am Perdon, por la mala redaccion.
Claro que almacenar un negativo en un int es valido pero... si quieres usar ese numero negativo para abrir un puerto es posible que salga una excepcion!! Adios. Título: Re: Como crear un Troyano en Java Publicado por: [u]nsigned en 28 Agosto 2009, 05:36 am La instrucción: Código
es totalmente válida. No se por qué dicen que no se pueden guardar enteros negativos en int. En realidad lo que se está diciendo es que no se puede declarar un int como solo positivo, como se haría en C/C++ con Código
Saludos Título: Re: Como crear un Troyano en Java Publicado por: 1mpuls0 en 28 Agosto 2009, 07:37 am juancho77
Citar No se por qué dicen que no se pueden guardar enteros negativos en int. Me parece que leiste o entendiste mal. dynyck Citar Una pregunta... existen puertos negativos? egyware Citar Claro que almacenar un negativo en un int es valido pero... si quieres usar ese numero negativo para abrir un puerto es posible que salga una excepcion!! Citar El manual esta muy bueno, pero esta muy mal redactado. Podrías empeñarte en desarrollar mejor las ideas. Estoy deacuerdo... Muy interesante post Saludos Título: Re: Como crear un Troyano en Java Publicado por: joinko en 14 Enero 2011, 02:54 am con un condicional muy simple solucionas el caso de que te salgan puertos negativos. Es más supongo que se deberian reestringir aún más no soloo a negativos si no también a puertos conocidos.
supongo que ya lo tendréis claro muchos antes que lo diga Simplemente: Muy buena la info!! Que no se acabe este post! Título: Re: Como crear un Troyano en Java Publicado por: Chivin en 4 Diciembre 2011, 03:31 am Ola amigos soy nuevo en el foro y veo las fechas y espero que el post no este completamente olvidado :D
Me dejaron un trabajo escolar de algo semejante, lo mismo pero sencillo. Hasta ahora estoy trabajando en la aplicación, pero en mi misma computadora y ya pude hacer las capturas de pantalla y las iteraciones con el mouse (lo estoy ejecutando en la misma computadora), tengo los siguientes problemas y de los cuales no encuentro mucho, uno es como puedo ver el puntero de la computadora (la que en teoría sería la remota) y el otro problemita es que no puedo escribir en la máquina que controlo, bueno puede ser que se deba a que es la misma computadora, mas sin embargo me ha estraño porque parece como si se quedara ciclado en el evento, puse un println para que muestre el código de la tecla presionada y lo imprime hasta que no ocurre un evento. Espero darme a entender gracias Título: Re: Como crear un Troyano en Java Publicado por: egyware en 4 Diciembre 2011, 03:38 am Hola, bueno creo que los moderadores se van a enojar por revivir post viejos bueno espero que no cierren este tema
Raro no me cargan las paginas de Oracle, pero te dejo una pista para que investigues,con la clase MouseInfo tu puedes saber la posición del Mouse y con Robot tu puedes escribir en el teclado (remoto). Para saber la posición del mouse te recomiendo que le des un poco de tiempo cuando se ejecuta el main loop de tu programa para capturar la posición del mouse. http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/MouseInfo.html http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/Robot.html Saludos!!! Título: Re: Como crear un Troyano en Java Publicado por: Chivin en 4 Diciembre 2011, 04:30 am Ola egyware gracias por el dato y espero que no se enojen los moderadores :D
Checo el dato de MoseInfo. El programa que tengo estoy utilizando la clase Robot para hacer las capturas y los eventos del Mouse, eso ya lo tengo y creo que no me he dado a entender, quisiera hacer algo parecido a una función de team viewer la cual es la de ver el puntero remoto. En cuanto al teclado si lo he tratado con la clase robot, más específicamente Robot.keypress(keycode) es solo que presiono la tecla y parece como si la dejara presionada y el programa sigue así hasta que ocurre otro evento, bien haga click o minimice la pantalla :-\. muchas gracias por los consejos investigaré al respecto y cuando logré resolver el problema haré un post con los resultados ;D. Título: Re: Como crear un Troyano en Java Publicado por: egyware en 4 Diciembre 2011, 04:55 am La clase MouseInfo de dice donde está el mouse(pero no la imagén de este), y al usar Robot KeyPress debes hacer KeyRelease tambien :P para que las desprecione :P :P :P :P
Saludos! Título: Re: Como crear un Troyano en Java Publicado por: Chivin en 4 Diciembre 2011, 05:14 am De nuevo gracias egyware :o me acabas de dar una buena idea, trabajare en ella y posteriormente mostraré los resultados gracias, haber que alternativa encuentro para mostrar el apuntador remoto ya se me ocurrirá algo sino puedo con esta idea.
;-) ;-) ;-) ;-) ;-) ;-) ;-) Saludos ;) |