Como modificar String no Unicode

Iniciado por ClubIce, 16 Marzo 2010, 02:51 AM

0 Miembros y 3 Visitantes están viendo este tema.

ClubIce

Hola comunidad,

Estoy traducciendo una Aplicacion, y sucede que algunas de las Strings del EXE no estan en formato Unicode, por lo cual El ResHacker ni El XN Resource Editor me las detexta (Soy principiante). entonces alguien conoce algun metodo para editarlas podiendo insertar mas bytes, es que si lo hago con un editor hexadecimal, no me permitiriaañadir mas bytes porque me daña la apliccion :(

MCKSys Argentina

Quizás deberías pensar que si no están en UNICODE, es porque no fueron pensadas para ser traducidas...  :P
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


bizco

tampoco desanimes al chaval ;), mueve las cadenas de sitio y punto. una cadena tiene una direccion fija, pues tu buscas un espacio para escribir pones ahi lo que necesites y cambias la direccion por la nueva.

ClubIce

Cita de: MCKSys Argentina en 16 Marzo 2010, 03:29 AM
Quizás deberías pensar que si no están en UNICODE, es porque no fueron pensadas para ser traducidas...  :P

Pues si deben ser traducidad porque forman parte de la interface del programa.

Cita de: ctlon en 16 Marzo 2010, 03:39 AM
tampoco desanimes al chaval ;), mueve las cadenas de sitio y punto. una cadena tiene una direccion fija, pues tu buscas un espacio para escribir pones ahi lo que necesites y cambias la direccion por la nueva.

Bueno, si no es mucha mestia, me podrias explicar como se hace eso ????

MCKSys Argentina

Si están en la sección de recursos, las puedes editar con un editor de recursos.

Si no están ahi, es porque están en la sección de datos. Para editarlas, puedes usar un editor hexa y listo. El tema es que, quizás, no estén en UNICODE, sino en ANSI (lo cual facilita la tarea ;))

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


LSL

Citar
CitarCita de: ctlon en Ayer a las 03:39
tampoco desanimes al chaval , mueve las cadenas de sitio y punto. una cadena tiene una direccion fija, pues tu buscas un espacio para escribir pones ahi lo que necesites y cambias la direccion por la nueva.


Bueno, si no es mucha mestia, me podrias explicar como se hace eso ????
eso se hace para crackear y aparentar estar registrado, etc, es decir para poca cosa, pero para traducir todo un programa es un trabajo de monos, que quizas no valga la pena, seguro que para cuando termines ya han sacado una versión mejor del programa.
Pero te digo mas o menos como se hace con el ollydbg, con el menu desplegable search for all referenced text strings, buscas las cadenas de texto,  te fijas en la direccion de memoria donde se encuentra, tambien te fijas en la direccion de memoria donde el programa hace la llamada a la direccion donde esta el texto original, entonces buscas un sitio libre dentro del codigo, donde escribir la nueva cadena traducida, anotas en la direcion offset que empieza, y en el lugar donde se llama a la cadena original le cambias la direcion indicando la de donde se encuentra la nueva cadena, asi llamara siempre a la nueva cadena en vez de la vieja.

Esto a veces tiene un problema añadido, que es que en un programa compilado eficientemente, existen pocos lugares vacios donde escribir muchas cadenas largas. Aunque tambien se pueden hacer injertos de nuevas secciones, pero ya todo esto no es tan facil como con los editores de recursos (mejor es simplificar el texto original para no salirte del espacio original).

Tambien hay veces que con los editores de recursos te dejan insertar nuevos controles de texto dentro de los formularios, para escribir el texto que te falte en la traducción.
Saludos.

LSL.

ClubIce

Cita de: LSL en 17 Marzo 2010, 01:01 AM
Citar
CitarCita de: ctlon en Ayer a las 03:39
tampoco desanimes al chaval , mueve las cadenas de sitio y punto. una cadena tiene una direccion fija, pues tu buscas un espacio para escribir pones ahi lo que necesites y cambias la direccion por la nueva.


Bueno, si no es mucha mestia, me podrias explicar como se hace eso ????
eso se hace para crackear y aparentar estar registrado, etc, es decir para poca cosa, pero para traducir todo un programa es un trabajo de monos, que quizas no valga la pena, seguro que para cuando termines ya han sacado una versión mejor del programa.
Pero te digo mas o menos como se hace con el ollydbg, con el menu desplegable search for all referenced text strings, buscas las cadenas de texto,  te fijas en la direccion de memoria donde se encuentra, tambien te fijas en la direccion de memoria donde el programa hace la llamada a la direccion donde esta el texto original, entonces buscas un sitio libre dentro del codigo, donde escribir la nueva cadena traducida, anotas en la direcion offset que empieza, y en el lugar donde se llama a la cadena original le cambias la direcion indicando la de donde se encuentra la nueva cadena, asi llamara siempre a la nueva cadena en vez de la vieja.

Esto a veces tiene un problema añadido, que es que en un programa compilado eficientemente, existen pocos lugares vacios donde escribir muchas cadenas largas. Aunque tambien se pueden hacer injertos de nuevas secciones, pero ya todo esto no es tan facil como con los editores de recursos (mejor es simplificar el texto original para no salirte del espacio original).

Tambien hay veces que con los editores de recursos te dejan insertar nuevos controles de texto dentro de los formularios, para escribir el texto que te falte en la traducción.


lo que estoy traduciendo e sun Juego, y las Strings que te estoy hablando son como variables. haber si nos entendemos mejor.

bizco

LSL has dicho exactamente lo mismo que le digo yo no se pq dices:

Citareso se hace para crackear y aparentar estar registrado, etc, es decir para poca cosa

no se de donde entiendes en lo que puse eso.

ClubIce probaste lo que ya te dije?.

push 123456  ; 123456 apunta a una cadena, pero tu necesitas mas bytes.

Buscas un sitio donde escribir tu nueva cadena y modificas el push 123456 por push nueva direccion.

LSL

ctlon, lo que puse, quiero que entiendas que no es para contradecirte, ni lo saco del contexto de tus palabras, y quizás no me expliqué bien o suficientemente para que me entiendan.

cuando le digo al compi que pide ayuda de cómo se hace lo que tu le indicas, le digo "eso se hace para crackear y aparentar estar registrado, etc., es decir para poca cosa", con ello quiero decirle, que: el cambiar las direcciones de sitio, se puede hacer para cambiar las instrucciones a ejecutar en el programa (crackear) y para cambiar texto cuando queremos aparentar estar registrado, y con lo de (para poca cosa) quiero decir que yo lo hago solo para poco texto (imaginate que tenga que cambiar la dirección de unos cuantos megabytes de lineas de texto, porque seguro que mientras mas cosas cambiemos mas probabilidades de que luego el programa no funcione como es debido, y sobre todo al carecer de suficientes espacios vacios, experiencia y conocimientos para modificar el tamaño de las secciones.

Pero si para el compi es su gusto hacerlo, y no es mucho lo que tiene que modificar, (el es quien tiene que valorar si es mucho o poco) a continuación más o menos le explicaba como se hace para localizar el presunto texto, y tomar nota de las direcciones de llamada, ampliándole un poco más a mi manera el proceso que le apuntabas en tu post.
Saludos.

LSL.

bizco

ok perdona entonces, entendi mal  :-*.