viernes, 27 de diciembre de 2013

Solución: WarGame: un mensaje raro ...


A continuación veremos como dar con la solución al reto del mensaje raro "for dummies" paso a paso .

Primero al ver el contenido se observa lo siguiente:

MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="----=_Part_0_21402567.1374097669328"

Buscamos que significa MIME ... leyendo un poco de esto vemos que es un formato para el intercambio de información por medio de Internet ( correos electrónicos son el formato MIME ) dato importante !!!.

¿Como leer correos en formato MIME? listo ya sabemos que hacer ahora solo pasamos el texto a un documento con extensión .eml, después de realizar este paso vemos que ya es reconocido por la aplicación de Microsoft Outlook procedemos a abrir el correo ...

cuando ejecutamos vemos un correo con el siguiente mensaje :
(algunos ya seguramente sabrán de que se trata este texto)....

dGllbmVzIHJhesOzbiBlcyBiYXNlNjQ=


viernes, 20 de diciembre de 2013

Wargame2: Mensaje Oculto


Primero que nada un saludo a todos los lectores de esta pagina que voluntaria o involuntariamente llegan a ella. 

Algunos de los que me conocen saben que unas de mis distracciones son los famosos "Wargames" (retos informáticos), que lo único que hacen es poner a prueba tus conocimientos en diversos tema del área de la seguridad:

  • Criptografia
  • Ingeniería Inversa
  • Esteganogracia
  • Vulnerabilidades en aplicaciones Web y Escritorio (incluso móviles)
  • etc...
que cada uno de los temas desenvuelve un conjunto conocimientos distintos en su rama.

El reto que diseñe hoy (para no arruinar otro Wargames) es describir descubrir la contraseña que necesita Homero Simpson para poder acceder a su computadora y realizar sus negocios por "la Internet".

la contraseña se encuentra en la imagen ¿crees poder encontrarla para ayudar al pobre de Homero Simpson?


la Imagen también la puedes descargar de:
imageshack.us/photo/my-images/199/kg4.bmp/




Saludos !!
Armando Mateu.

martes, 19 de noviembre de 2013

Crear datos con Random en SQL server


Generar datos con la nomenclatura 3 caracteres mayúscula y 3 Dígitos Numéricos
     
       "CCCNNN"

Rápidamente buscamos la tabla Ascii Mayúsculas del 65 al  95 .


Para los datos Numéricos aplicaremos el siguiente truco:



select CHAR(ROUND(65 + (RAND() * 25),0))
+ CHAR(ROUND(65 + (RAND() * 25),0)) 
+ CHAR(ROUND(65 + (RAND() * 25),0))
+ cast(ROUND(100 + (RAND() * 899),0) as char(3))


Saludos !!
Armando Mateu.


lunes, 28 de octubre de 2013

lunes, 2 de septiembre de 2013

Actualiza fecha y hora desde una pagina Web al iniciar Linux


El otro día note que mi computadora de "laboratorio" pruebas, no estaba actualizando de forma correcta la hora y fecha del día, al estar realizando unos programistas en bash y python, que al agregarlos a crontab no ejecutaban a la hora que yo quería, esto quiere decir que la pila de ese PC ya no funciona, pero como soy pobre para comprar una pila nueva y me da flojera ponerla, mejor programe un bash script que actualiza estos datos extrayendo de una pagina web al iniciar la computadora (http://www.fechadehoy.com/mexico) , esto me sirvió para reafirmar unos conocimientos en el tema de Scripts:
les dejo el código por si a alguien le sirve o lo quiere estudiar:

#!/bin/sh
fecha=$(curl -s www.fechadehoy.com/mexico | grep 'id="fecha"')
echo $fecha
hora=$(curl -s www.fechadehoy.com/mexico | grep 'Hora actual en Mexico:')
echo $hora

arrFecha=(`echo $fecha | tr ',' ' '`)
echo ${arrFecha[2]}
echo ${arrFecha[4]:0:2}
echo ${arrFecha[6]:0:4}

arrHora=(`echo $hora | tr ':' ' '`)
echo ${arrHora[11]}
echo ${arrHora[12]}

fechaActual="\"${arrFecha[2]} ${arrFecha[4]:0:3} ${arrFecha[6]:0:4} ${arrHora[11]}:${arrHora[12]}\""
echo ${fechaActual}

eval date -s ${fechaActual}


Para que se ejecute al inicio  lo agregamos al archivo de arranque de linux RC.local y listo!! ya tenemos nuestro programar al inicio de nuestra computadora.


Saludos !!
Armando Mateu.

lunes, 29 de julio de 2013

Descompilar Archivos .Class


Este es un tema ya muy trillado para ver el código fuente de programas ejecutables .Jar lo peor es que aun existen personas que dicen: "es imposible ver el código fuente de los programas Java" ...  Plop!!



Un programa para Windows fácil y rápido es: (DJ Java Decompiler)


Y un programa para Linux es : (Jad)


Le damos permisos de Ejecucion
chmod +x ./jad

Si al ejecutarlo muestra un error nos aseguramos de tener las dependencias con el siguiente comando
$ ldd jad

ejecutamos Jad de la siguiente forma:
./jad <fichero.class>


Ya contando con estos códigos ahora puedes estudiarlos y/o modificaros a tu gusto. 


Saludos!!
Armando Mateu

miércoles, 17 de julio de 2013

WarGame: un mensaje raro ...


Bueno este es mi primer reto wargame creado por mi, para quienes gusten invertir unos minutos resolviéndolo y aprendiendo.

"Una vez  me enviaron un correo un poco raro, que contenía un archivo adjunto muy importante con la palabra clave para entrar a otro sistema ultra secreto, me dijeron que el texto en este correo podría darme una pista."

¿Crees poder encontrar la palabra clave?...


MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_Part_0_21402567.1374097669328"

------=_Part_0_21402567.1374097669328
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<b>dGllbmVzIHJhesOzbiBlcyBiYXNlNjQ=</b>
------=_Part_0_21402567.1374097669328
Content-Type: application/octet-stream;
name="imagen.jpeg"

miércoles, 10 de julio de 2013

Como leer y escribir archivos Excel 2010 con Java



Paso 1:



 Paso 2:

Paso 3:




Paso 4(Lectura Excel 97-2003):



Paso 5(Escribir Excel 2010):

Output:



 Saludos !!
Armando Mateu.

martes, 28 de mayo de 2013

ABAP + Transacción SM69 o SM49 + TELNET + Script + Java


Hola que tal a todos lo lectores de este blogg, como bien saben la finalidad de este espacio es para contar mis historias, ayudas, memorias, notas, etc y compartir la solución a diversas situaciones.

Conocimientos previos:

-Unix ( especialmente en Bash )
-Comunicaciones TCP/IP
-Sockets
-Java
-ABAP

La problemática:
Surgió la "necesidad" de comunicar en un sistema SAP R/3, que por medio de un programa "ABAP", se conectara a un Socket (IP / PORT)  y es aquí donde surgió la polémica discusión   

:::: no!! se puede,
:::::si!! se puede,
::::::que no!! se puede...


y salieron las palabras "TE RETO A QUE LO HAGAS..." ( chan chan chan chaaan )

Mi respuesta fue:


jueves, 25 de abril de 2013

Combinar datos , eliminar Duplicados y Ordenarlos con List, HashSet y SortedSet JAVA





        String[] arr = {"1", "2", "3", "3"};
        List<String> lista1 = java.util.Arrays.asList(arr);
        List<String> lista2 = java.util.Arrays.asList("8", "6", "5");

        List<String> combinar = new ArrayList<String>();
        combinar.addAll(lista1);
        combinar.addAll(lista2);

        for (String s : combinar) {
            System.out.print(s + " ");
        }
        System.out.println();

        HashSet duplicado = new HashSet();
        duplicado.addAll(combinar);

        Iterator iterador = duplicado.iterator();
        while (iterador.hasNext()) {
            String elemento = (String) iterador.next();
            System.out.print(elemento + " ");
        }
        System.out.println();

        SortedSet ordenado = new TreeSet();
        ordenado.addAll(duplicado);

        iterador = ordenado.iterator();
        while (iterador.hasNext()) {
            String elemento = String.valueOf(iterador.next());
            System.out.print(elemento + " ");
        }
        System.out.println();




Salida:
1 2 3 3 8 6 5
3 2 1 6 5 8
1 2 3 5 6 8


Saludos!!
Armando Mateu

lunes, 15 de abril de 2013

Applet + MySQL ... Usar un Applet y Conectar a MySQL



Usar un Applet y Conectar a MySQL


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import javax.swing.table.DefaultTableModel;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author ahmateu
 */
public class Principal extends javax.swing.JApplet {

    /**
     * Initializes the applet Principal
     */
    @Override
    public void init() {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the applet */
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });

martes, 26 de marzo de 2013

Closure de Groovy


Groovy similar a Java, fácil de aprender y genera bytecode


/**
 *
 * @author ahmateu
 * Test Groovy
 */


cuadrado = {it * it}
println "el cuadrado de 2 es = "+cuadrado(2)

imprimirMap = { clave, valor -> println clave + " es " + valor }
[ "Java" : "java", "Groovy" : "groovy", "ABAP" : "abap" ].each(imprimirMap)

imprimirMap = [ 1, 2, 33, 44 ].collect(cuadrado)

println imprimirMap

viernes, 22 de marzo de 2013

Iniciar/detener un servicio Windows desde MS-DOS


El inicio y el término de un servicio utilizando una línea de comandos:


  • Iniciar servicio: Net start <nombre_del_servicio>

Salida:

El servicio de <nombre_del_servicio> está iniciándose.

El servicio de <nombre_del_servicio> se ha iniciado correctamente.


  • Detener servicio: Net stop <nombre_del_servicio>



Salida:
El servicio de <nombre_del_servicio> está deteniéndose.
El servicio de <nombre_del_servicio> se detuvo correctamente.


Saludos !!

jueves, 21 de marzo de 2013

Suma Resta Multiplicación División y Residuo con BigDecimal



Elementos con mas de 50 dígitos cada uno.

* ImprimirEnteroEnorme
* SumarEnteroEnorme
* RestarEnteroEnorme

Para comparar enteros enormes se deberán incluir :
* EsIgual
* EsDiferente
* EsMayor
* EsMenor
* EsMayorOIgual
* EsMenorOIgual

Si se desea aumentar la dificultad se pueden realizar los métodos:
* MultiplicarEnteroEnorme
* DividirEnteroEnorme
* ModuloEnteroEnorme – el residuo de enteros enormes


jueves, 14 de marzo de 2013

Como saber el tipo de datos de una tabla con Java



Para saber que tipo de datos son los necesarios para insertar en una tabla, sin que nos digan los tipos datos destino a insertar:
con el siguiente método podemos saber si es un Int, nVarchar, BLOB, Date, TimeStamp, etc.

-----------------------------------------------------

    public static void tipoDatosTabla() {
        try {
            rs = stm.executeQuery("Select * from tabla");
         
            ResultSetMetaData rsmd = rs.getMetaData();
            int numColumns = rsmd.getColumnCount();
            rsmd.getColumnTypeName(numColumns);


            for (int i = 1; i < numColumns + 1; i++) {
                String columnName = rsmd.getColumnName(i);
                System.out.print(columnName + " " + rsmd.getColumnType(i) + " (" + rsmd.getColumnTypeName(i) + ")" + "\t\t");
            }
            System.out.println("");          
            while (rs.next()) {
                for (int i = 1; i < numColumns; i++)
                    System.out.print(rs.getObject(i) + "\t\t");              
                System.out.print(rs.getObject(numColumns) + "\n");
            }
        } catch (SQLException ex) {
            Logger.getLogger(SQLServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

-----------------------------------------------------

Saludos !!

miércoles, 6 de marzo de 2013

Como restar o sumar N dias,meses y/o Años a una fecha con Calendar de Java.


Realizar operación con la Clase Calendar es fácil y rápido a comparación de la Clase Date en java

el siguiente codigo muestra como restar un día de la fecha actual p.e::
-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°
01/03/13 - (1 dia) = 28/02/13
-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°

        Calendar c1 = GregorianCalendar.getInstance();
        System.out.println("Fecha actual: " + c1.getTime().toLocaleString());


        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy");
        System.out.println("Fecha Formateada: " + sdf.format(c1.getTime()));


        c1.add(Calendar.DATE, -1);
        System.out.println("Fecha Formateada: " + sdf.format(c1.getTime()));

-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°
ejemplo 2 sumar un dia:
-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°

06/03/13 + (1 dia) = 07/03/13

        Calendar c1 = GregorianCalendar.getInstance();
        System.out.println("Fecha actual: " + c1.getTime().toLocaleString());
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MMMMM/yyyy hh:mm:ss");
        System.out.println("Fecha Formateada: "+sdf.format(c1.getTime()));
        sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
        System.out.println("Fecha Formateada: "+sdf.format(c1.getTime()));
        c1.add(Calendar.DATE, 1);
        System.out.println("Fecha Formateada: "+sdf.format(c1.getTime()));


-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°
ejemplo 3 mas un mes y mas un año
-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°-°

        c1.add(Calendar.MONTH, 1);
        System.out.println("Fecha Formateada: "+sdf.format(c1.getTime()));
        c1.add(Calendar.YEAR, 1);
        System.out.println("Fecha Formateada: "+sdf.format(c1.getTime()));

Saludos !!

martes, 19 de febrero de 2013

Batch resplado archivo por fechas



Bueno en algún momento de mi vida tuve que realizar un programa que respaldara un archivo generado por la fecha del día con la nomenclatura ArchivoYYmmDD.dat, que se sobrescribía cada hora por el mismo proceso que generaba dicho archivo( en dicho programa hubiera modificado el código, claro si me hubieran dado el codigo fuente ¬¬ ), por lo tanto me pidieron hacer un programa que respalde dicho archivo...” Fácil en Java solo me tomaría 5 min” ... pero ooh sorpresa el servidor no tiene Java instalado y es necesario realizar una documentación para el programa pedir los permisos y bla bla bla... por tal motivo recordé que en un tiempo estuve muy metido con los Scripts específicamente Batch de Windows(nada del otro mundo, una tarea programada y listo).
La copia como resultado final del archivo debería contener la fecha y hora en que se realizo el respaldo de la siguiente manera:
19-02-2013_1726 Archivo130219

Pues con un poco de investigación en el tema  en 10 min ya estaba el Script :


Respaldo.bat
[code]

@echo off
set tiempo=%time:~0,5%
echo %tiempo%
set tiempo=%tiempo::=%
set fecha=%date:~0%
set fecha=%fecha:/=-%

set fileorigen=Archivo%date:~8,2%%date:~3,2%%date:~0,2%.dat
echo %fileorigen%
set filedestino=%fecha%_%tiempo%%fileorigen%
echo %filedestino%

set urlorigen=C:\Envios\
set urldestino=C:\Compartida\
echo %urlorigen%
echo %urldestino%

copy "%urlorigen%%fileorigen%" "%urldestino%%filedestino%"
echo %urlorigen%%fileorigen%
echo %urldestino%%filedestino%
[/code]


Saludos !!

miércoles, 6 de febrero de 2013

Fechas en Java fácil o dificil?

Metodo logico Dificil():


    public static String fecha() {
        Date fecha = new Date();
        String f = "";
        String d = "";
        String m = "";
        String min = "";
        String hr = "";

        int dia = fecha.getDate();
        int minuto = fecha.getMinutes();
        int segundos = fecha.getSeconds();
        int mes = fecha.getMonth() + 1;
        int hora = fecha.getHours();

        if (dia < 10) {
            d = "0" + dia;
        } else {
            d = "" + dia;
        }
        if (minuto < 10) {
            min = "0" + minuto;
        } else {
            min = "" + minuto;
        }
        if (mes < 10) {
            m = "0" + mes;
        } else {
            m = "" + mes;
        }