elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [JARs] Como modificar un archivo que esté en un mismo jar?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [JARs] Como modificar un archivo que esté en un mismo jar?  (Leído 9,169 veces)
klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
[JARs] Como modificar un archivo que esté en un mismo jar?
« en: 23 Mayo 2011, 06:25 am »

Buenas, tengo el siguiente problema con los archivos.jar

¿Como podría modificar los archivos que están compresos en el mismo jar con una aplicacion en java?

Por ejemplo, tengo mi archivo.class en una carpeta, en esa misma carpeta tengo una carpeta con archivos *.txt y la carpeta con el manifest, ok si compilo y ejecuto a nivel de linea de comandos puedo modificar el contenido de cualquier archivo.txt que esté en dicha carpeta, ahora bien, si comprimo y ejecuto el ejecutable.jar al tratar de trabajar con el directorio actual me toma el directorio donde está el .jar y no el directorio que está dentro del .jar, entonces mi duda es: ¿se puede trabajar con los archivos que están compresos dentro del .jar? ¿como?

No quisiera llegar a tener que depender de archivos externos  :-\

De antemano, gracias  :D

Saludos  ;)


En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: [JARs] Como modificar un archivo que esté en un mismo jar?
« Respuesta #1 en: 23 Mayo 2011, 20:49 pm »

Hola

Interesante tema.

No sé muy bien que intentas hacer como para querer modificar el .txt

Hasta donde sé no se puede de una forma tan fácil.

Investiga sobre la clase ZipFile tal vez contenga algún método que pueda ayudarte, ya que el jar es como un .zip.

Si no, la única solución es hacer lo que tenga que hacer tu aplicación y al momento de querer modificar el .txt crear una copia del jar,extraer el contenido, modificar el .txt, terminar la aplicación, volver a crear el jar, renombrarlo e iniciar de nuevo la aplicación.

Explica mejor que es lo que intentas hacer y a ver si encontramos una mejor solución.

Saludos.



En línea

abc
klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
Re: [JARs] Como modificar un archivo que esté en un mismo jar?
« Respuesta #2 en: 28 Mayo 2011, 08:44 am »

Intentaba hacer un programa que me logeara en paginas, resolví hacerlo de la siguiente forma:

> Un método que escribe archivos, lo uso para escribir un vbs que envíe pulsaciones de teclas, como no supe llamar al vbs desde java resolvi usar este mismo metodo para escribir un bat que llame al vbs y le pase los argumentos con cscript

> Un metodo que reciba los argumentos necesarios para escribir el bat y que llame al vbs

> Esop, el resto lo hace el vbs, luego de abrir el navegador con la url especificada, muestra un msgbox y cuando se le da aceptar espera tres segundos y envía las pulsaciones de teclas.

Dejo el code de los métodos que uso, dejaría el code completo pero la gui la hice en netbeans, ya no me da el ánimo para codear en bloc de notas Xd

para escribir un archivo:

Código
  1. void writer(String[] args, String file, boolean rewrite, boolean delete_on_exit){
  2.  
  3.        /**
  4.          *
  5.          * El primer argumento indica
  6.          * las palabras que se agregaran al archivo de
  7.          * texto plano.
  8.          *
  9.          * El segundo argumento indica la ruta de
  10.          * dicho archivo.
  11.          *
  12.          * Si el tercer argumento
  13.          * es true el archivo
  14.          * se sobreescribe
  15.          *
  16.          * Si el cuarto argumento es true
  17.          * el archivo se borra al cerrar
  18.          * el programa
  19.          *
  20.          *
  21.          */
  22.  
  23.    String[] in=this.reader(file).split("\n");
  24.  
  25.    Writer w=new Writer(file, delete_on_exit);
  26.  
  27.    if(rewrite){
  28.  
  29.        w.touch();
  30.  
  31.    }else{
  32.  
  33.    for(String val:in){
  34.  
  35.        w.write(val);
  36.  
  37.    }
  38.  
  39.    }
  40.  
  41.    for(String val:args){
  42.  
  43.        w.write(val);
  44.  
  45.    }
  46.  
  47.    w.close();
  48.  
  49.    }
  50.  
  51.  

Y la clase writer:

Código
  1. class Writer {
  2.  
  3.    java.io.BufferedWriter bw;
  4.  
  5.    String file="";
  6.  
  7.    Writer(String foo, boolean delete){
  8.  
  9.        this.file=foo;
  10.  
  11.        try{
  12.  
  13.            File f = new File(this.file);
  14.  
  15.            if(delete){
  16.  
  17.            f.deleteOnExit();
  18.  
  19.            }
  20.  
  21.            bw=new BufferedWriter(new FileWriter(f));
  22.  
  23.        }catch(IOException ex){
  24.  
  25.        }
  26.    }
  27.  
  28.    public void write(String line){
  29.  
  30.        try{
  31.  
  32.        bw.append(line);
  33.  
  34.        bw.newLine();
  35.  
  36.        }catch (IOException ex) {
  37.  
  38.            ex.printStackTrace();
  39.  
  40.        }
  41.  
  42.        }
  43.  
  44.  
  45.  
  46.    public void touch(){
  47.  
  48.  
  49.  
  50.        File f = new File(this.file);
  51.  
  52.        try{
  53.  
  54.            if(f.exists()){
  55.            f.delete();
  56.            f.createNewFile();
  57.            }else{
  58.            f.createNewFile();
  59.            }
  60.  
  61.        }catch(IOException c){
  62.  
  63.        }
  64.  
  65.    }
  66.  
  67.    public void touch(String foo){
  68.  
  69.        try{
  70.  
  71.            File fi= new File(foo);
  72.  
  73.            if(fi.exists()){
  74.  
  75.                fi.delete();
  76.                fi.createNewFile();
  77.  
  78.            }else{
  79.  
  80.                fi.createNewFile();
  81.  
  82.            }
  83.  
  84.        }catch(IOException c){
  85.  
  86.        }
  87.  
  88.    }
  89.  
  90. public void close(){
  91.  
  92.    try{
  93.  
  94.        this.bw.close();
  95.  
  96.    }catch(IOException ex){
  97.  
  98.    }
  99.  
  100. }
  101.  
  102. }
  103.  

El vbs, este no cambia

Código
  1.  
  2. set wss=createobject("wscript.shell")
  3. dim com
  4. com=""""
  5. wss.run("cmd /c start " + com + com + " " + wscript.arguments(0))
  6. msgbox "pulsa aceptar para logear"
  7. wscript.sleep 3000
  8. wss.sendkeys wscript.arguments(1)
  9. wscript.sleep 200
  10. wss.sendkeys "{tab}"
  11. wscript.sleep 200
  12. wss.sendkeys wscript.arguments(2)
  13.  
  14.  
  15.  

El bat, este se escribe con el método writer de java:

Código
  1.  
  2. @echo off
  3. cscript /nologo "C:\Users\Zero\desktop\temp.vbs" "http://foro.elhacker.net/login.html" "user" "pass"
  4.  
  5.  
  6.  

El metodo que llama al writer y escribe el bat (no recuerdo si fue este es que lo hice varias veces)

Código
  1.  
  2. public void cscript(String[] args, String vbs) {
  3.  
  4.        String temp = "";
  5.  
  6.        if (new File(System.getProperty("user.home") + "\\desktop").isDirectory()) {
  7.  
  8.            temp = System.getProperty("user.home") + "\\desktop\\temp.bat";
  9.  
  10.        } else if (new File(System.getProperty("user.home") + "\\escritorio").isDirectory()) {
  11.  
  12.            temp = System.getProperty("user.home") + "\\escritorio\\temp.bat";
  13.  
  14.        } else {
  15.  
  16.            temp = JOptionPane.showInputDialog("Dame el path de tu escritorio");
  17.  
  18.        }
  19.  
  20.        String args2 = "";
  21.  
  22.        for (String val : args) {
  23.  
  24.            args2 += " " + "\"" + val + "\"";
  25.  
  26.        }
  27.  
  28.        String com = "\"";
  29.  
  30.        String[] bat = {"@echo off", "cscript /nologo " + com + vbs + com + args2};
  31.  
  32.        this.writer(bat, temp, true, true);
  33.  
  34.        try {
  35.  
  36.            Runtime.getRuntime().exec("cmd /c " + temp);
  37.  
  38.        } catch (IOException ex) {
  39.        }
  40.  
  41.  
  42.  
  43.    }
  44.  
  45.  

Y bueno, el programa me salió, pero dependo mucho de estos archivos temporales, si hay otra solución sería genial, desde ya gracias por leer este tema.

Saludos  ;)
En línea

kiriost

Desconectado Desconectado

Mensajes: 58


www.godsys.com.ar Hacking y Programación


Ver Perfil WWW
Re: [JARs] Como modificar un archivo que esté en un mismo jar?
« Respuesta #3 en: 28 Mayo 2011, 22:22 pm »

Amigo si deseas enviar pulsaciones de tecla usa la clase Robot que trae Java, en vez de hacer tanto lío.  ::)

Acá te dejo un ejemplo de la utilización de la clase Robot:
Código
  1. import java.awt.Robot;
  2. import java.awt.event.*;
  3.  
  4. public class Main {
  5.    public static void main(String args[]) {
  6.        Robot bot = new Robot();
  7.        bot.keyPress(KeyEvent.VK_Q); //Presiona Q
  8.    }
  9. }
  10.  

Espero que te sirva. Y si quieres crear un bot que te registre en diferentes páginas te recomendaría informarte sobre los comandos HTTP (GET y POST) y crear un bot mediante sockets (yo ya tengo el mío)
En línea

http://www.godsys.com.ar > Programación. Hacking y Cracking. Sistemas. Desarrollo Web.
Java, C/C++, PHP, Python, Perl, HTML, Game-Hacking, Defacing, Desarrollo Web, GNU/Linux, y más
klaine

Desconectado Desconectado

Mensajes: 112



Ver Perfil WWW
Re: [JARs] Como modificar un archivo que esté en un mismo jar?
« Respuesta #4 en: 28 Mayo 2011, 23:15 pm »

Sry me faltó decir que la razón por la que quiero modificar un archivo dentro de un jar es porque este programa escribe mis direcciones en archivo de texto plano, el contenido es como sigue:

url#user#pass

Entonces después lo lee con un buffereredreader y lo divide con String.split("#")
Con eso creo los archivos ya mencionados, investigaré sobre la clase robot, no la conocía, gracias, pero ahora lo que necesito es eso de modificar el txt que esté dentro del jar (si hay otra opcion, bienvenida sea).

Saludos y gracias por vuestra ayuda  ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines