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
nop
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