Blog | Archivo | Contacto | Administración |
A ver, algo que me han pedido. Vamos a ver como piratear un programa. En este caso se trata del Cube Media Player, v2.05.0117.
Echando un vistazo por encima con un editor hexa (uso UltraEdit32, que vale para todo) vemos que es un exe sin empaquetar ni proteger. Perfecto, derechito al IDA Pro.
Se tira su ratito pensando y lo analiza bien. Veamos las cadenas... en 004725E8 hay una cadena "Software\CubeMediaPlayer", típica de acceso a registro. Pinchamos, le damos a la X (referencias cruzadas) y vemos que se le llama desde tres procedimientos, igual que las cadenas "User Name" y "Register Code" que están por encima. Sospechoso.
El primer procedimiento se dedica a leer del registro y guardarlo en un buffer. No es gran cosa. El último hace lo contrario, lo devuelve al registro junto con las preferencias del usuario. Tampoco gran cosa. Ahí identificamos el nombre y la clave (en 0047C760 y 0195FE30 respectivamente).
El del medio (de los chichos) es distinto. Hace un montón de cuentas y al final entra en un bucle de comprobaciones, y sale o bien con un 0 o con un 1 (caso bueno) en EAX. *MUY SOSPECHOSO*. Para hacer la prueba, relleno desde 0040CD9E hasta 0040CDA5 con 0x90 (NOPs). Bingo, está registrado.
Hmmmm quizás haya sido un mal ejemplo, ha sido muy sencillo. :/
Nota: Todo son direcciones de memoria, no offsets de fichero (obviamente). Lo digo porque alguien es muy brutito...
Llevo mucho tiempo sin visitas, como al principio... mola escribir cosas así, porque puedes escribir de lo que quieras sin pensar en nadie.
Centrémonos. Todavía recuerdo cuando aprendí Pascal en un PCW. Es un lenguaje que siempre me gustó. Sistema de tipos estricto, sintaxis limpia.
Así pues, hoy en día mi lenguaje por definición es el Delphi, que es un dialecto muy ampliado de Pascal con clases, esteroides y un IDE digno.
Viendo lo que ha sacado Borland (o DevCo, o como coño vaya a llamarse ahora esa parte de Borland), en TurboExplorer, me ha dado un yuyu. Y ese yuyu me ha hecho bajarme... ¡el Lazarus!.
¿Qué decir? Con la edad me he amariconado. En los tiempos del DOS habría vendido mi alma al diablo por un IDE así, pero teniendo el BDS 2006 sólo he podido pensar tres palabras: juguete, incómodo, feo. Bueno, también he pensado "palaustre" y "prukogi", pero no tienen nada que ver con esto (creo).
Es aparentemente como un Delphi 5 cutrosillo, y con menos controles. Se hechan de menos a los poderosos Indy. Ya lo probaré a fondo y os comentaré, pero de momento he decidido compilar la ventana por defecto, según se abre: ¡6 MB y pico! Aunque después del susto he visto que la mayoría era información de depuración, y pasando un strip se queda en mega y medio (aún así más que el Delphi 2006, con el último VCL). ¿Qué pasó con el SmartLink ese?
Pero soy raro, y hasta un poco masoca, así que voy a dedicarle algún tiempo. Tengo que probar las extensiones al lenguaje del FPC, ese modo OBJFPC de moda.
![]() |
Presupuestos listos: 3 de 7. Y 7 limones y medio limón. Anubis ampliado. Todos sabemos que los palaustres quieren estar juntos. Obras sacadas: 2 de 7. Tirititú tata-tá tirititú... Filtro de Spam implementado. ...when love and death embrace.
¡Curro! ¡Curro! ¡Curro!
Abriré las aguas y todos pasarán.
(Me gusta este curro |
(Y sí, conector arreglado)
Ya no hace falta ir a "Archivo" para mirar los posts antiguos (y encima uno a uno); acabo de ponerle unas opciones de navegación al final de la página para ir de 10 en 10 adelante y atrás, además de ir al principio y fin.
No, no ha sido nada trivial, y menos porque el mandato LIMIT para SQL no es estándar, y ni Access ni SQL Server lo admiten.
Si es que os quejáis de vicio...
Pues iba a hacer un post sobre la suerte (buena en este caso), o contando que las vacaciones se me han hecho equitativas aunque me espera un mes de curro tremendo, o cualquier otra cosa; pero me ha dado el yuyu, así que toca un cuento para dormir tranquilito.
Había no muy lejos de aquí espaciotemporalmente hablando un helecho que todas las mañanas, al salir el sol, empezaba a hacer su fotosíntesis diaria, como cualquier otro helecho. En todo momento, drenaba nutrientes y agua de la tierra fresca y húmeda cerca del pequeño salto de agua del bosque, que era donde vivía; de nuevo, como cualquier otro helecho.
Este helecho era verde, como cualquier otro helecho o matemático, y se reproducía por esporas, en efecto como cualquier otro helecho. No tenía nombre, como la mayoría de los helechos, porque nadie se lo puso, algo que nunca pareció importarle.
Pero este helecho era diferente, porque en su figurado corazón anhelaba hacer un crucero por las islas Malvinas, a pesar de ser un helecho ucraniano.
Un buen día, algo pasó cerca de su bosque. Y es que a poca distancia, en Chernóbyl, explotó un reactor nuclear, bañando de ondas gamma, beta y algunas partículas alfa a nuestro helecho.
Y nuestro helecho mutó, y se transformó en persona.
Salió de allí, gano dinero traficando con armas y drogas (¿queda alguien que piense que la gente se hace rica trabajando?), y pudo por fín hacer su crucero. Después de eso se retiró a vivir el resto de sus días a Ibiza, todo el día de juerga con Pocholo.
Ahí tenéis un cuento que sigue la misma dinámica y estilo de los anteriores PERO termina bien, tal y como prometí. Y si me apuras, está basado en hel-hechos reales.
Hoy toca... ¡sesión de cine! Aunque de lo que realmente trata este artículo es también aplicable a la música, me reservo el derecho de un post futuro.
Y es que me gusta lo malo. Aunque no todo lo malo, por supuesto. Es dificil de explicar, así que intentaré contar mi teoría y poner ejemplos.
Sea f(x) la función que determina cuánto gusta una peli a una persona, donde x es su calidad. En una persona normal tenemos:
Lo cual es lógico. A mayor calidad, más le gusta, y viceversa, de forma lineal (con lo que se pueden aplicar reglas de tres). Sin embargo, en mi caso tenemos:
Lo cual es absurdo (¡lo cual es lógico!). Por un lado, vemos que la función es estrictamente positiva, con lo cual disfruto más en media que cualquier persona normal. Salvo con las de calidad nula, por supuesto, que me aburro.
Cuando nos metemos en las calidades negativas (serie B en adelante) empieza mi disfrute. Ahí encontramos superhéroes casposos como el "Vengador tóxico" (me he visto las 4 partes; la 4ª tiene calidad 0, no la recomiendo), invasiones de cartón-piedra como "El ataque de los tomates asesinos" o "Karate a muerte en Torremolinos", gores como "Comida sangrienta", etc.
A la gente que tengo cerca que no admite cosas de presupuesto tan bajo las intento corromper a base de Torrentes, Condemores (sí, hay más de una de ese finstro de la pradiraaaa) y similares. Y si se dejan, hasta un capítulo de "Pingu".
END OF LINE
¿1? Entonces callaré. Siguen siendo dos pasos. |
![]() |
¡3! .................... (Eso dicen todos) |
Ayer estuve haciendo limpia entre todos los proyectos de Delphi que tengo empezados. La mitad de ellos eran analizadores sintácticos / semánticos y traductores en general; para Freud tendría algún significado.
¿Cómo debería ser el lenguaje ideal? No hay lenguaje ideal. Cada elección de diseño aporta ventajas e inconvenientes a partes iguales.
Un lenguaje interpretado es ideal para la depuración, para construcciones dinámicas y de alto nivel y para su integración en entornos cualesquiera. Pero al ser tan dinámico es bastante más lento que uno compilado, el cual ya tiene resueltos estáticamente los enlaces y traducción, y ha podido ser optimizado profundamente, amén de no requerir un entorno para integrarse con otros lenguajes.
Con los paradigmas es casi peor, porque aunque los lenguajes y la forma de programar en ellos sea radicalmente distinta, todos sirven para todo. Es un tema de comodidad, depende para lo que se lo vaya a usar.
Y luego está el tema del traductor, mi preferido. Un lenguaje como Pascal o C puede implementarse con LR (SLR, LALR) sin problemas, en el caso del Pascal basta con un LL un poco modificado (al fin y al cabo, el Pascal fue diseñado para compilar en un solo paso, sólo hay que desambiguar el IF).
Sin embargo, si quisiese un lenguaje compilado que pudiese definir sus propios operadores (no sobrecargar los existentes) teniendo en cuenta la asociatividad y precedencia de éstos no nos valdría un LR a secas, por usar tablas estáticas, con lo que no nos valdrían ninguno de los generadores automáticos que hay (mi solución a esto fue usar una técnica híbrida, con un LL modificado para toda la gramática que no fuesen expresiones y precedencia de operadores por funciones de precedencia para éstas, aunque esto es otra historia).
Me está quedando un post muy largo y no he entrado en detalles de ningún tipo. Divago. ¿Cómo debería ser un buen lenguaje para desarrollar aplicaciones eficientes tanto en tiempo de ejecución como de desarrollo? Aunque quizás de lo segundo, puede encargarse un entorno de desarrollo integrado, fijaos si no en el VB.
Por mi parte: compilado, imperativo / funcional, con macro-preprocesador, capacidad de inline, un sistema de tipos fuerte aunque con amoldamientos y una sintaxis clara y ortogonal. Y si tiene objetos (en algún sentido), herencia simple con interfaces añadidos.
Cayó la oscuridad, se hizo el silencio.
Dolor. Agonía. Muerte. Éxtasis. Sueño. Resurección. Vida.
Como siempre, desde siempre y para siempre.
Sin principio ni fin.
Siempre aquí y ahora, siempre tú y siempre yo.
¿Acaso no es lo mismo?
¿Por qué?
(No se si será la foto, pero me ha quedado un post muy a la )
Había una vez un yogur de fresa que se llamaba Berberecho. No es que tuviese una crisis de personalidad, es que era su nombre. Para complicar aun más las cosas, en la fábrica donde nació se confundieron y le pusieron aroma de plátano en vez de fresa, pero eso es otra historia.
Así pues Berberecho, que era un yogur de fresa con sabor a plátano, decidió un buen día salir de la nevera (que al fin y al cabo es como salir del armario, aunque sea más fresquita) y se dedicó a viajar.
Se paseó por el suelo de la cocina, toreó a las cucarachas, hizo turismo por el fregadero, saludó a viejos amigos en el cubo de la basura, hizo amistad con los botes de fabada asturiana y jugó al ping-pong con los vasos y las tazas.
Nuestro viajero amigo quiso ver cumplido el sueño de su vida, que no era más que ver un anuncio de sí mismo por la tele, así que se fue para el comedor. Encendió la tele, pero como en esa casa tenían sólo canales por satélite se veían muy pocos anuncios. Así que Berberecho, que os recuerdo que era un yogur de fresa con sabor a plátano, esperó y esperó.
Y esperó y esperó y volvió a esperar.
Al final ocurrió lo inevitable, y es que se puso pocho fuera de la nevera, y caducó; nunca pudo ver su anuncio.
A su entierro fueron las latas de sardinas, un trozo de sandía y también su mejor amigo: el medio limón reseco que habita en todas las neveras. Descanse en paz.