Permiso de escritura a tu aplicación Android

Hace poco trabajando en un pequeño proyecto con Android, me vi en la necesidad de crear una pequeña base de datos con SQLite y que obviamente estaría en la memoria de mi teléfono, pero por alguna razón tenia errores de acceso al crearla, pues si, se debía agregar el permiso para que nuestra aplicación pueda escribir en memoria y esto directamente se realiza en el archivo AndroidManifest.xml generado en nuestro proyecto.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="pe.com.mkella.simpleamp"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="16"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name=".MainActivity"                  
                  android:theme="@style/AppTheme"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>        
    </application>
</manifest>

Podemos ver la línea de código cuyo tag tiene uses-permission es esta especificando el permiso de acceso a escritura, esto nos facilitara el trabajo definitivamente. Es algo que me trajo de cabeza en su momento, espero les sirva para los que recién empiezan con esto.

IntelliJ IDEA – Mas que una herramienta inteligente

Ya llevo un par de meses desarrollando con esta excelente herramienta y la verdad me viene muy bien, mas un trabajando con algunos proyectos con Android. Estuve probando la versión de Android Studio y esta mas que interesante, pero aun he tenido algunos inconvenientes sobre todo al momento de compilación, cosa que no me pasan con IntelliJ IDEA, que por cierto Android Studio esta basado en IntelliJ IDEA. Este IDE maneja dos tipos e licencia, la Community Edition que tiene todo lo necesario para trabajo con Java SE, Scala, Groovy y sobre todo con Android y la Ultimate Edition que contiene ademas de lo mencionado todo lo relacionado a Java EE, frameworks como Spring, Hibernate, etc. realmente muy bueno. Lo que mas me agrada de esta herramienta es la simpleza como es que se maneja la gestión de sus proyectos, totalmente personalizable, integración con aplicaciones para control de versiones (git, subversion, mercurial, etc.) y repositorios de código en la nube tales como Github. En fin, una gran cantidad de características que lo hacen muy util y mas que aceptable.

Captura de pantalla 2015-04-06 a las 23.51.08

Nuevos iconos en la barra de estado del Samsung Galaxy Mini GT-S5570L

Después de estar trasteando en estos días con mi móvil, decidí probar y ver la forma de como cambiar los iconos que trae por defecto el Samsung Galaxy Mini GT-S5570L, estuve buscando información al respecto y créanme que ya muchos han realizado todo esta labor pero para otros modelos de equipos, muy poco para este. Bueno entonces con mucha mas razón decidí probar y vaya que me tomo algo de tiempo, sobre todo cambiar el color de texto del reloj en la barra de tareas, fue algo muy complicado en cierta forma pero con un poco de ayuda en los foros tales como xda-developers, se pudo realizar. Por el momento para el que lo requiera aquí propongo los archivos que necesitan remplazar para tener el aspecto siguiente (solo la barra de estado):

Archivos:

Bueno, entonces antes que todo, esta demás decir que no me hago responsable de lo que puedas realizar o le pueda pasar a tu móvil, estos pasos lo realice teniendo en cuenta el riesgo que uno como tal asume.

Para este proceso necesitas tener el teléfono rooteado, ya explicamos como realizarlo, entonces el archivo que reemplazaremos en primera instancia se llama framework-res.apk, este archivo esta ubicado en el directorio /system/framework, entonces lo que haremos sera descargar el archivo que modifique y colocarlo en la sdcard (memoria externa) una vez hecho esto, lo renombramos con el mismo nombre del original, es decir framework-res.apk, luego abrimos ES Explorer, claro esta que las opciones de root y montar sistema para escritura están activadas, y lo que haremos sera ante de todo sacar un backup del archivo original y copiarlo en la sdcard como respaldo, recuerden hacer siempre esto cuando van ha modificar archivos y sobre todos si son de sistema, luego lo que hacemos es copiar el archivo que descargaron y vamos y lo pegamos en el directorio /system/framework, les dirá que existe ya un archivo con ese nombre entonces le dan remplazar, esperan unos segundos y el móvil se reiniciara, en caso no se reinicie y empiece a vibrar como loco (les comento esto porque me paso), solo lo apagan y lo vuelven a encender y listo, al reiniciar ya tendrían los iconos cambiados y el color de texto de la fecha tambien.

Pero ojo que allí no termina todo, si se fijan luego de reiniciar, seguirán teniendo el color de texto del reloj de color blanco, entonces para esto vamos reemplazar otro archivo, el cual esta ubicado en la misma ruta y se llama services.odex, este paquete contiene parte de la configuración del reloj, entonces haremos el mismo proceso anterior, descargamos el archivo que propongo en la sdcard, luego hacemos un backup del archivo original y luego copiamos el archivo que tenemos en la sdcard y lo pegamos en /system/framework, reemplazamos el existente y reiniciamos.

Y prácticamente eso seria todo, mas adelante escribiré un post indicando la forma de como realice este proceso con mas detalle para que así ya cada uno pueda hacer su customizacion de acuerdo a su criterio. Espero les haya servido.

Bootanimation en Samsung Galaxy Mini GT-S5570L

Luego de estar investigando un poco sobre la forma de poder cambiar el bootanimation de mi teléfono, pude realizar este proceso teniendo resultados satisfactorios, para ser mas didácticos, el bootanimation es la imagen o sucesion de imagenes de carga que tienes al encender tu teléfono.

Tal como publique en el post anterior, este proceso lo realice sobre un Samsung Galaxy Mini GT-S5570L ya rooteado con la operadora Claro de Perú, y para los que tienen este equipo podrán darme la razón que la imagen y sonido de carga no son tan agradables que digamos, es por eso que ahora les presento esta alternativa. Para los que deseen seguir estos pasos recalco que no me hago responsable de lo que realices o que le pueda suceder a tu teléfono, esto lo haces bajo tu propia responsabilidad.

Entonces, para esto vamos a necesita de un explorador de archivos que nos permita leer los archivos estando «rooteado» y a la vez nos permita montar el sistema para escritura, esto con la finalidad de poder modificar los archivos necesarios para este proceso. De acuerdo a lo indicado les puedo recomendar ES Explorador el cual me parece una herramienta con lo necesario para nuestro trabajo y que tiene el soporte para montar el sistema para escritura, entonces instalamos y nos ubicamos en la opción de configuración y seleccionamos 2 opciones que se muestra en la imagen de la siguiente forma:

Entonces con estas opciones seleccionadas podremos trabajar de ahora en adelante.

Ahora, nuestro telefono segun la especificación tecnica tiene una resolución de 240 x 320 pixeles, esto importante para poder conseguir el bootanimation en la red, por el momento el que yo utilizo y me parece muy bueno es el de «Cyanogen Particulas», el cual lo podemos obtener de aqui, entonces ya con todo esto preparado nos ponemos manos a la obra, solo debemos tener el cuidado en los pasos que se indican para no tener problemas mas adelante:

  1. Lo primero que haremos sera abrir ES Explorador y nos ubicamos en el directorio /system/bin, una vez alli buscamos el archivo samsungloop y lo renombramos o lo colocamos en un directorio que tengas de respaldo.
  2. Luego en el mismo directorio (/system/bin) ubicamos el archivo bootanimation y le cambiamos el nombre, colocando el nombre del archivo que renombramos o quitamos en el paso anterior, es decir samsungloop.
  3. Una vez hecho lo anterior, lo que haremos sera colocar el archivo de «Cyanogen Particulas» (bootanimation Cyanogenmod particles (240X320).zip) descargado anteriormente en nuestra SDCard y le cambiamos el nombre por el de bootanimation.zip y luego lo colocamos en /system/media
Con esto ya tendríamos el bootanimation instalado y ya lo podríamos probar reiniciando el teléfono, pero hay un pequeño detalle, si se fijan al reiniciar el teléfono tenemos esa molesta imagen de Claro que la verdad no va acorde con lo que ya tenemos, entonces para quitarla lo que tenemos que hacer es lo siguiente:
  1. Nos ubicamos en la ruta /system/media y alli observamos los archivos bootani.qmg y samsungani.qmg, simplemente lo renombramos o colocamos estos archivos en un directorio de respaldo
  2. De la misma forma que lo anterior, para poder quitar la imagen y sonido de apagado nos ubicamos en la ruta /system/media/video/shutdown y vemos el archivo shutdown.qmg, para lo cual haremos lo mismo, renombrar o mover a respaldo
  3. Ahora, si deseas quitar el sonido de inicio lo que hacemos es ubicarnos en la ruta /system/etc y buscamos el archivo poweron.snd y hacemos lo mismo, renombrar o mover a respaldo
Y eso seria todo por el momento, estoy trabajando en poder personalizar tanto sonido de inicio asi como de apagado para tener ya algo mas completo, por el momento pueden ir probando esto y me comentan

Rootear Samsung Galaxy Mini GT-S5570L

Hola Amigos de nuevo por aquí para poder comentarles mi experiencia luego de haber logrado después de investigar un poco, rootear mi equipo el cual tiene a Android Froyo 2.2.

Bueno para empezar le hecho de rootear tu equipo no significa que lo estas desbloqueando, hago la aclaración por que muchos confunden estos términos, al rootear solamente obtienes permisos totales en tu sistema que para mucho les sirve porque puedes ya modificar alguna cosas que segun tu investigación lo requiera.

Una herramienta muy completa y una de las mas usadas por muchos en este mundillo es SuperOneClick, que la verdad ha resultado ser muy eficiente para estos fines.

Actualmente, como dice el titulo tengo un equipo Samsung Galaxy Mini GT-S5570L con la operadora Claro de Perú, y utilizando esta herramienta pude realizar el rooteo sin problemas, resulto ser compatible y me dio la posibilidad de poder realizar esta operación.

Solo quiero recalcar que no me hago responsable de lo que pueda pasar con tu teléfono, el hecho de probar este metodo es bajo tu propia responsabilidad. Entonces luego de haber dejado todo aclarado, les indico los pasos simples que segui para realizar este proceso:

  1. Lo primero que debemos realizar y recomiendo es descargar e instalar el software para administración equipos Sanmsung llamado Kies desde la pagina principal de Samsung, esto con la finalidad de poder tener los drivers necesarios para el trabajo que vamos a realizar (algunos lo obvian)
  2. Una vez instalado, debemos configurar el equipo con el modo de depuración para USB, esto los hacemos ubicándonos en Ajustes –> Aplicaciones –> Desarrollo –> Depuración de USB y lo activamos, es muy importante realizar este proceso. Para comprobarlo que este activado conectamos el cable USB a la PC y debemos tener algo como esto:
  3. Una vez conectado a la PC lo que hacemos es abrir SuperOneClick y simplemente hacemos click en «Root» y esperamos a que se realize el procceso. Cabe recalcar que un momento dado, casi al terminar te saldra un mensaje en donde te pregunta si desea instalar «busybox», le decimos que «Si», dado que es importante si queremos acceder con permisos de root mediante aplicaciones, como por ejemplo el caso de TitanumBackup que es una herramienta que te permite realizar justamente un backup de tus datos y aplicaciones mas no de la ROM, ojo con esto.
  4.  Una vez terminado el proceso, desconectamos el USB como debe ser y reiniciamos el telefono para que se apliquen los cambios y listo. Para comprobar si el equipo se ha rooteado deberíamos tener lo siguiente:

Y listo eso seria todo, es importante indicar que asi como lograste rootear el equipo tambien puedes regresarlo a su estado incial, simplemente siguiendo los mismo pasos indicados pero la diferencia esta en que dentro de SuperOneClick harás click en «Unroot», reiniciamos y listo, tendras tu equipo como en su estado inicial.

Espero les haya servido, la verdad no quise ser muy extenso dado que este proceso no me tomo mas que 20 minutos entre instalar y rootear. Seguiré investigando algunas cosas que podamos hacer ya estando como root y las estaré compartiendo.

Corregir error «invalid command-line parameter» en Eclipse y SDK Android

Hace poco instalando Eclipse y el SDK de Android en Windows 7 (si lo se, un lapsus xD), siguiendo estas indicaciones, se me presento un pequeño inconveniente luego de instalar el SDK desde un ejecutable el cual recomiendan, resulta que luego de tener todo instalado y luego de crear un aplicacion simple, al ejecutarla tenia el siguiente error en la consola:

invalid command-line parameter: C:\Program Files\Android\android-sdk\tools/emulator-arm.exe

Y bueno, vaya sorpresa que me lleve, resulta que este error se da porque dentro de la configuracion en Eclipse en el SDK location, se tiene que especificar la ruta en donde tienes instalado el SDK, tal como se muesta en la imagen:

Pero por un posible bug, este no acepta espacios en blanco dentro de la ruta que se especifica. Entonces buscando algo de información vi que para esto existen alguna posibles soluciones:

  1. La primera, es bajarte el SDK en zip y colocarlo en una ruta que tu desees considerando lo antes mencionado
  2. O tambien puedes aplicar el siguiente comando para crearle una especie de link en un directorio especifico como por ejemplo en «C:\Android», de la ruta del SDK instalado, de la siguiente manera:
MKLINK /J C:\Android "C:\Program Files\Android\android-sdk\"
Y bueno con esto ya colocaríamos la ruta del link creado en el «SDK Location».

Evaluar extensión de archivo con java

Una forma simple de poder hacer esta validación es implementando el método accept de la clase FilenameFilter, entonces imaginemos que queremos saber si tenemos uno o mas archivos «zip» en el directorio «/home/nachxs/Documentos/ClasesPrueba», para esto solo haremos lo siguiente:

package evalextension;

import java.io.File;
import java.io.FilenameFilter;

/**
*
* @author nachxs
*/
public class Main {

  public static void main(String[] args) {
    String path = "/home/nachxs/Documentos/ClasesPrueba";
    File fi = new File(path);
    File[] listaObjetos = fi.listFiles();
    for (int i = 0; i < listaObjetos.length; i++) {
        if (new EvaluaExtension().accept(listaObjetos[i], ".zip")) {
           System.out.println("Se encontro archivos zip: " + listaObjetos[i].getPath());
        }
    }
  }
}

class EvaluaExtension implements FilenameFilter {

    public boolean accept(File dir, String extension) {
        return dir.getName().endsWith(extension);
    }
}

Este es el directorio en donde realizmos la busqueda:

Básico para muchos, pero para otros espero les sirva.

Crear servicio para Socket Java

Hace poco desarrollando una pequeña aplicación en Java, el cual consistía en el manejo de un Socket me vi en la necesidad de ver la forma de como asociar este Socket a un servicio ya que iba a manejar «n» servicios, y todo esto sobre un servidor Linux.

Como sabemos cada vez que se crea un proceso o servicio en Linux, este recae o se asocia a un PID el cual es guardado en un archivo en una ruta especifica, entonces veremos como asociar este Socket a un PID y dado el panorama al tener varios Sockets tendremos varios PID’s. Entonces para esto asumimos que ya tenemos nuestra aplicación compilada, en mi caso tendré la clase (compilada) del servicio en la ruta «/home/nachxs/bin/classes» y ademas manejaremos un JDK el cual lo tengo instalado en «/opt/jdk_1.6.0», una vez definido esto solo creamos un script el cual contiene lo siguiente:

#! /bin/bash
. /etc/init.d/functions

RETVAL=$?
PATH_SERVICE=/home/nachxs/bin/classes
PATH=.:/opt/jdk1.6.0/bin:/usr/bin
export PATH_SERVICE
export PATH

start(){
   echo -n $"Iniciando servicios"
   exec java -Xrs -cp $PATH_SERVICE org.servicio.Servidor01 /dev/null 2>&1 &
   echo $! > /var/run/Servicio01.pid
   RETVAL=$?
   [ $RETVAL -eq 0 ] && success || failure
   echo
   return $RETVAL
}

stop(){
    echo -n "Deteniendo servicios"
    kill -15  `cat /var/run/Servicio01.pid`
    rm -rf /var/run/Servicio01.pid
    RETVAL=$?	[ $RETVAL -eq 0 ] && success || failure
    echo
    return $RETVAL
}

case "$1" in
   start)
          start
          ;;
   stop)
          stop
          ;;
   restart|reload)
          stop
          start
;;
   *)
   echo $"Usage: $0 {start|stop|restart|reload}"
   exit 1
;;
esac

exit 0
exit $RETVAL

Entonces como se podran dar cuenta, tenemos «seteado» el PATH_SERVICE y el PATH con las ruta indicada anteriormente, ahora solo nos quedaria dar permiso de ejecucion al script y listo. Al ejecutar el script este creara el Socket al puerto que hayan definido en su clase y este asociado a un PID. Ahora si queremos tener varios servicios asociados a diferentes Sockets solo tendriamos que adaptar el script para cada servicio.

 

Herramientas Python para Test de Penetración

Hace poco revisando algo de información por la web referente a herramientas necesarias para mi aprendizaje diario sobre temas de Seguridad de la Información en general, encontré un sitio muy interesante en donde se muestra un listado de diferentes herramientas desarrolladas con Python utilizadas para realizar test de penetración, como veran hay algunas conocidas y otras no tanto pero de gran valor. Espero les sea de utilidad

Python tools for penetration testers

 

TIP: Convertir fecha y hora de String a java.sql.Date/Time

Esta es una forma simple de poder convertir fechas y hora de formato String a formato java.sql.Date y java.sql.Time respectivamente:

Convirtiendo Fecha de String a java.sql.Date:

String fecString = "2010-12-30"
java.sql.Date fecFormatoDate = null;
try {
      SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd", new Locale("es", "ES"));
      fecFormatoDate = new java.sql.Date(sdf.parse(fecString).getTime());
      System.out.println("Fecha con el formato java.sql.Date: " + fecFormatoDate);
} catch (Exception ex) {
      System.out.println("Error al obtener el formato de la fecha/hora: " + ex.getMessage());
}

Convirtiendo Fecha de String a java.sql.Time:

String horString = "10:28:31"
java.sql.Time fecFormatoTime = null;
try {
      SimpleDateFormat sdf = new java.text.SimpleDateFormat("hh:mm:ss", new Locale("es", "ES"));
      fecFormatoTime = new java.sql.Time(sdf.parse(horString).getTime());
      System.out.println("Fecha con el formato java.sql.Time: " + fecFormatoTime);
} catch (Exception ex) {
      System.out.println("Error al obtener el formato de la fecha/hora: " + ex.getMessage());
}