Ayuda con una modificación que no funciona

Iniciado por arfgh, 7 Julio 2016, 15:48 PM

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

arfgh

hombre, herramientas ya me imagino que habrá, el mismo ollydbg te deja escribir en esas partes, pero me refiero .... programaticamente, o sea, desde nuestro propio programa.

.:UND3R:.

Cita de: arfgh en  8 Julio 2016, 19:35 PM
hombre, herramientas ya me imagino que habrá, el mismo ollydbg te deja escribir en esas partes, pero me refiero .... programaticamente, o sea, desde nuestro propio programa.

Mujer, para que quieres hacer "programaticamente"? (no sé a que te refieres con eso), Si no puedes hacer una pequeña modificación de un salto condicional, dudo que puedas programar internamente un editor de secciones (si es que a eso te refieres a programaticamente). Mejor usa una tools no te compliques la vida.

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

apuromafo CLS

leo con tranquilidad que quieres insertar un pequeño injerto

hay ciertos detalles a considerar cuando cambias un byte

1)el programa está empacado?, esto influye porque el lugar donde escribes puede que esté está protegido contra escritura, aunque de comienzo tenga permisos de escritura o bien que tenga verificacion de crc.

2) el programa si no está desempacado la sección que está influye bastante
ya que si no tiene permiso para escribir en el lugar hará una excepción,que hará que no funcione

3) digamos que usas topo
herramienta disponible en http://ricardonarvaja.info/WEB/OTROS/HERRAMIENTAS/Q-R-S-T-U/topo12corregido.rar


indicado en la parte anterior, determinas no se 100 o 200 bytes de espacio libre o el tamaño que quieras ,tu código será algo asi


Citarnop
nop
nop
NOp por cantidad de bytes ...
JMP entrypoint



lo ideal que hagas es que coloques en este  entrypoint lleno de nops algo asi


pushad ;guarda los registros
injerto a realizar (cambiar una direccion, redireccionar o lo que quieras)
// cambiar una direccion
ejemplo mov ptr ds:[direccion del salto],90909090 ;nopeando el lugar de destino
mov ptr ds:[direccion del salto+4],bytes  ;siguiendo la escritura de los bytes
mov ptr ds:[direccion del salto],bytes del salto a direccion del destino

la idea de los bytes es para parches a luego del salto del oep
donde antes decia jmp lugar/jne/je, ahora dirá jmp direccion2

popad ;restaura los registros
jmp entrypoint ;aqui empezara el programa....
una vez que acceda al lugar parchado irá a direccion 2 donde devolverás el flujo

direccion2:

aqui codigo que antes era nop, ahora le colocas lo que quieres hacer o cambiar etc
cmp eax,0
je siguiente
mov eax,1
siguiente:
jmp lugar retorno

una idea de injerto cualquiera es definir el espacio donde estamos

osea

entrypoint (con nops)
COdigo que cambia algunas instrucciones hacia el codecave , luego
ejemplo cambio incondicional al lugar de destino (despues de la redireccion del oep)

salto al oep (original entrypoint)
codigo del injerto donde restauras o sigues el flujo normal, parchas donde quieres
y saltas al retorno del programa tal cual como siempre



esto de usar un injerto que no altere las apis, se puede hacer sin lio cuando conoces bien el ejecutable, pero cuando ya requieres apis, debes tener cuidado de agregar a la sección iat las nuevas apis, y de cuadrar bien la sección para que sean compatibles con otros sistemas operativos...

bueno eso


la sugerencia es que si aún no encuentras bien el espacio o como administrarlo, lo ideal es que leas bien el faq y termines los escritos de ricardo narvaja

quizas de primera es complicado, pero con el tiempo comienzas a darte cuenta que no es algo complicado

Saludos Apuromafo