jueves, 16 de febrero de 2012

La felicidad es taaaan relativa

Esto es algo que me quede con ganas de postear, lo habia olvidado y ahorita que estoy algo saturado con un sistema que ando desarrollando lo recorde.

Creo que eran como las 8 de la noche, yo venia en el carro, regresabamos de la dependencia de gobierno a la cual estamos desarrollando un sistema, estabamos sobre eje central, a esas horas es la muerte total eje central, la forma de relajarse es poner un poco de música agradable e ir en el camino sin mayores molestias y/o complicaciones.

En un alto, mire en otra dirección y vi una banca de esas de trolebus, habia un señor que por su apariencia vivia en la calle, tenia la ropa muy sucia, su cabello muy descuidado, en si, toda su apariencia era de una persona que vivia en la calle, el estaba sentado en una de esas bancas y estaba sonriendo, el señor se veía totalmente feliz y con una cara tan tranquila y en paz, son las pequeñas cosas que te hacen ver que la felicidad es mucho muy diferente para todos y de la misma forma ahí esta el mas claro ejemplo de que la felicidad es muy relativa, y también que todos la pueden tener. 

Saludos!

Y sean felices y sonrian que es gratis! eso nadie se los cobra :P

Komtec1

domingo, 12 de febrero de 2012

Descargar mi Música de Google Music

Bueno, el primer script ya quedo listo, como les dije en el post anterior, este es para descargar la música propia por lotes o por como ustedes gusten, si no recuerdan, comente en un post pasado que Google Music al subir tu música ya no te deja opción de descargarla a menos que lo hagas mediante Android y te la guarda como 1.mp3, 2.mp3, etc, etc, hay otra opción, que es Music Plus, un complemento que se instala en Chrome, pero este tienes que dar click en la cancion y te agrega una opcion que dice Descargar esta canción o algo asi dice :P

Bueno, este codigo y metodo es para que selecciones y descargues todas las canciones que quieras y/o busques, les explico a continuacion! :D

Requisitos:

Teléfono con Android Rooteado
WAMP ó LAMP  (Windows/Linux Apache Mysql PHP)   (para rapido y facil http://www.appservnetwork.com/ v 2.5.10)
SQLite Browser  (http://sourceforge.net/projects/sqlitebrowser/)
Firefox (http://www.mozilla.org/en-US/firefox/new/)
Live HTTP Headers (Addon de Firefox - https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/)

La primera opcion es tener un telefono Android rooteado, con Google Music instalado y nuestra música sincronizada, de ahi ir a la siguiente ruta:

/data/data/com.google.android.music/databases/music.db

Esto es para que podamos tomar la base de datos que maneja Google Music dentro de nuestros telefonos, ahí tenemos los datos para que despues podamos extraer nuestra musica y la guardemos en la pc (por si algun dia quieren recuperarla y no tenerla mas en la nube :P)

Ok, una vez que tengamos ese archivo lo que tenemos que hacer es abrir un editor de SQLite, (si no tienen uno o no conocen uno, puedes descargarlo de aqui: http://sourceforge.net/projects/sqlitebrowser/  ) ya que lo instalamos, vamos a la parte de Browse Data y seleccionamos la tabla MUSIC, una vez que lo hayamos hecho, damos en file - export, y guardamos el archivo donde queramos en nuestra pc.

Una vez que se haya exportado el archivo .sql lo unico que vamos a necesitar son los datos de la tabla MUSIC, yo importe esa tabla a MySQL, (se me hace mucho mas facil y rapido de manejar)

Este es el primero sql que van a ejecutar:

CREATE TABLE `music` (
  `Id` int(11) NOT NULL auto_increment,
  `SourceAccount` int(11) NOT NULL,
  `SourceId` text NOT NULL,
  `SourcePath` text,
  `Size` int(11) NOT NULL,
  `FileType` int(11) NOT NULL,
  `FileDate` int(11) NOT NULL,
  `LocalCopyPath` text,
  `LocalCopyType` int(11) NOT NULL,
  `PlayCount` int(11) NOT NULL default '0',
  `LastPlayDate` int(11) NOT NULL default '0',
  `Title` text NOT NULL,
  `Album` text,
  `Artist` text,
  `AlbumArtist` text,
  `AlbumArtistOrigin` int(11) default NULL,
  `Composer` text,
  `Genre` text,
  `Year` int(11) default NULL,
  `Duration` int(11) default NULL,
  `TrackCount` int(11) default NULL,
  `TrackNumber` int(11) default NULL,
  `DiscCount` int(11) default NULL,
  `DiscNumber` int(11) default NULL,
  `Compilation` int(11) default NULL,
  `BitRate` int(11) default NULL,
  `AlbumArtLocation` text,
  `SongId` int(11) NOT NULL,
  `AlbumId` int(11) NOT NULL default '0',
  `AlbumArtistId` int(11) NOT NULL default '0',
  `GenreId` int(11) NOT NULL default '0',
  `CanonicalName` text NOT NULL,
  `CanonicalAlbum` text,
  `CanonicalAlbumArtist` text,
  `CanonicalGenre` text,
  `_sync_dirty` int(11) NOT NULL default '0',
  `_sync_version` text,
  `LocalCopySize` int(11) default '0',
  `TrackType` int(11) NOT NULL default '0',
  `LocalCopyBitrate` int(11) NOT NULL default '0',
  `ArtistOrigin` int(11) NOT NULL default '0',
  `ArtistId` int(11) NOT NULL default '0',
  `CanonicalArtist` text,
  `Rating` int(11) NOT NULL default '0',
  `StoreId` text,
  `StoreAlbumId` text,
  PRIMARY KEY  (`Id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;

Esto nos va a crear la tabla de MUSIC dentro de MySQL, ahora abrimos el archivos SQL que exportaron y seleccionan todo lo de INSERT INTO MUSIC, algo como lo siguiente:

INSERT INTO MUSIC VALUES(1,-xxxxxx,'xxxxxxxx-xxxx-xxxxxx-9f1f-cf424f808f58','https://android.clients.google.com/music/mplay?songid=xxxxxxx-0340-37b0-9f1f-cf424f808f58',xxxxx,x,xxxxxxxxxxx,NULL,0,0,0,'Now''s not the Time','Research','Seth Kauffman','Seth Kauffman',0,'','Rock',0,204000,0,2,1,1,0,0,'http://lh5.ggpht.com/xxxxxxxxxxxxxxpu-PCi3_-TKm1rVGk4rgb3eA7W4mA3o=s200-c',4xxxxxx061,200xxxxxx,xxxxxx29,6xxxxx8,'now''s not the time','research','seth kauffman','rock',0,13xxxxxx623080,0,2,0,0,xxxxx7129,'seth kauffman',0,NULL,NULL);

El total de registros ahí es el total de registros que tienen de canciones, osea, si tienen 10 canciones en google music, van a ser 10 inserts.

Una vez que hayamos ingresado los datos a MySQL, lo que hacemos ahora es configurar el archivo php que les dejo (click aqui para descargarlo), primero lo extraemos en www (c:\appserv\www si es el caso que instalaron appserv), en una carpeta que se llame gmusic (o como le quieran poner, es un archivo php y una carpeta llamada media), una vez que este ahi, lo abrimos y tenemos que cambiar varios parametros, veamos cuales:


en la linea 120 tenemos los datos para conectarse a MySQL, cambiamos ahí por nuestros datos:

$dbname = 'nombredetudb';
$dbusername = 'tuusuario';
$dbuserpass = 'tucontrasenia';

en la linea 253 tenemos el header que se envia para la coneccion a google music, este lo vamos a obtener por medio de Live HTTP Headers, abrimos firefox, entramos a music.google.com y nos logueamos con nuestra cuenta, una vez que estemos ahi, abrimos Live HTTP Headers y le damos click a cualquier cancion para que empiece a reproducir, nos captura los headers que enviamos, entre ellos va nuestra cookie, algo como lo que muestro en la imagen:


Damos en click derecho y copiar, de esta forma ya tenemos nuestros datos de acceso para google, y eso lo vamos a pegar en la linea 253 que dice:

'header'=>"aquivaloquecopiaste_lacookie",

borramos aquivaloquecopiaste_lacookie y pegamos lo recien seleccionado.

Si llevamos todos los pasos hasta aquí y no te has perdido, entonces lo siguiente que puedes hacer es abrir tu navegador preferido! (recomiendo chrome por la gestion de memoría que hace) y entrar a http://127.0.0.1/gmusic/descargar.php, una vez que estemos ahi vamos a ver una pantalla como esta:


Ahi lo que vamos a hacer es buscar lo que queramos descargar, escribimos el nombre de la canción, artista o album que queramos y le damos en enter, en caso de que quieran descargar todo su archivo de musica solo den click en enter y les dará una lista de todas las canciones que tienen en su Google Music (recuerden que si son muchas canciones la peticion al dar solamente enter va a tardar algo).

Una vez que lo hacemos, saldrá una pantalla como la siguiente:


Lo que podemos hacer ahí es seleccionar X numero de canciones para que las descargue ó presionar el enlace de Marcar todos para que nos seleccione todo lo que se haya encontrado en la lista y podamos descargarlo, en esta parte podemos organizar nuestra busqueda dando click en la parte de los titulos de las tablas, y asi ordenar por artista, album, cancion, duracion ó peso, si su busqueda es muy grande no lo recomiendo mucho, pues tardara un poco :P

Una vez que hayamos seleccionado lo que queremos, vamos a dar click en Guardar canciones seleccionadas y esperamos un poco, en ese momento nos empieza a guardar las canciones que hayamos seleccionado en sus respectivas carpetas dentro de c:\appserv\www\gmusic (o el nombre que hayamos puesto), por ejemplo, si tenemos el artista "Uno" el album "Albumsito" y la cancion "Buena Cancion" nos lo guardará de la siguiente forma:

c:\appserv\www\gmusic\Uno\Albumsito\Buena Cancion.mp3


Una vez que el script termina de guardar las canciones seleccionadas nos mostrará un aviso que termino de descargar, en ese momento podemos cerrar nuestro navegador y seguir haciendo lo que queramos :D (disfrutar de su musica local nuevamente podria ser :P)

Bueno, ese es el primer post, de como descargar SU música por lotes.

¿Enredado? ¿Largo? Es mas de lo que parece, una vez que lo hagan verán que no es complicado :P

Estoy trabajando en un script que extraiga los datos directo de music.google.com y de esta forma no necesitemos nuestro Android Rooteado, en caso de que lo termine les aviso por un post tambien.

Pronto tendremos la página de prueba para poder descargar las canciones mediante este servicio, lo que explico aqui :P pero que no sea de manera local, por mientras pueden ir dejando un listado de grupos favoritos? enviarlo por twitter (@komtec1) o por correo, o dejar comentario aqui en el blog, recuerden que esta parte puede tardar un poco mas, por que quiero tener una base de datos de al menos 100,000 canciones, osea 5 cuentas en su máxima capacidad :D asi que como repito, me vendría bien el apoyo para sugerencias musicales que esten en la db. :D :D :D

De todas formas sigan pendientes ^^ espero les haya gustado y les sirva este post, dejo las siguientes paralabras clave para que lleguen por medio de buscadores.

Descargar toda mi musica de google music
Cmo descargo mi musica de google music
Forma de descargar mi musica de google music


Y pongo el video de como funciona el script, le agregue jquery y datatables, por si se preguntan con que es lo que hago el sort de la tabla :D




Saludos! :D

Komtec1

miércoles, 8 de febrero de 2012

Google Music NO ofrece privacidad de Datos, lo cual puede ser util };-D

Hola!!

Como puse en un post anterior aqui merito mismo en mi blog, estaba revisando unas cosas sobre Google Music, por casualidad, causalidad o como lo quieran llamar encontre lo que a mi parecer son unos fallos de seguridad, yo como niño bueno, los reporte a Google, pero ellos me contestaron que naranjas dulces, que no es fallo de seguridad :(, por lo que si ellos dicen que no es nada malo, entonces puedo liberarlo y empezar a hacer herramientas para eso, pues es 100% legal y no es un fallo de seguridad :D (al final pongo lo que me contestaron :P)


El diagrama del fallo (segun yo) es el que pongo a continuación (no soy un experto en diagramas, digan que hice una imagen, generalmente lo explicaría con texto! xD)




Por pasos:
1.- es lo normal, user y pass para ingresar a gmail
2.- te setean cookies en el navegador para que puedas ingresar a tus servicios de google
3.- en music.google.com buscas la cancion que tu quieras

En este punto (4) esta lo interesante...

4.- se genera el streaming

Primero, en la base de datos de Google MUsic estan varias tablas, las cuales listo a continuación:

[table] ARTWORK
AlbumId
LocalLocation
[table] KEEPON
KeepOnId
ListId
AlbumId
ArtistId
DateAdded
[table] LISTITEMS
Id
ListId
MusicSourceAccount
MusicSourceId
ClientPosition
ServerPosition
SourceAccount
SourceId
[table] LISTITEM_TOMBSTONES
Mi tabla aqui esta vacia
[table] LISTS
Id   
Name   
SourceAccount   
SourceId   
_sync_version   
_sync_dirty   
MediaStoreId   
ListType   
ListArtworkLocation
[table] LIST_TOMBSTONES
Mi tabla aqui esta vacia
[table] MUSIC
Id   
SourceAccount   
SourceId   
SourcePath   
Size   
FileType   
FileDate   
LocalCopyPath   
LocalCopyType   
PlayCount   
LastPlayDate   
Title   
Album   
Artist   
AlbumArtist   
AlbumArtistOrigin   
Composer   
Genre   
Year   
Duration   
TrackCount   
TrackNumber   
DiscCount   
DiscNumber   
Compilation   
BitRate   
AlbumArtLocation   
SongId   
AlbumId   
AlbumArtistId   
GenreId   
CanonicalName   
CanonicalAlbum   
CanonicalAlbumArtist   
CanonicalGenre   
_sync_dirty   
_sync_version   
LocalCopySize   
TrackType   
LocalCopyBitrate   
ArtistOrigin   
ArtistId   
CanonicalArtist   
Rating   
StoreId   
StoreAlbumId
[table] RECENT
RecentId   
ItemDate   
RecentListId   
RecentAlbumId
[table] RINGTONES
Vacia
[table] SHOULDKEEPON
MusicId   
KeepOnId
[table] _sync_state
_id   
account_name   
account_type   
data
[table] _sync_state_metadata
version
[table] android_metadata
locale


La por ahorita nos interesa (no digo que las demás no tengan cosas buenas, por ejemplo la de _sync_state nos guarda los datos de logueo :P encriptados claro) es la de MUSIC

En esta tabla nos guarda la lista de todas las canciones (yo apenas tengo 11,482 :P) que tenemos dentro de nuestra cuenta de Google Music, el campos SourceId nos guarda un valor como este:

251c2c68-0340-37b0-9f1f-cf424f808f58

En realidad este es el principal campo que nos importa, los demas son solo para hacer mas "fancy" todo esto (despues verán por que :P)

Al ver los headers enviados/recibidos con HttpLiveHeaders (no, no me pagan publicidad), podremos ver algo como esto:

https://music.google.com/music/play?u=0&songid=2fafbe9b-db96-3624-97e6-7e52e3e3b463&pt=e     => de ahora en adelante UNO

GET /music/play?u=0&songid=2fafbe9b-db96-3624-97e6-7e52e3e3b463&pt=e HTTP/1.1

y de ahi obtenemos una respuesta de la siguiente forma:

http://t.doc-0-0-sj.sj.googleusercontent.com/stream/105?id=6a523ee5f96bad0e&itag=25&source=skyjam&o=07065478407166026385&ip=0.0.0.0&ipbits=0&expire=1328258623&sparams=id,itag,source,o,ip,ipbits,expire&signature=7A0C93172AB4B8E0657927ACF5D04E610E64D01C.3BDF980C824B97C35F3CB8238434E39ADFC83AE&key=sj2     => de ahora en adelante DOS

Si se dan cuenta el id principal de UNO no aparece ya en DOS, pero! ya tenemos un link valido para que podamos escuchar nuestra musiquita! :D

Hasta este momento llega el punto 6 del diagrama (espero hayan seguido mediante el relato el punto 5 y 6 xD)

Hace tiempo vi a DOS, y lo que hice, fue enviarselo a un amigo para que verificara si el podía escuchar la cancion que yo escuchaba en ese momento, como era de esperarse, nos regresa un error 403 (si es que ya entraron a DOS), por lo cual yo en ese momento dije: CLAP CLAP valida de forma genial nuestros datos y tenemos privacidad hasta en nuestra música!

Al analizar la base de datos vi una imagen que se podía abrir desde cualquier sitio, como lo explique en mi post anterior, por lo que segui tratando de escuchar ese link de música desde otro dispositivo.

Al abrirlo con Chrome la musica empezo a escucharse, por lo que probe de nuevo dando f5 y me dio un 403! Raro que pueda escucharlo un momento si y otro no, creo yo.

Haciendo mas pruebas, vi en el link que tiene un timestamp que recibe la variable de expires, el link caduca generalmente cada 30 segundos aproximadamente, osea, en otras palabras es visible para quien sea durante 30 segundos!!!!


"
Google lo que respondio fue esto:

Hey,

Thanks for your email! I've talked with the Music team and they've
confirmed this is expected behaviour. Since the link is only valid for a
short period of time, there isn't much potential for abuse.

Also, the URL is unguessable so an attacker can't obtain a valid link
without some other vulnerability. If you do find a way for an attacker to
generate or obtain a valid link without the victim knowing, then this
would be considered a vulnerability.

Cheers,
XXXXXXX
"

Me parece genial, igual y como lo mencionan ellos, puede que no sea un bug de seguridad, pero creo yo, que si subo un archivo personal a un servicio con contraseña, este tiene que ser visible solo para mi no? si no para que me logueo en mi cuenta de GMusic para escuchar musica, mejor solo hacer un servicio que ponga mi usuario y me de la lista de canciones que tengo disponibles!

Ah bueno, ahi es cuando llegaron mas ideas:

1.- Hacer un script para descargar MI música por lotes en caso de que la necesite

Si! es que google music una vez que la subes te fregaste y no puedes descargarla por lotes, a menos que sea desde android y des click en disponible sin coneccion, y te lo guarda como 1.mp3 2.mp3, etc, etc, no te da el nombre, ni titulo, ni disco, si estan en los metadatos pues ya fregaste y lo puedes visualizar asi en winamp o el reproductor de su eleccion (aunque sea por consola kof kof @hecky jeje :P).

Entonces aqui entra en nuestro auxilio las tablas de google nuevamente, dentro de MUSIC vamos a utilizar el campo Title, Album, Artist que son los que contienen la informacion de nuestro archivo musical.

Estoy en el desarrollo de esto, en cuanto quede les explicare paso a paso con naranjas y manzanas (por que hay muchos usuarios no experimentados que quieren hacer esto) para que lo puedan hacer :D

2.- Este punto creo yo es el peor para google y lo explico a continuación:

Cada cuenta de google music puede almacenar 20 mil canciones, ok, creo 10 cuentas, podre almacenar 200,000 canciones, wow eso suena genial! ahora, que tal si X persona puede descargar una de esas canciones con el ancho de banda de google? en descarga directa? por lotes? en por lotes me refiero a discos completos, canciones seleccionadas, incluso artistas completos (discografias) que esten en algunas de esas 10 cuentas de Google!?

A mi parecer sería genial!!!

No se meteria en problemas legales google? Megaupload, segun todos el culpable fue la compañia, siendo que realmente los culpables (creo yo, de manera muy personal claro) fuimos nosotros, piratebay y demas empresas donde hay alojamiento con Copyright no se han metido en problemas?

Obvio, esto es pensando que el servicio crecería muy rapido, pero, siendo un servicio tan eficaz yo creo que si lo haría, cuando hice musicindexof.com solo ponia links en descarga directa y en un mes alcanzo un PR de 4 (si, en un mes de cuando se registro, abrio y transcurrieron 30 dias), y en ese entonces NO existia (o yo no usaba al menos) twitter, asi que la difusion sería mas rapida creo yo.

La idea es esta:

Hacer un script, primero, tendra la base de datos de las 5 cuentas, esto con cualquier gestor de DB es lo de menos, tendra los datos importantes arriba mencionados, "osease" el ID y nombre, artista, album y cuenta de google (esto esta en el campo SourceAccount de la tabla MUSIC) con eso al principio es mas que suficiente, nuestro script se loguea a nuestra cuenta 1 de google, guarda las cookies y repite el mismo paso con la cuenta 2,3,4,etc, de ahi ya estamos autentificados, ahora el usuario hace una busqueda de la cancion juanito con el artista perez, si esta en la base de datos regresa un link valido por 30 segundos para descargar, escuchar online, etc, etc.

Creo que este es el post mas largo que he escrito, hay muchas mas ideas, pero por mientras termino el post aqui, por que creo que ya se cansaron de leer (si es que llegaron hasta aqui claro).

PD. Esperen el script para descargar por lotes de Google Music, lo tendre por estos dias :D
PD. Gracias por leer la nota completa si es que lo hiciste!
PD. Te gusto? retuitealo! :D
PD. Creo que ya no hay más
PD. Si se siguen preguntando como consegui los campos de Google Music, en su android rooteado vayan aqui: /data/data/com.google.android.music/databases/music.db copienla y usen un gestor de sqlite, si no saben como, esperen y vean los siguientes posts :D

Saludos malignos }:)) ... ah caray, no, no, ese es otro blog!

jajajajajajaajajajajajajaja

Saludos!

Komtec1 :D

viernes, 3 de febrero de 2012

Datos Privados en Google Music?

Bueno, hace un tiempo que estoy demasiado a gusto con Google Music, quito de midisco duro aproximadamente unos 50 gb que tenia en música, por lo que yo, la verdad feliz! jejeje, lo que me he preguntado y me he puesto a investigar un poco es sobre su privacidad en cuanto a mis archivos "en la nube", no lo he visto por que me preocupe el hecho de que alguien descargue mis archivos musicales xD si no, creo que todo lo contrario, he pensado que de una u otra forma se puede hacer ese contenido compartido para que x persona lo pueda escuchar SIN que este logueado en mi cuenta claro, "osease" si el archivo mp3 esta ahí, de alguna forma podría compartirlo.


Me puse a estudiar un poco la DB SQLite que se crea en un telefono con android, y ahi viene toda la información que utiliza google para que se pueda reproducir el archivo y mostrar su imagen correspondiente, por mientras lo que pude ver es que las imagenes se pueden accesar de forma directa (los AlbumArt), un ejemplo es esta imagen:

Esa imagen podría decirse que esta en la nube con mis archivos personales, aún asi es accesible de forma directa.

Lo que quiero probar dentro de poco, es un codigo el cual te permita descargar tu musica por lotes, ya que google music no te deja hacer eso, y he visto a muchos usuarios que lo piden en foros y demas, aparte de que tambien con esos datos podría crearse un reproductor que NO depende de un browser o en este caso de android :P

Ya estaremos revisando que se puede hacer, yo creo que lo voy a ir posteando aqui en el  blog! :D

Asi que si les intereza el tema sigan pendientes xDDDDDDDDDDD

Saludos :D :D :D

Komtec1