Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: GaudyG en 29 Marzo 2011, 21:01 pm



Título: [duda simple] Edicion de Texto
Publicado por: GaudyG en 29 Marzo 2011, 21:01 pm
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


Título: Re: [duda simple] Edicion de Texto
Publicado por: Amerikano|Cls en 30 Marzo 2011, 17:35 pm
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


Título: Re: [duda simple] Edicion de Texto
Publicado por: tena en 30 Marzo 2011, 18:47 pm
tambien se puede cambiar el puntero a la cadena por otra que tengas por ahi.


Título: Re: [duda simple] Edicion de Texto
Publicado por: GaudyG en 31 Marzo 2011, 14:09 pm
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?


Título: Re: [duda simple] Edicion de Texto
Publicado por: tena en 31 Marzo 2011, 18:58 pm
Fijate de esta forma

(http://img850.imageshack.us/img850/4250/pasos.jpg)


Título: Re: [duda simple] Edicion de Texto
Publicado por: GaudyG en 31 Marzo 2011, 21:55 pm
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.

(http://img685.imageshack.us/img685/3213/dibujofpd.png)

Lo habré hecho bien?


Título: Re: [duda simple] Edicion de Texto
Publicado por: apuromafo CLS en 1 Abril 2011, 20:57 pm
@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

Código:

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


Título: Re: [duda simple] Edicion de Texto
Publicado por: GaudyG en 2 Abril 2011, 01:46 am
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...
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++


Título: Re: [duda simple] Edicion de Texto
Publicado por: apuromafo CLS en 2 Abril 2011, 02:28 am
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


Título: Re: [duda simple] Edicion de Texto
Publicado por: GaudyG en 2 Abril 2011, 14:03 pm
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?


Título: Re: [duda simple] Edicion de Texto
Publicado por: apuromafo CLS en 2 Abril 2011, 17:46 pm
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?

yo creo que no, por lo mismo aveces cuando no toma en un lugar, se le hace
mov Direccion, byte como bien te comentaba, al estilo inline , o bien debes agregar los permisos con virtualprotect y luego escribir, y devolver el permiso de la sección ;)

si quieres hacerlo mas simple aun, copias los bytes a cambiar en una lista ordenada de cada byte y los agregas en un parchador, el parchador se encargara de hacer el resto

saludos Apuromafo