lunes, 25 de abril de 2016



Primera parte - la fuerza bruta

Etapa preparatoria - nuestro primer intento donde tratamos de atacar a fuerza bruta un escenario.

NV hacking: Este es un tema muy interesante y amplio, sobretodo por esos rompecabezas que a veces hacen trabajar mucho a nuestro cerebro :) Trataré de mostrarte las bases de la Ingeniería Inversa y  el hacking en general en este capítulo.

El intérprete de script de prueba está aquí. Descárgalo ahora pero trata de no mirar el código fuente todavía :)

Lo que necesitamos ahora es un editor hexadecimal. Si no tienes ninguno te sugiero el 010 editor (la versión trial vale por ahora) - hace tiempo usaba WinHex pero es pésimo cuando trabaja en la configuración japonesa - casi se hacía inservible. Probé esta herramienta y resultó ser bastante buena.

Así que, comencemos.

¿Ves runme.dat en el directorio de Scenario Runner? Eso es un "escenario" que funciona. Abre el EXE. El escenario es simple, así como el propio intérprete - genera una cadena, después te hace una pregunta y dependiendo de tu respuesta volverá a hacer la misma pregunta o emitirá un mensaje y saldrá.

Tu trabajo consiste en cambiar las cadenas que muestra - eso es lo que hacemos cuando tenemos que traducir un juego, por ejemplo.

Para comenzar usaremos la fuerza bruta: Abre runme.dat en un editor hexadecimal. Puedes ver claramente algunas cadenas como "Make me laugh!" y otras. ¿Qué tal si cambiamos una de ellas?

Edita la primera cadena  - Yo puse "Do not cry..." - en este caso tenemos una "!" extra a la izquierda de la anterior cadena - bórrala. El archivo tendrá 1 byte menos.

Cuando editas con un editor hexadecimal hay dos áreas donde puedes hacerlo - a la izquierda debes introducir valores hexadecimales (0-9, a-f) mientras que a la derecha puedes introducir letras y otros símbolos normalmente. Dado que necesitamos introducir una cadena "humana" es más conveniente que lo hagamos en el lado derecho.
De todos modos, puedes alternar entre los dos lados  pulsando Tab.
También, fíjate en que hay dos maneras - sobrescribir e insertar. Puedes cambiar de uno a otro como sueles hacerlo en los editores de texto normales - pulsando la tecla Insert.


Abre el exe. Oh oh,  tenemos una excepción y también vemos que han salido algunos "☺" - aunque es importante ser positivo no es exactamente lo que esperábamos ver :)

Probablemente olvidamos actualizar algo, por ejemplo, la longitud de una cadena.  Naturalmente, la aplicación debe saber cuan larga es la cadena. ¿Cómo podrá saberlo?

Recordemos algo sobre dos tipos generales de cadenas - Estilo-C y estilo-Pascal. Como sabrás, el estilo-C no tiene ningún campo de longitud, la longitud es determinada en tiempo de ejecución mediante la búsqueda de un caracter con código #0: 32 33 34 00. El estilo-Pascal no utiliza caracteres nulos, más bien incluye la longitud de la cadena antes de la cadena actual, lo que hace que  la cadena sea procesada más rápido (a costa de tener un campo de longitud adicional, pero es un coste muy bajo) :
03 00 32 33 34. Normalmente, este campo es de 2 (palabra) o de 4(doble palabra) bytes de longitud.

Necesitamos mirar todo para encontrar dónde está el problema. ¿Puedes hacerlo por ti mismo? :)

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

Esto es lo que tenemos : 0E 00 44 6F 20 6E 6F 74 20 63 72 79 2E 2E 2E.

Esos bytes 0E 00 parecen ser la longitud de la cadena, ¿verdad? Tenemos que hacer una rápida conversión para comprobar esta suposición: presiona F11 (Tools | Converter Base) e introduce 0E en el campo hex - es 14 en notación decimal. Normalmente, también puedes hacer esto mediante el establecimiento de un puntero antes de 0E y mirándolo con el Inspector bajo Unsigned Short.
Si estás usando un editor hexadecimal diferente u otra cosa que te impida usar una herramienta de conversión de notación de escritorio, puedes usar una base de conversión online como esta en i-tools.org.

Una rápida introducción sobre cómo los números se almacenan en la memoria y otros lugares.
Algo que me pareció confuso sobre ellos al principio es que están almacenados en orden contrario, ejemplo, si tenemos un número de 2 bytes y es 255 aparecerá como FF 00 en la representación de máquina, no como 00FF como escribimos. De hecho, esto es llamado little-endian u orden de bytes Intel y también hay un orden de bytes big-endian, que se mostrará como nuestra notación normal, es decir, como 00 FF.
De todos modos, el orden de bytes Intel es el más ampliamente utilizado (un sitio que conozco  que usa  big-endian son las transmisiones de red de área).

Por cierto, antes de hacer nada  con tu proyecto asegúrate de respaldar los archivos originales por si acaso los estropeas demasiado - siempre es un buen hábito que adquirir.

Actualiza la longitud y ejecuta el script. ¡Wow, es genial, tenemos un script funcional! ¡Hurra!
...Bueno, no exactamente después de investigar un poco - el script funciona correctamente cuando se escoge la segunda opción - si no es así, se crasheará. Dice que el bytecode está corrupto...

Ahora te dejo que explores el script con el editor hexadecimal por ti mismo para que intentes encontrar donde está el problema. Cuando hayas usado todas tus deducciones, pasa a la parte más fascinante - ¡la depuración o debugging! :D

miércoles, 23 de marzo de 2016

Pronto estaré de vuelta

Bueno, han pasado casi tres años desde la última entrada que hice en este blog. Por motivos de estudios, personales y demás lo he ido aparcando, pero más que nada, ha sido por desgana en general de seguir con ninguno de mis proyectos de traducción. Ahora que más o menos estoy motivada, regresaré pronto con cositas traducidas de la guía aquella que comentaba en mi otra entrada, por si a alguien le pueden servir de ayuda.
Sin más que decir, me despido ya hasta la próxima entrada :)

jueves, 2 de mayo de 2013

Después de más de un mes de parón con la tradu y eso, tengo que decir que tardará aún un poco más, hasta junio sigo liada con los exámenes. De todos modos informar también de que encontré un tutorial muy completo para aprender a traducir novelas visuales, pero está en inglés. He comenzado a traducirlo porque me consume mucho menos tiempo que estar jugando a Clannad para buscar los textos en inglés. Mandé un link al chico que lo escribió y me ha dado su visto bueno para publicarlo aquí, así que cuando esté lo iré publicando por si alguien se anima a intentar sacar algún proyecto de traducción, que la verdad es que no veo a mucha gente metida en esto por desgracia:S
Dejo un link al tutorial original (en inglés), por si alguien le quiere echar un vistazo.

http://proger.i-forge.net/Stage_Once_-_a_Visual_Novel_hacking_tutorial/IPD

domingo, 3 de marzo de 2013

Disculpas

Debido a que empiezan los exámenes la semana que viene tengo que hacer un parón en la traducción del Mundo Ilusorio de Clannad, ya que para poder seguir con la historia tengo que ver el resto de las rutas y no dispongo de tiempo. Después de los exámenes espero estar de nuevo traduciendo a buen ritmo :)

Clannad (Mundo ilusorio: parte 8)



De nuevo, dimos una vuelta, recogiendo chatarra del suelo.
... No deberíamos ir demasiado lejos.
La chica me detuvo después de que me alejase un poco.
La miré, haciendo una señal para preguntar por qué.
... Puede que no seamos capaces de volver.
Me giré de nuevo, y miré a lo lejos.
El campo interminable.
Sin embargo, había estado hipnotizado, acostumbrado a buscar chatarra.
Y me di cuenta de que estaba solo cuando crucé la colina.
Confundido, subí la cuesta, pero no vi su figura en absoluto.
A pesar de que iba y venía por todas partes, mi estatura no daba una buena visión.
Incapaz de gritar, todo lo que podía hacer era andar.
Ni siquiera estaba seguro de en qué dirección estaba la casa.
¿Me estaba alejando o acercándome?
Tropecé y caí por la colina.
Estaba mirando hacia arriba mientras caía.
Las nubes se extendían ante mí.
Emitían una forma misteriosa.
Eran nubes que no conocía.
Ella lo había dicho antes, que no eran nubes.
Este era un lugar que estaba muy lejos...
Sucumbí al miedo.
... Puede que no seamos capaces de volver.
Recordé sus palabras.
Había muchas cosas que aún no conocía acerca de este mundo.
Quizá si pienso sobre ello, el campo no continúe para siempre.
Tal vez termine en alguna parte.
Aunque me fijase de meta un bosque lejano y consiguiese llegar a él, podría no ser aquel que estaba buscando.
La chatarra estaba esparcida, a mi alrededor.
Si ella estuviese cerca, con mucho gusto cogería mi mano.
Pero en este momento, estoy en la parte más aterradora de este mundo, y ella no está cerca.
Tengo que levantarme. No hay otra cosa que pueda hacer.
Dónde está este lugar...
Me pregunto si ella estará en una situación similar.
Algo así sería motivo de preocupación.
Debería regresar.
Cayendo, miré hacia la colina.
A contraluz, había una pequeña sombra.
Había algo mirándome desde la cima de la montaña.
Un animal.
Así que están aquí también.
Era pequeño, como si acabase de haber nacido.
Pensé algo extraño sobre ello.
¿El animal me está mirando?
Estos animales no deberían tener ninguna conciencia.
Sólo existen para roer la hierba sin pensar.
Sin embargo, ese me está mirando.
Como si tuviese voluntad propia.
Lentamente subí la colina.
La pequeña sombra no huyó.
El animal, que apenas superaba la altura de mis piernas se giró bruscamente y comenzó a correr cuando me puse a su lado.
¿Me estaba esperando?
Poco a poco, lo seguí como si recordase algo.
Seguí al animal por incontables colinas.
Y justo delante, la chica estaba sujetando otro animal, esperando.
Mientras lucho por subir allí, la chica da las gracias, y deja al animal.
Los dos animales, como si estuviesen casados, suben de nuevo la colina.
Hay otro en la cima de la colina.
Los tres corren en una línea, como una familia.
Por increíble que fuese, los vi de aquella manera.
... ¿Estabas asustado?
Ella pone su mano en mi cabeza.
Asiento.
...Yo también.
De todos modos, estoy muy contenta.
...Creo que deberíamos darles las gracias, ¿no?
Asiento.
Así que había algo como esto.
...Es extraño, ¿no?
Claro que sí.
...Tenían un olor agradable.
Ella dijo eso,  mientras vi su amable rostro de perfil.