[duda simple] Edicion de Texto

Iniciado por GaudyG, 29 Marzo 2011, 21:01 PM

0 Miembros y 1 Visitante están viendo este tema.

GaudyG

Buenas, esta ha de ser una duda simple, quisiera editar un Texto q no figura en Edicion de Recursos, lo q quiero hacer es alargar el Texto, pero tengo entendido q por editor Hexadesimal no se puede ya q tiene q ser igual el numero de caracteres o menos, tambien he intentado con el OllyDBG, pero soy un completo ignorante en ello. Como podria alargar la frase ?

Gracias

Amerikano|Cls

Si la cadena que vas a editar es una string que usa el programa la podes editar siempre y cuando no sea una cadena que se genere en memoria, o descifre (si esta cifrada), si esta predefinida desde la compilacion la podes editar y alargar el tamaño con un editor hexa simpre y cuando no hallan valores o demas cadenas contiguas a la que deseas editar, esto es porque normalmente los compiladores ponen una cosa detras de la otra y por tal motivo hay que tener en cuenta eso para poder modificarla y alargarla.

saludos




Mi blog:
http://amerikanocls.blogspot.com

tena

tambien se puede cambiar el puntero a la cadena por otra que tengas por ahi.

GaudyG

Es un String el q quier editar. El String es visual desde el Editor Hexadesimal, eso quiere decir q esta predefinida desde el compilador? Si fuera asi, deberia poder editarse

Cuando estamos hablando de puntero nos referimos al Offset? Intenté hubicar el Offset en el editor Hexadesimal, pero simplemente no la encuentro, ese es mi problema

Se q los "00" estan para delimitar String y otras tareas, pero al final del editor esta lleno de "00", esos se pueden editar para cambiar la cadena de String a leer?

tena

#4
Fijate de esta forma


GaudyG

Muchas Gracias Tena, me sirvio la imagen. Pero en un momento especifico del ejecutable q edité deja de correr establemente... aunq sigue corriendo

En mi caso me aparecen algunas variables extra, debi hacer algo mas? La imagen muestra lo q hice.



Lo habré hecho bien?

apuromafo CLS

@Tena buena imagen


creo que ya esto lo habiamos comentado alguna vez por el foro pero vuelvo a comentar  hay 2 tipos de texto en general , ascii y unicode, se escribe en los bytes y se copia (se guarda) copy all changes & save (GUARDADO Nº1)  (ejemplo los bytes "hexadecimal 00313131313100 ->ascii: 11111 " 

cuando se abre el cambiado(Nº1) , se cambia el puntero, la estructura mas comun a cambiar son los mov XXX,YYYYY
colocando en el original mov XXX, Direccion a Mov xxx,direccion_del_lugarcambiado
o bien algun push XXXXX a Push YYYY

si luego la modificacion son de estilo buffer, escribiendo en stack, esi ebp o otros,
modificaciones a estilo inline, sugieren nopear el lugar, saltar a otra zona y escribir todo lo que se quiera y devolver el flujo mediante comparaciones y esperar el momento justo



pushfd
pushad
opcional:comparaciones_de_valores
{codigo inline}
popad
popfd

debes colocar la string y copiar (guardar) y ya deberia estar listo,siempre y cuando caiga bien en el espacio,
lo mas comun es desviar el flujo  (para ayudar a evitar bugs) y solo parchando con mov byte ptr[lugar],byte_parchar     ejemplo 0075 a 0076
mov word ptr[lugar],word_parchar  ejemplo  003031 a 003132
mov dword ptr[lugar],dword_parchar  ejemplo 00313232 a 00313233


conclusion:
los cambios estan bien, pero debes guardarlos, recordar que el inicio de un string depende del inicio y final en una cierta estructura, los espacios y cambiar un lugar y guardar y seguir copiando, pues las ediciones son referenciales a espacios con permiso de lectura y escritura, si esta comprimido, pues ni modo que primero debes desempacar, pero no creo que sea el caso
pero si fuera el caso que plantea @Amerikano|Cls  deberas usar inlinem pero tambien hay que recordar que tambien en las propiedades de ciertos bOX, de los recursos aceptan un cierto largo  y ahi debe aparte del largo verse las propiedades del control/edit/form etc
si es vb , mejor abrir vbdecompiler y ver si se puede editar.(ahorraras tiempo)

saludos Apuromafo

luego

GaudyG

#7
Cita de: apuromafo en  1 Abril 2011, 20:57 PMconclusion:
los cambios estan bien, pero debes guardarlos, recordar que el inicio de un string depende del inicio y final en una cierta estructura, los espacios y cambiar un lugar y guardar y seguir copiando...
Esto se me es un poco confuso, osea q cada vez q cambie una variable en el compilador tengo q estar copiando y guardando? Pero entonces cual seria la diferencia entre eso y q al Final Copie Todos los Cambios y lo guarde?

He tomado en cuenta el inicio del Offset, pero hay q tomar en cuenta el Final Tambien? Tenia entendido q el inicio y final de la String Nueva deberian haber "00" y q en el primer caracter de la String habia q tomar encuenta de la Offset, pero.. ¿y q hay q tomar en cuenta del Final de la String?

Lamentablemente esta compilada con Visual C++

apuromafo CLS

#8
algun dia encontraras con cadenas con variables de wsprint , o variables dependientes de eax, ebx o otras solo te doy la idea y no la pierdas, si no, guarda este texto y guardalo para cuando pases 2 años y verifica denuevo ,
con respecto a las string nota que cuando guardas todos los cambios y si guardaste justo una api, deberas reparar la importacion, porque el cambio sera valido solo en tu maquina

ejemplo
inyeccion de variables de entorno en armadillo, comparaciones en stack en asprotect , comparaciones de hiw en themida etc,



o mejor aun en lenguaje.net, deberas cambiar de herramientas como cff o guiarte con otras ideas.


es bueno que este en c++ porque convencionalmente no usar muchos unicode, que suelen ser
para ejemplo el numero 20  no ascii:00323000   sino asi "0032003000"
en forma hexadecimal

o mas divertido, si tu programa es autocripter, usa xor y va descifrando en bloques, al copiar todo, volvera a descifrar el bloque, si esta mal los registros, crasheara!
por eso siempre es bueno practicar a lo que se tiene
ejemplo un buffer de un archivo, puntero de string, y no generalizar tanto porque al final no funciona y denuevo tener que buscar que esta el error.

tengo guardado algunas historias que justo parcharon y no se dieron cuenta que no corria, y ya tenian hecho decenas de cambios,
yo he hecho eso cuando intento desvirtualizar codigos muy ofuscados, aveces no corren porque esta mal, sobre todo en los "stolen oep"

bueno, no comento mucho para no asustarte, realmente es para que no tengas ningun error, ya se llevan años.

saludos Apuromafo

GaudyG

estuve unos 3 dias intentando hacer esto y Cuando leí tu post, ya estaba q me retiraba porq si se necesitaba años para aprender hacerlo sin errores... y nada mas queria cambiar un String Pre-Definido, asiq quice dar mi ultimo intento

Al final me funcionó, cuando cargaba el EXE editado en OllyDBG, no aparecia los cambios que habia realizado en la ventana Hex Dump, pero si estaban las nuevas referencias para cargarlas, ahí me fije q quizas al momento de copiar, no se copiaba todo. Eso me hizo creer q algo hacia mal, el problema es q no sabia q cosa.

Al final hice lo mismo, pero los nuevos Strings los escribí en la ventana del Compilador, los referencie y me funcionó, con ello estoy satisfecho.


Una ultima duda:
Para matar la duda... cuando ya terminaba de hacer los cambios, en la ventana del Compilador hacia click derecho > Copiar a Ejecutable > Todas las Modificaciones, y luego le daba Save. Pero no se guardaba nada en los cambios q hacia en la ventana Hex... En la forma q guardo, hay algo q hago mal?