Título: Ayuda con una modificación que no funciona Publicado por: arfgh en 7 Julio 2016, 15:48 pm Hola amigos.
Estoy intentando hacer una modificación en un programa, que hace una llamada a la api 'Stretchblt', entonces antes de producirse la llamada he introducido un salto incondicional a una parte vacía al final del código para insertar allí mi asm :P Evidentemente algo estoy haciendo mal ya que cuando ejecuto el programa, este revienta, también ejecutando paso a paso con el ollydbg no me pasa de una linea. Mirad el código: Código:
Pues bien, cuando intento guardar mi contador con MOV BYTE PTR DS:[4AFA46],AL pues el ollydbg no pasa de esa linea. Evidentemente entiendo muy poco de asm, y no sé que es lo que me está faltando. ayuda y gracias. Título: Re: Ayuda con una modificación que no funciona Publicado por: MCKSys Argentina en 7 Julio 2016, 16:17 pm Hola!
Por lo que veo, 4AFA46 es el primer byte (DB 00) de tu código. Ahora, normalmente la sección de código no es escribible y tu estás en ella. Tienes 2 opciones: o haces la sección de código escribible (con CFFExplorer o la tool de tu preferencia) o bien usas una dirección que esté en la sección data (recomendable cerca del final para evitar que el programa machaque el byte), la cual, normalmente, sí es escribible pero no ejecutable. Saludos! Título: Re: Ayuda con una modificación que no funciona Publicado por: arfgh en 7 Julio 2016, 17:29 pm esa zona es al final de todo. Estás seguro de que la zona de código no se puede escribir ? entonces por qué con la api 'writeprocessmemory' si que podemos ?
El asunto es que al llegar el ollydbg a esa posición del MOV, no pasa de ahí a la siguiente instrucción... Título: Re: Ayuda con una modificación que no funciona Publicado por: tincopasan en 7 Julio 2016, 22:57 pm la pregunta es
¿porqué querés mover a [4AFA46]? qué es una dirección a la que ya apunta el programa Citar Pues bien, cuando intento guardar mi contador con MOV BYTE PTR DS:[4AFA46],AL si querés guardar Al deberías hacerlo en una dirección libre, como te indico MCKSysTítulo: Re: Ayuda con una modificación que no funciona Publicado por: arfgh en 8 Julio 2016, 00:28 am el lugar en dónde quiero guardar AL está libre.
Título: Re: Ayuda con una modificación que no funciona Publicado por: MCKSys Argentina en 8 Julio 2016, 00:47 am esa zona es al final de todo. Estás seguro de que la zona de código no se puede escribir ? entonces por qué con la api 'writeprocessmemory' si que podemos ? El asunto es que al llegar el ollydbg a esa posición del MOV, no pasa de ahí a la siguiente instrucción... Estás mezclando todo. Como te dije, tienes 2 opciones en tu caso: hacer la sección .code/.text writable o escribir en la sección .data (ésta última es la más sencilla, pues sólo debes cambiar la dirección donde quieres escribir). Por otro lado, WriteProcessMemory se usa desde otro proceso (normalmente) y no discrimina entre secciones de ejecutables, stack, heap, etc. Basta con que la memoria esté mapeada. Saludos! PD: Si hubieras completado la intro a Olly de Ricardo Narvaja no tendrías este tipo de problemas. :P Título: Re: Ayuda con una modificación que no funciona Publicado por: arfgh en 8 Julio 2016, 01:04 am ya advertí que no entiendo mucho :P
no obstante para escribir en la sección .data, tiene que haber un lugar para poder meter los bytes que necesitamos. 15 bytes es la zona más grande y vacía que he encontrado allí. No siendo que se pudiese hacer ese código más pequeño... si es que se puede agrandar alguna sección pues ya me diréis como..... Título: Re: Ayuda con una modificación que no funciona Publicado por: MCKSys Argentina en 8 Julio 2016, 04:02 am Si el código que has colocado es todo el código, entonces sólo necesitas 1 byte de la sección .data.
Toma uno del final de la sección y listo. Saludos! Título: Re: Ayuda con una modificación que no funciona Publicado por: arfgh en 8 Julio 2016, 14:59 pm Amigos la zona .idata imports también es RW y también tiene mucho espacio vacío. Sería factible usar ese espacio con seguridad ?
Es posible programáticamente hacer una sección .rdata con permisos de escritura ? o cualquier otra que no sea RW. Y también, es posible programaticamente expandir el espacio de una de las secciones y poder así meter nuestro código ? saludos Título: Re: Ayuda con una modificación que no funciona Publicado por: .:UND3R:. en 8 Julio 2016, 16:57 pm Amigos la zona .idata imports también es RW y también tiene mucho espacio vacío. Sería factible usar ese espacio con seguridad ? Es posible programáticamente hacer una sección .rdata con permisos de escritura ? o cualquier otra que no sea RW. Y también, es posible programaticamente expandir el espacio de una de las secciones y poder así meter nuestro código ? saludos si, busca por una app que se llama t0po o topo en la web de ricardo narvaja Título: Re: Ayuda con una modificación que no funciona Publicado por: 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.
Título: Re: Ayuda con una modificación que no funciona Publicado por: .:UND3R:. en 10 Julio 2016, 02:45 am 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. Título: Re: Ayuda con una modificación que no funciona Publicado por: apuromafo CLS en 11 Julio 2016, 05:28 am 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 Citar 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 |