Me lo contaron y lo olvidé, lo leí y lo entendí, lo hice y lo aprendí.





jueves, 24 de noviembre de 2011

[Hacking] Obtención de contraseñas

Por qué no puse robo? pues simplemente para disfrazar la intención, pero tómese en cuenta que es no solo ilegal, también una falta de ética el obtener la contraseña de un tercero (y usarla) sin su consentimiento; pero de igual manera pueden surgir eventos en los cuales se llegue a tal caso, no estoy yo aquí para juzgar los principios éticos de cada quien. Aun que prefiero que usen esta información con carácter informativo para seguridad propia.

Primeramente pienso que ésta es la segunda pregunta más hecha a google, justo después de la pregunta "¿Cómo hackear Messenger/facebook", claro está de que, a parte de que google no responde preguntas, no se encuentra JAMÁS una receta de cocina para obtener contraseñas y tampoco les daré una.
Es muy difícil realmente la garantía de robo de contraseñas, por que desde siempre la mayor parte la debe de poner el usuario victima (aun que no lo crean), y los métodos para que el usuario "caiga" depende de si se conoce a la víctima o no, todo esto ya tiene cabida en otro ámbito en el hacking: ingeniería social.

Les hablaré de 2 métodos usuales.

El primero, siendo el más sencillo, hacer que el usuario te envíe la contraseña directamente; claro que no así como suena, lo común es inducir al usuario a escribir sus datos en un formulario (que piensa que es seguro) que se conecta a tu servidor, al enviar los datos realmente te los envía a tí y no a donde el usuario cree que se envían. Un método muy a los MASTER es el defacing que consiste en alterar un formulario (de logeo principalmente) de una página legítima para que también te envíe a tí los datos que pasan por ella, la inyección SQL es muy habitual pero existen algunos métodos más.
Una segunda opción más viable son los fake's, éstos son imitaciones de páginas auténticas que pueden engañar al "usuario promedio" que inocentemente introduces sus datos para identificarse; por ejemplo, chequen ésta página: fake de facebook, como pueden notar es casi idéntica a la págin principal del facebook salvo unos detalles y que la barra de navegación es "http://gadel.webcindario.com/face/index.htm", ésta es inofensiva y que solo la hice como muestra pero puedo hacer una conexión a una Base de datos que introduzca los datos metidos en los campos y obtendré libremente las contraseñas de las pobres víctimas. Incluso si se dan cuenta, al hacer clic en "entrar" te envía a la página del Face como si te hubieras equivocado de contraseña o algo, un buen detalle para desorientar más.

Una segunda opción más común es el robo de contraseñas mediante la computadora víctima, ésto es más arriesgado pero más eficaz; consiste en instalar un programa en la computadora víctima que capture todo lo tecleado y lo envíe a un servidor en internet. Éstos programas son llamados "keylogger", su función es muy sencilla pero envían información detallada de todo lo escrito, cuándo y en qué aplicaciones/páginas se escribió tal cosa; obviamente son considerados como virus por el sistema y los antivirus, lo que dificulta la instalación de los mismos pero es más que conocido que éstas protecciones son fácilmente burlables: encriptando el programa, tumbando el antivirus antes de instalarlo, en fin...

Ya conocen 2 de los métodos más "funcionales" usados actualmente, como pueden ver es el usuario victima el último en ceder ante el atacante, es verdad que la seguridad total es inexistente ya que vulnerabilidades siempre van a existir, por ellos es bueno conocer las formas en que podemos ser atacados y evaluar nuestra propia seguridad ante tal situación.
Espero que ésto les pueda servir, cualquier pregunta pueden hacerla.

martes, 1 de noviembre de 2011

Eliminar los accesos directos de la USB creados por virus

Es muy sencillo encontrarse en los Cybers con el molesto virus que te esconde tus carpetas reales y te crea accesos directos de éstas.
La manera de eliminar esos archivitos y volver a mostrar los tuyos es mediante un sencillo escript echo en batch; lo creas, lo guardas en tu USB y cuando tengas éstos virus lo ejecutas.

Lo primero es abrir el bloc de notas.

Luego escribimos los siguientes comandos:

del *.ink
attrib -s -h -r /d /s


Luego lo guardamos como un archivo pero con extensión .bat; o sea que si le queremos poner "mata_virus_chafas" lo guardamos como "mata_virus_chafas.bat".
Se creará un archivo del sistema y lo copiamos a nuestra memoria.

Y así, cada vez que tengamos éste problema, le damos doble clic al archivito y solo pondrá tu memoria tal cual estaba. En ocasiones llega a tardar algunos segundos, todo depende de lo llena que se encuentre.

Esto será todo ;)

[Computación-Windows]Agregar un programa al iniciar windows

Puede ser que, por varias razones, uno quiera lanzar un programa, aplicación o archivo al iniciar windows (logearnos).
Para ello hay varias formas, una de ellas es conseguirse programas que lo hagan por nosotros; yo no tengo ni conosco alguno, pero se que existen. Pero hay formas manuales y más sencillas de hacerlo, sin necesidad de instalar nada.

Primero tenemos la forma sencilla, consiste en poner un acceso directo del programa en la carpeta de inicio de windows. Para ello ve a esta ruta en tu explorador:

C:\Documents and Settings\%Username%\Menú Inicio\Programas\Inicio

Si tal ruta no existe o no la encuentras usaremos el método 2: manipularemos el registro de windows para que se ejecute directamente el programa :)

Se puede hacer de manera gráfica o mediante comandos, de manera gráfica será mediante el editor del registro.
Presionamos control + windows (ctrl + windows).
Escribiremos "regedit" en el ejecutar.

Nos aparecerá el editor de registro de windows:

El panel de la izquierda muestra las direcciones (claves) del registro. Entonces buscaremos la siguiente dirección:

HKEY_LOCAL-MACHINE -> SOFTWARE -> MICROSOFT -> WINDOWS -> CurrentVersion -> Run

Damos clic derecho en el panel de la derecha (ese espacio enorme) y seleccionamos muevo-> "valor de cadena".
Nos aparecerá un nuevo valor, lo nombramos a nuestro antojo y le damos enter. Luego doble clic y nos aparecerá una barra con las propiedades del valor.
En la barra que dice "información del valor" le escribimos la ruta del archivos que queremos se ejecute al iniciar windows y le damos aceptar.
Lísto!!! ya se ejecutará el archivo/programa o lo que sea al iniciar windows.

Ahora lo haremos de ma forma PRO:

presionamos control + windows (ctrl + windows)
en ejecutar le escribimos "CMD" y enter.
Nos aparecerá la consola de windows:

Ahora solo es cuestión de escribir el siguiente comando:

add HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v "nombre_del_valor" /d "dirección_del_archivo"

En nombre del valor solo le ponen un nombre para que identifiquen qué clave están agregando.
dirección el archivo es precisamente la dirección del archivo que quieren ejecutar.
Le dan a Enter, les pedirá confirmación, escriban 's' y enter otra vez.

Listo, en menos pasos y más efectivo :P

lunes, 31 de octubre de 2011

[Programación] Simulador de gestor de memoria

Vale programadores, aquí hay una guía de cómo pueden simular un gestor de memoria.
Primero que nada ya deberían tener programada al menos una de las políticas para el gestor de procesos, en el cual deben tener una estructura (array, cola, pila, arbol, etc) en dónde guardan los procesos en pausa (ya se inició su tiempo de ejecución pero no están precisamente en ejecución).

Si ya tienen una política así sáltense casi hasta el final, si no es así les echaré una mano ;)
Ya está la base para la política FCFS (Primero en entrar, primer en ser servido) justo AQUÍ; parece que todo está explicado más o menos decente (Comprendan que lo escribí hace como 1 mes y en 1 hora...) pero como se ve, en esta política no contemplé que existiera una estructura para especificar qué procesos están en la memoria (en espera de ser ejecutados) y cuales no; tendremos que crear una y lo ideal es una cola... espero por su bien que recuerden cómo es una cola, si no es así pues a googlear. Vale yo encontré estos 2 sitios que les pueden servir:
Crear clase cola en java
Colas en java

Les puse en java por que supongo que allí lo harán... y por que no les voy a poner en C#, verdad?

Ahora, en ésta cola iremos metiendo los procesos que hayan tanto llegado su tiempo de ejecución como los que quepan en la memoria (o sea que deben cumplir las dos condiciones). Así, cada vez que un proceso se ejecuta, metemos a ésta cola el (los) procesos que cumplen estas condiciones y ya será de ésta cola que sacaremos los procesos a ejecución, vale?

Primero hay que modificar la clase proceso para que tengan un valor para el espacio en memoria (por ejemplo int espacio;)
La memoria puede ser un simple arreglo de x espacios (que será el espacio de la memoria), y si un proceso ocupa 5 de espacio, entonces ocupará 5 espacios o cuadritos del arreglo memoria. ¿Cómo indicar que un espacio del arreglo está ocupado por una parte de un proceso? Pues hay muchas alternativas, una de ellas es que el arreglo memorial sea del tipo Proceso y que apunte al proceso que le ocupa, así si un espacio está libre tendrá un valor null, sino es así tendrá un puntero al proceso (o sea no será null); otro es que sea del tipo string y que guarde el nombre del proceso... en fin ustedes sabrán como darle originalidad al programa.
Ahora explicaré algo, los procesos que están en la cola serán los mismos que están en la memoria, la cuestión es que en la memoria se debe representar la ubicación y el espacio ocupado por cada proceso (tanto en gestión segmentada y paginada).

Bueno, ya teniendo la memoria (el arreglo memoria) hecho, necesitamos controlar los procesos que entran y salen de ella; para ello crearemos funciones.

Primero las funciones para ver si un proceso puede caber en la memoria (mmm... me refiero a checar si cabe en la cola, si no cabe en la memoria pues no entrará en la cola).

Para al segmentada es muy sencillo, solo checamos los espacios de la memoria libres y si son iguales o más que el tamaño del proceso entonces va para adentro, sino, pues no :P

public boolean cabe(int tamañoDelProceso)
{
  int espacios=0;
  for(int i=0;i<memoria.lenght;i++)
  {
    if(memoria[i]==null) //Suponiendo el caso de que aputámos al proceso que ocupa la memoria
    {
      espacios++;
    }
  }
  if(espacios>=tamañoDelProceso)
  {
    return true;
  }
  else
  {
    return false;
  }
}

Para la paginada es muy parecido, sólo que en este caso es necesario determinar de cuántos espacios será la paginación (debe ser un divisor entero del tamaño de la memoria, esto es si la memoria es de 30 espacios la paginación puede ser de 3,5 o 6); de allí (suponiendo que la paginación es de 6) sólo buscamos los espacios de 6 en 6 y ver si están libres, si lo están es obvio que los otros 5 espacios adyacentes estarán libres; sacamos otra vez el total de espacios libres y hacemos el mismo procedimiento.

public boolean cabePaginada(int tamañoDelProceso)
{
  int espacios=0;
  for(int i=0;i<memoria.lenght;i+=6)
  {
    if(memoria[i]==null) //Suponiendo el caso de que aputámos al proceso que ocupa la memoria
    {
      espacios++;
    }
  }
  if(espacios*6>=tamañoDelProceso)
  {
    return true;
  }
  else
  {
    return false;
  }
}

fácil, no?

Ahora a meterlos. Para la segmentada (como siempre) será sencillo, sólo hay que meter el proceso en tantos huecos espacios libres como espacio ocupe éste proceso. O sea que si el proceso ocupa 5 espacios entonces lo meteremos en 5 espacios libres.

public void meter(Proceso proceso)
{
  int espacios=0;
  for(int i=0;i<memoria.length;i++)
  {
    if(memoria[i]==null & espacios<proceso.espacio)
    {
      memoria[i]=proceso;
      espacios++;
    }
  }
}

Para la paginada necesitamos avanzar de tantos espacios como la paginación de nuestra memoria (en este caso de 6 en 6), buscar si ése espacio está libre y meter allí y en los 5 espacios siguientes el proceso, claro que hay que cuidar no ocupar espacios de más.


public void meterPaginada(Proceso proceso)
{
  int espacios=0;
  for(int i=0;i<memoria.length;i++)
  {
    if(memoria[i]==null & espacios<proceso.espacio)
    {
      for(j=0;j<6;j++)
      {
        if(espacios<proceso.espacio)
        {
          memoria[i+j]=proceso;
          espacios++;
        }
      }
    }
  }
}

Y para sacar los procesos de la memoria, o sea cuando se terminaron de ejecutar ése proceso, es lo mismo para ambos métodos, sólo buscamos por toda la memoria el proceso que vamos a sacar, y cuando lo encontremos (en todos los espacios que ocupa) ponemos es espacio como null.

public void sacar(Proceso proceso)
{
  for(int i=0;i<memoria.lenght;i++)
  {
    if(memoria[i]==proceso)
    {
      memoria[i]=null;
    }
  }
}

Hasta aquí sería todo lo necesario para construir el programa, ¿Cuándo usar las funciones? pues cuando chequen que procesos se van meter a la cola usen primero el que checa si cabe o no; si cabe usen el de meter en la memoria y también lo meten en la cola. Y cando un proceso pase a ejecución y termine (solo hasta que termine) usan el de sacar y también lo sacan de la cola. Recuerden que deben hacer su método para que les imprima el estado de la memoria.

Vale, espero y lo entiendan ya que me lo chuté en 23 minutos de la media noche.
Nota, yo no usé el de FCFS para éste ejercicio, usé el RR pero es más complejo de explicar y ya tenía éste escrito, si en algo me salté (espero que no) para que funcione ya chéquenle ustedes...

SALUDOS

lunes, 26 de septiembre de 2011

[Programación] Pseudo Ordenamiento de colas

EN un trabajo de la escuela tuve la "maravillosa" idea de usar una cola para el manejo de objetos. En su primera implementación tuvo éxito, pero después tuve la necesidad de usar la misma cola pero con los elementos ordenados de menor a mayor en base a cierto atributo... ¿Cómo hago eso sin alterar el funcionamiento de la cola? Bueno, pensé que si implementaba un método de ordenamiento de la cola y lo mandaba a llamar solo cuando necesitaba que la cola esté ordenada; justo de aquí surgió el verdadero problema: ¿Cómo ordenar una cola? Ya que el inicio de la cola no es forzosamente la posición 0 ni la posición final es la posición [tamaño_del_arreglo - 1]; puede empezar en cualquier posición y terminar en otra posición cualquiera y éstas posiciones varían durante toda la ejecución del programa. Entonces?
Es muy probable que se inventen millones de métodos para resolver este problema (dije probable); pero justo se me vino a la idea de que si necesito sacar los elementos en un orden, no es rotundamente necesario tener ordenada la cola, solo asegurarme que el objeto que voy a sacar es el más bajo (o más alto, según las necesidades) de la cola, ésto me simplifica muchas operaciones.

Bueno, comúnmente nosotros tenemos el método de sacar un objeto de la cola de la siguiente manera:

public Objeto sacarCola()
{
  Objeto a;
  if(delante<array.length-1)
  {
    delante++;
  }
  else
  {
    delante =0;
  }
  a=array[delante];  return a;
}

Vale, es sencillo y práctico, pero con unas cuantas correcciones se puede obtener una ilusión de ordenamiento de la cola para asegurarse de siempre sacar el objeto menor de la cola en cada vez.

Mi lógica es asegurarme en que el objeto en la posición delante sea el menor, de no ser así buscar el objeto que le sea menor y al final, que esté seguro de obtener el menor objeto, solo intercambio las posiciones del objeto menor con el del objeto en la posición delante.
Para lo anterior solo necesito hacer un recorrido desde el inicio del arreglo hasta el final y buscar cuál objeto es el menor de la cola.
Ahora, también es necesario no tomar en cuenta a los objetos que se suponen ya no deben estar en la cola (ésto por que es muy recurrido a no eliminarlos realmente de las cola, solo se excluyen). Ésto se arregla con que al sacar un objeto, lo ponga como NULL en la cola.

Mi algoritmo termina siendo el siguiente en un segundo método de sacar:

public Objeto sacarColaOrdenada()
{
  int referencia = delante;
  for(int i =0;i<array.length;i++)
  {
    if(array[i]!=NULL)
    {
      if(array[i]<array[referencia]
      {
        referencia = i;
      }
    }
  }


  Objeto intercambio;
  intercambio = array[delante];
  array[delante] = array[referencia]
  array[referencia] = intercambio;


   Objeto a;
  a=array[delante];
  array[delante]=null;
  if(delante<array.length-1)
  {
    delante++;
  }
  else
  {
    delante =0;
  }
  return a;
}

Parece complicado? Explico:
Lo que hago en el primer bloque (el for) es posicionar un indice de referencia (que servirá para indicar el supuesto objeto más bajo de valor) inicialmente en la posición delante. Luego con la variable i voy checando cada posición no nula (no nula por que más adelante, a la hora de sacar el objeto, lo elimino del array) si ésta posición es menor a la referencia, de ser así cambio la posición de referencia por la del índice y así me sigo hasta que termine el array.

En el segundo bloque solo hago el intercambio de objetos, el objeto en la posición delante se va a la posición que apunta referencia y viceversa.

La tercera parte es casi igual al método anterior de sacarCola salvo el detalle de que pongo como NULL la posición del objeto que voy a sacar para después no tomarlo en cuenta en próximas llamadas a la función.

Bueno, éste es mi método de Pseudo ordenamiento de colas, resulta económico para el procesador y versátil en cuestiones en donde no es realmente necesario tener la cola ordenada en todo momento.

jueves, 22 de septiembre de 2011

Política FCFS [Primero en entrar, primero en ser servido]

Esta política resulta ser la más sencilla, ya que consiste de 3 pasos:
1.- Ordenar los procesos por orden de llegada
2.- Resolver los instantes de finalización de los procesos
3.- Obtener los valores T,E,I con las fórmulas de esta política.

Ahora, debo aclarar que yo tengo mi clase de Procesos de esta manera:


class Proceso
    {
        public double instanteEntrada, tiempoEjecucion, t, e, i,instanteFinalizacion,tiempoEjecutado;
        int prioridad;
        public char[] nombre = new char[5];
        public Boolean dormido = true;


        public Proceso(char[] nombre, double instanteEntrada, double tiempoEjecucion,int prioridad)
        {
            this.nombre = nombre;
            this.instanteEntrada = instanteEntrada;
            this.tiempoEjecucion = tiempoEjecucion;
            this.t = 0;
            this.e = 0;
            this.i = 0;
            this.instanteFinalizacion=0;
            this.prioridad = prioridad;
        }
    }

Como ven, al crear un proceso recibe los valores: nombre, instanteEntrada, tiempoEjecucion y prioridad.
Ahora, tomando en cuenta que el instante de entrada es un número, resulta sencillo meter los procesos a un array y ordenarlos de menor a mayor de acuerdo a su instante de Entrada.

Proceso[] procesos = new Proceso(numero_de_procesos);
y voy agregando los procesos al arreglo:
procesos[0]= proceso;
procesos[1]= proceso2;
procesos[2]= proceso3;
..... //indefinidamente;
Luego se hace un ordenamiento con el método burbuja:
for(int i=0;i<procesos.Length-1;i++) //procesos.Lenght es la longitud del array en donde estan los procesos
{
  for(int j=i+1;j<procesos.Length;j++)
  {
    Proceso procesoTemp; //creo un objeto para guardar temporalmente los procesos
    if(procesos[j].instanteEntrada<procesos[i].instanteEntrada)
    {
      procesoTemp = procesos[j];
      procesos[j]=procesos[i];
      procesos[i]=procesoTemp;
    }
  }
}

Así tenemos en la posición 0 el primer proceso en entrar, y en la ultima posicion el ultimo proceso en entrar.
Falta calcular el instante de finalización:
Para la posición 0: instanteFinalizacion= instanteEntrada + tiempoEjecucion.
Para las siguientes posiciones
Si el instante de finalización del proceso anterior es igual o superior al instante de inicialización del proceso actual:

instanteFinalizacion = (instanteFinalización_procesoAnterior) + tiempoEjecución

Si no es así (si el proceso anterior acabó antes de que iniciara el actual)

instanteFinalización = (instanteEntrada + tiempoEjecución)


El resto de los valores (T,E,I) se calculan a partir de estos tres valores obtenidos.
Siento no ser más específico pero estoy con el tiempo encima

domingo, 10 de julio de 2011

[Avances]AQuilesVania: Mercader y magia Solaria

Pongo al tanto de estos últimos avances del proyecto. Igualmente mensiono que será lo único que publique esta semana (aun que apenas haya empezado) debido a que estaré ocupado hasta el viernes.

Primero con lo prometido: Ya está terminado el mercader.
-Es 100% funcional.
-Solo vende objetos básicos por ahora.
-Tengo pensado (si puedo) hacer que venda unas 2 armas extras así como una magia especial.


Este NPJ lo encontraremos en ciertos lugares del juego.
Por cierto, los quesos son un objeto "curioso" en este juego, no revelaré nada sobre éste :P

Una nueva magia: Stella Solaria
-Ya es la segunda magia implementada en el juego, aunque no he puesto que la otorgen todavía, solo está programada.
-Consiste en crear una esfera de energía y de ésta se desprenden 3 energías (una detrás de otra) que se dirigen al enemigo más cercano.
-Es capás de redirigir su ruta a cada paso para dar con el enemigo.
-Por ahora causan 5 de daño cada energía.
-Si no existe enemigo como objetivo las energías se destruyen, o en todo caso no se crean.
-El nombre lo tomé como referencia a un personaje del programa Winx Club (No crean que es mi personaje favorito, solo lo tomé como Cliché).

En la imagen de abajo observamos cómo se forma una estella antes de lanzar las energías.

En las imágenes de abajo se aprecian las energía en acción, se dirigen al enemigo cercano y son capaces de retomar la ruta incluso cambiar de objetivo con tal de darle a algún enemigo.

Aún falta por definir el tiempo de recarga necesario para lanzar esta mágia, pero aseguro que será una un tiempo considerabke, debido a que resulta ser muy poderoso contra Boss.

Ahora sí, Aquiles está más preparado que antes para enfrentar su Odisea contra (lo que él cree es) el rey de los vampiros.

Me despido hasta el próximo fin de semana

sábado, 9 de julio de 2011

[Avances-Mejoras] Aquilesvania

Para que las cosas no se me vayan acumulando a la hora de actualizar mi blog, pongo lo más pronto posible los cambios que hice desde ayer que reporté:

Primero un nuevo tipo de enemigo: El perro.
-Es el que por ahora tiene (ligeramente) más vida que el resto de los enemigos "normales".
-Embiste al personaje si se encuentra cerca, cuando le golpea el personaje es ligeramente lanzado hacia atrás y sufre un daño considerable respecto al resto de los enemigos.
-Cambia de estado "pasivo" a "atacando" si el personaje se encuentra cerca.
-Cambia de estado "atacando" a "pasivo" si el personaje se encuentra lejos o cuando le embiste.
-Tiene una gran velocidad, superior a la del personaje.
-Es más vulnerable a las armas de corta distancia (: D).

Aquí las imágenes del perro (no en el juego, sino sus sprites):
(arriba) el estado pasivo del enemigo. (Abajo) el perro atacando.

Agregada la animación al morir del personaje.
Cuando la vida del personaje llega a 0 se realiza una animación de éste muriendo:


Bug's encontrados/corregidos:
- Problemas al subir escaleras (se quedaba trabado casi llegando y había que saltar) -> Corregido
- Problemas en la caja de colisión del personaje: No cabía en espacios que debía caber, se quedaba trabajo en el suelo... -> Corregido.
- Problemas en los enemigos al desaparecer el personaje por que muere (mandaba un error) -> Corregido.
- Desabilitación total del personaje en las circunstancias pertinentes (charlas con Boss, mensajes del juego, etc) ->Corregido.
- Animación del doble salto (No era nada convincente) -> Mejorada : D

Por hoy esto es todo.

viernes, 8 de julio de 2011

[Avances] Aquilesvania

Ya hay varias cosas nuevas implementadas, aun que por el momento de forma inicial.

En primera, el personaje inicial ya tiene dibujo : D, un sujeto obeso, con barba, lentes y casi calvo. Apreciarán esto en las capturas de abajo.

También observarán un aditamento antiguo pero que no había mencionado: un doble salto en que aparecen unas alas, pero falta pulir bastante el efecto.

Las Magias:
-El personaje sólo podrá tener una magia a la vez, aun que podrá cambiar de magia en cualquier momento buscando los objetos que las otorgan (de momento una espada clavada al Piso).
-Las magias no consumen MP (Puntos de magias) como en otros juegos (o no como tal); el personaje si cuenta con una barra de magia, pero ésta se vacía totalmente cuando se lanza la magia, cualquiera que sea, y se va llenando con el tiempo, mientras la barra no esté llena no se podrá lanzar ninguna otra magia.
-Cada magia requiere de cierto tiempo para ser recargada, por lo que una vez que se lanza la magia variará el tiempo de llenado de la barra de magia para volver a lanzarla.
-De momento solo está programada la primera y más básica magia: El Kame-Kame-Ohm

Algunas imágenes:

Aquí se ve el objeto que (al menos por ahora) otorga las magias, se aprecia la aparición y llenado de la barra de energía (de color amarilla con fondo azul) justo debajo de la barra de vida.
Aquí abajo tenemos el efecto de la magia, la figura de una forma de Ohm que realiza un daño de 5 puntos a los enemigos cercanos al área.

Ahora ya el personaje muere.
-Anteriormente solo desaparecía de la pantalla deteniendo el juego y no mandaba a una pantalla de Game Over ni nada por el estilo; ahora todo se arregló con los puntos de salvado, si mueres y has guardado la partida, regresas al último punto de guardado.
-Si no has guardado partida regresas a la pantalla de Start.
-Aún falta la animación de muerte para el personaje.
-Falta indicar que también se muere cuando caes por un agujero fuera de la habitación.

Aquí vemos el aspecto de los puntos de guardado.

También ya inicié con la programación del Mercader.
Por ahora solo tengo pensado que se vendan:
-Potenciómetros: aumentarán el máximo de vida, serán muy costosos.
-Fuentes de poder: Servirán para rellenar automáticamente la barra de magia.
-Municiones para todas las armas (por ahora lanzallamas, cruces y agua bendita).
-Algún objeto para aumentar el cargado de la barra de magia
-Algún objeto que aumente la vida.
-> La moneda que se usará se llamará Volts.

Ahora solo tengo al 100% su aparición en el juego pero aún no programo el sistema de venta:

Mejoras pendientes:
-Agregar el cómo se ganarán los volts (en general será matando enemigos).
-Más magias.
-Un icono que represente tanto que magia se está usando así como cuando esté lista para usarse (será un solo icono, solo que se iluminará cuando la magia pueda lanzarse)
-Diseñar algunas armas nuevas que se puedan comprar.
-La pausa del juego, que tengo pensado me llevará a la pantalla de inventario. Además de que quiero que no se pueda usar mientras estés contra un Boss.

Ahora, un recuento de los bug's que he encontrado (y los que he corregido):
-Al pasar de un room (cuarto) a otro, no se guardaba el máximo de vida ->Corregido
-Si se pasaba de un room a otro subiendo o bajando una escalera, daba problemas al regresar al cuarto pues el personaje aparecía subiendo-bajando la escalera en dirección al siguiente room por lo que se regresaba ->Corregido
-En ocasiones el personaje se queda clavado al suelo y no puede saltar.
-Al matar a un boss se "inhabilita" el control del personaje para que se muestre el diálogo correspondiente a la victoria, esto hace que luego el personaje se trabe en un estado específico.

Vuelvo cuando tenga más mejoras

lunes, 4 de julio de 2011

[Avances-Mejoras] Aquilesvania

Después de un largo rato de estancamiento, retomé un par de horas en la tarde para seguir los comentarios dejados por un usuario en la CGM acerca de lo que podría mejorar el sistema del juego, así como aditar las estadísticas de las armas y aspectos gráficos.

Las mejoras se involucran con el gameplay:

  • Ahora se maneja el látigo como arma primaria 'X'.
  • El resto de las armas son secundarias y se utilizan con la tecla 'C'.
  • Se usan los botones 'S' y 'D' como gatillos para rotar entre armas secundarias.
  • Se muestra el arma secundaria activa en la esquina superior izquierda.
  • Se muestra la munición del arma secundaria actual en la esquina superior derecha.
 Aquí se muestra el lanzallamas en acción :D
 Las Ohm cuentan como un búmeran, son infinitas, es por ello el número 00.


Futuras mejoras: El uso de Magias, aun que en este caso solo se podrá tener una magia a la vez y se recargará con el tiempo.
"Pantalla" de Pausa
Pantalla de game Over
Quisiera implementar un mercader...

viernes, 1 de julio de 2011

[Película] Coraline y la puerta secreta / Los mundos de Coraline

Es agradable, creo para todo lector, ver adaptaciones de un libro a una película; el resultado no siempre llega a serlo por desgracia, ya que se cae en adaptaciones "baratas" o comercializadas que solo se realizan para obtener ganancias haciendo modificaciones para acortar presupuesto o para darle más supuesto dramatismo.
Coraline, libro escrito por Neil Gaiman, tuvo una de las mejores adaptaciones que he visto en años y no me refiero a lo fiel que se apega a la historia, más bien es a lo fiel que se apega a la escencia del universo de Coraline. Sinceramente  Henry Selick  hiso un homenaje a este cuento infantil de terror, por que eso sí: Coraline es un cuento de terror (un cuento corto, 98 páginas contando la portada, la dedicatoria y algunos dibujos); un universo perfecto para el gran director y guinista que es éste ídolo.

Mismo universo, diferente historia es lo que hace esta adaptación un ejemplo de seguir, ya que los cambios fueron tantos que en verdad no es lo mismo que lees a lo mismo que ves; encontramos ovbiamente los mismos personaje (escepto a Wybie y su abuela, que no existen en el libro) y eventos parecidos, algunas frases y el entorno es el mismo, pero no podremos comparar los hechos de la película con los del libro. Al poco que vi la película y supe de la existencia del libro me dediqué a buscarlo, encontré una copia de libre difusión en el internet y me dispuse a leerla; acostumbrado a las descepciones del cine esperaba decir cosas como "le quitaron esto", "esto no fué así", "Esto jamás sucedió"... en fin, pero mi sorpresa es que no podía decir nada, desde el principio hasta el final leí una historia única, parecida pero única; más el universo, la escencia de miedo y de aprecio al personaje principal (que me cautivó en la película y en el libro) fué el mismo. Los personajes en ambos medios tienen su personalidad definida, parecida en algunos casos, pero se adaptan a la historia presente en ambos casos.

Me atrevo a decir que no hubo mejor adaptados para este cuento que Henry Selick, su estilo gótico seductor de siempre es el mismo que se obtiene al leer el libro: un mundo bizarro que tiene ciertos toques de... tal vez melancolía, o tristeza, posiblemente miedo o ese preciso toque ligero de ¿Sadismo? (no, no creo, no es nada enfermiso) constante en el ambiente pero que se disfruta con la forma en que se muestra es lo que se llega a percibir en ciertos momentos del libro, y es que también Neil Gaiman logró plasmar esa misma sensación. No es de extrañarse la sincronización de los universos, ya que hablamos del mismo director de "The nigthmare Before Christmas".

Les recomiendo ambas historias en cualquier orden, aunque claro soy de los que prefieren primero leer y luego ver.

EDITADO: Encontré esta copia digital del libro de libre difusión:
https://rapidshare.com/files/2322242362/Coraline%20-%20Neil%20Gaiman.pdf

viernes, 10 de junio de 2011

proyecto aquilesvania. Demo Beta 1

Hace algo de tiempo que se inició este proyecto, un juego de plataformas en el que parodiamos a Castlevania a costa de un profesor de la escuela (el sueño de todo friki :D).
Por ahora está terminado hasta un 80% (posiblemente más) del engine total del juego, por lo que ya están unos escenarios y boss (jefes) prediseñados. No subiré la demo (aun que el título diga otra cosa XD) debido a que aún está muy bizarro y sin mucha distinción, pero les dejo unas capturas de pantalla:



El personaje (por ahora simbolizado con una bolita negra) es un electrónico psicópata que viaja a transilvania para matar a Drácula, para ello va armado de un látigo hecho de resistencias, una cruz gigante, un signo de ohm, aceite incendiario y un lanzallamas.
EL juego será corto, meteré elemenetos de comedia en los diálogos y clichés.

Para probar la demostración visitar este post:
http://www.megaupload.com/?d=EESNHHMC

martes, 24 de mayo de 2011

Cómo crear vacunas manuales para la PC y discos duros (NFTS)

Siempre ocurre que en los cyber contagiamos nuestras memorias de viruz molestos que luego se internan en nuestra PC (por ejemplo recycler, autorun.inf, driver y un vergero más). Por fortuna este tipo de viruz es muy fácilmente tratables ya que por lo general se alojan en un mismo directorio siempre, que por lo general es la raíz de nuestra PC (Unidad C: o la unidad en la que se tenga el SO), así que podemos anticiparnos para que no se puedan albergar NUNCA más :D
La mecánica es muy simple, crearemos un falso archivo que se llame igual que el viruz que queremos evitar para después bloquear tal archivo para que no pueda ser eliminado ni modificado por el verdadero viruz.

->En primera iremos a la dirección en donde se alberga ese viruz al cual queremos "exiliar" de nuestra PC de por vida (Como mencioné, en más del 90% de los casos en en la raiz de nuestro Sistema operativo, la C: por ejemplo) .
->Luego crearemos una carpeta que tenga EL MISMO NOMBRE al viruz incluyendo la extensión, como recicler.bin, driver.exe, autorun.inf, cdm.bat, etc. Esto es muy importante.
->Ahora solo falta evitar que esa carpeta pueda ser eliminada por el viruz al querer instalarse, para ello necesitaremos unos comandos de Windows, así que abrimos la CMD (Comsola de Comandos MS-DOS). Para ellos apretamos la tecla de windows + R. Nos aparecerá el programa para ejecutar, escribimos CMD y le damos enter (Aparecerá una ventana negra la cual es la consola de comandos, ahora trabajaremos desde ella).
Ahora nos posicionamos (en la consola) en la dirección donde creamos la carpeta que nos servirá de vacuna, para quienes no sepan cómo hacerlo la forma más fácil es esta:
(Consideraremos que queremos colocarnos en la direccion G:\, así pues)
cd = "G:\"

Si queremos ir a otra direccion como "G:\Documents and settings" lo hacemos igual
cd = "G:\Documents and settings"
Vale, ahora solo basta escribir el siguiente comando:

echo S|cacls "nombre_de_la_carpeta.extension" /d %username%

Y LISTO!
Notaremos que funciona por que no podremos acceder a nuestra carpeta y (dependiendo de la versión de nuestro S.O.) veremos un candadito en la carpeta. Ahora nuestra carpeta sirve de vacuna para este tipo de viruz, no podrá ser renombrada ni eliminada almenos que le quitemos la protección nosotros mismos, por lo tanto no se podrá instalar un viruz que se llame igual.

Les dejo este comando para que puedan desbloquear su carpeta-vacuna:

echo S|cacls "nombre_de_la_carpeta.extension" /p %username%:f

Esto mismo funciona para los discos externos formato NTFS ;)

SALUDOS

jueves, 21 de abril de 2011

[Aplicación] Folder Locker

Un saludo
Vuelvo a escribir en mi blog para exponer un proyecto que he venido haciendo desde hace más de 2 años. Curiosamente empezó como una investigación a cerca de los viruz, el cómo se esconden y algunas formas "manuales" de eliminarlos. Mediante todo esto llegué a la idea de crear una aplicación para proteger las carpetas usando algunas de las formas que usan para proteger a los viruz :P.
Desde entonces ha tenido variedades de modificaciones y versiones, pero esta vez la aplicación es más profesional (bueno, menos lammer) que las anteriores. Implementada la interfaz gracias al Game Maker y ofreciendo seguridad por contraseñas y varias cosas más, Folder locker representa un brecho por mi vida en el "hacking".
Les invito a usar esta herramienta para proteger sus carpetas, ya debugeada y usada por algunos tester aseguro que no ofrecerá ningún problema.

Enlace de descarga:
https://docs.google.com/file/d/0B6J7PWBjtBf7cVgxNHhmVWg5WEE/edit

Algunas capturas:







Y, nada más para saciar curiosidad, aquí les dejo una captura de una versión muy antigua (y de alguna manera antecesora directa de esta versión) del folder locker, en aquel tiempo llamando carpeta converter. En estos tiempo para desbloquear se creaban "llaves" personales para cada carpeta, ahora solo es cuestión de recordar tu contraseña XD

Un saludo, nos leemos:

martes, 12 de abril de 2011

[Serie] Avatar: la leyenda de Ang

"Agua, Tierra, fuego y aire; hace varios años las 4 naciones vivían en armonía, pero todo cambió cuando la nación del fuego atacó"...
Esta es la introducción a una de las mejores series transmitidas por varias partes del mundo, se basa en una tierras míticas dividas en 4 naciones, cada una para uno de los cuatro elementos; en estas naciones y entre sus aldeas y ciudades existen personas que practican el dominio de uno de éstos elementos, tales personas son llamados maestros. Solo existe un solo ser entre toda la humanidad con la capacidad de manejar los cuatro elementos: El avatar, que mediante un ciclo de vida reencarna cada vez que muere.
La nación del fuego, manejada por la avaricia y el poder, inició una guerra devastadora; la responsabilidad de detenerla y la única esperanza para la humanidad es el Avatar, pero su última reencarnación recae sobre Ang y, este siendo jóven para aceptar la responsabilidad, escapa del templo del aire, se pierde cerca del polo sur y queda atrapado en un iceberg por 100 años. Cuando despierta encuentra un mundo diferente y arrasado por la guerra, ahora tiene la misión, junto con 2 compañeros que conoce, de manejar los 4 elementos y vencer al señor del fuego.


Vagando por internet, encontré una página para descargar las 3 temporada (los 3 libros) de esta serie de una manera accesible para casi cualquier usuario, en formato MP4 y con todos los enlaces (hasta ahora) disponibles.

http://www.gratispeliculas.org/descargar/avatar-serie-completa-espanol-latino-mp4-50-mb/

Espero disfruten la serie aquellos que no la han visto, y para quienes sí que la tengan en su colección. No es de alta definición pero eso le da accesibilidad para la descarga, además de que para el formato DVD por lo general dan enlaces rotos :(

Editado: Por ahora el enlace me funciona al 100%, pero siempre es bueno tener un respaldo para futuro, esta pagina tiene también la colección completa, el problema podría ser que es formato DVD (o sea que pesan mas de 150 MB cada capítulo :/).

http://detodounpoco-tag.blogspot.com/2008/10/avatar-la-leyenda-de-aang-descargar.html
http://www.compucalitv.com/2010/08/24/avatar-la-serie-descarga-libros-123-agua-y-tierra-espanol-latino-megaupload-serie-completa/

sábado, 2 de abril de 2011

Broma: Pantallazo azul [aplicación]

Hola a todos, hoy les vengo a dejar un programa que hice de improviso; lo que hace es simular un pantallazo azul en una computadora. El programa consiste únicamente en una imagen (de la pantalla de la muerte de windows) que se expande por todo el monitor, oculta el mouse y no acepta los comandos de alt + F4, el efecto puede llegar a ser muy convincente salvo la brevedad de que en los instantes de carga aparece una imagen en el recuadro superior izquierdo.
Esta será la imagen mostrada.

Muy realista, no?
Pues bien, para que la broma se acabe (no queremos que el usuario reinicie su PC, o si?) abrimos el administrador de tareas (ctrl + alt + supr  ó  ctrl + alt + del), buscamos el proceso "pantallazo.exe" y lo desactivamos.
https://docs.google.com/file/d/0B6J7PWBjtBf7Tm1NRU80NnZSbW8/edit
El programa viene con un ícono de un video, pero posiblemente para el siguiente post les muestre como pueden cambiar el ícono de una manera sencilla :P

SALUDOS

viernes, 1 de abril de 2011

Un rincon más

Hola
Me presento: soy knd144, una persona normal (claro, normal para quien le gusta la informática, la lectura y los retos mentales :P) . Acabo de hacerme mi rincon en la internet para poner aquí tanto proyectos como cualquier otro contenido que me apetesca.
Este blog no será para nada mi muro personal, no soy de lso que gustan darse a concocer plenamente en la Web a personas que no conosco, pero sí me gusta compartir mis gustos, aficiones y logros; iré poniendo (mas que nada) mis proyectos de programación, los programas que voy haciendo así como contenidos como videos, algunas historias (mencioné que me gusta la literatura/lectura) y poemas que me vayan saliendo.

Desde mi pais México les mando un saludo, y como telón de apertura les muestro este video-clip de una película legendaria: MIB (hombres de negro):

http://www.youtube.com/watch?v=LKFdEBA6Vx0