• Viernes 19 de Abril de 2024, 07:01

Autor Tema:  Consulta - Permiso De Escritura En Offset  (Leído 1620 veces)

L3andro

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Consulta - Permiso De Escritura En Offset
« en: Domingo 2 de Septiembre de 2007, 06:07 »
0
Bueno tengo un problema con una aplicacion, el cual la verdad no estoy muy seguro como solucionar, y consta en que al ejecutarla esta se cierra automaticamente, al cargarla con un Debuguer como el Olly o WinDBG, y Ejecutarla desde el mismo, puedo ver que el problema se produce en las siguiente linea:

Código: Text
  1.  
  2. MOV DWORD PTR DS:[68ED96],EAX                      &#59;  Mueve la Carga de la DLL al Offset 68ED96
  3.  
  4.  

 como referencia pongo tambien el codigo completo sobre lo afectado:

Código: Text
  1.  
  2. PUSH appz3.0068EF76                             &#59; /FileName = "DbDatos.dll"
  3. CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]       &#59; \LoadLibraryA
  4. MOV DWORD PTR DS:[68ED96],EAX                      &#59;  Mueve la Carga de la DLL al Offset 68ED96
  5. PUSH appz3.0068EF86                             &#59; /ProcNameOrOrdinal = "msgbox"
  6. PUSH EAX                                           &#59; |hModule
  7. CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>]     &#59; \GetProcAddress
  8. MOV DWORD PTR DS:[68ED9A],EAX                      &#59;  Mueve la Caraga del Proc al Offset 68ED9A
  9. CALL EAX
  10. JMP appz3.005828E5                              &#59;  Con este JMP Regresamos al EP!
  11.  
  12.  

 Bueno ahi carga una dll en primer instancia, y luego con el "MOV EAX, DWORD PTR DS:[68ED9A]" la mueve a otra direccion para ser usada o almenos eso me parece a mi, y es justo alli donde se produce el error, El Offset a donde quiere moverla no tiene permiso de escritura por lo cual se produce una falla por que el offset 68ED9A no tiene permiso de escritura, y seguramente al reparar ese tambien deba hacerlo con el offset a donde se mueve para ser usado el msgbox (El Proc); mi pregunta seria, como puedo hacer que esos offset sean tengan permiso de escritura, supongo que deberia usar algun editor PE para conseguirlo, pero podrian explicarme cual es el camino y forma indicada de lograrlo? desde ya estoy muy agradecido.

chauchas :hola:
Single I Want To learn as much that Likes
Studying ASM, You can Help Me?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Consulta - Permiso De Escritura En Offset
« Respuesta #1 en: Domingo 2 de Septiembre de 2007, 09:02 »
0
No es lo logico tener que modificar el PE a mano para solucionar este problema ... ¿De donde salio ese codigo y que pretende hacer?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

L3andro

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Consulta - Permiso De Escritura En Offset
« Respuesta #2 en: Lunes 3 de Septiembre de 2007, 17:29 »
0
Cita de: "Eternal Idol"
No es lo logico tener que modificar el PE a mano para solucionar este problema ... ¿De donde salio ese codigo y que pretende hacer?
 Hola Eternal Idol, bueno el codigo ese lo que hace es cargar una DLL con su respectivo Proc (DLL = DbDatos.dll - Proc de la DLL = msgbox), la aplicacion tiene una DLL Hookeada, ya que el EP de la aplicacion es el inicio de la carga de la dll y no el EP Real (en PUSH EBP) por lo cual la deduccion lo primero que hace la aplicacion es cargar la DLL y su Proc en el .exe al terminar la carga de la DLL y Proc los mueve a a otras direcciones de memoria para ser utilizados, el problema se halla en esa parte los offset a donde los mueve no pueden ser escritos por no tener permiso. Hacer que la aplicacion en cuestion pueda ser ejecutada sin ningun problema es en teoria y practica bastante sencillo ya que lo unico que deberia hacer es cambiar el Entry Point por el original y saltear el codigo en cuestion (Problematico) eso seria sencillo si presto atencion al codigo:

Código: Text
  1.  
  2. PUSH appz3.0068EF76                            &#59; /FileName = "DbDatos.dll"
  3. CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]      &#59; \LoadLibraryA
  4. MOV DWORD PTR DS:[68ED96],EAX                     &#59;  Mueve la Carga de la DLL al Offset 68ED96
  5. PUSH appz3.0068EF86                            &#59; /ProcNameOrOrdinal = "msgbox"
  6. PUSH EAX                                          &#59; |hModule
  7. CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>]    &#59; \GetProcAddress
  8. MOV DWORD PTR DS:[68ED9A],EAX                     &#59;  Mueve la Caraga del Proc al Offset 68ED9A
  9. CALL EAX
  10. JMP appz3.[B]005828E5 [/B]                            &#59;  Con este JMP Regresamos al EP!
  11.  
  12.  

 En ese codigo se ve que al terminar la carga de la DLL y Proc este mismo vuelve al EP original con la siguiente linea:
JMP appz3.005828E5                             ;  Con este JMP Regresamos al EP!
 Por lo cual de querer solucionar la carga de la Aplicacion podria cambiar el EP actual por ->005828E5 el tema es que de hacer eso y saltear el codigo en cuestion si bien la aplicacion funcionaria sin problemas (Lo he probado) la misma careceria de las funciones agregadas por la DLL, por eso mismo quisiera saber como convertir dichos Offset en Modo Write.

 Coincido plenamente con vos en que no es logico tener que modificar el PE a mano en este tipo de casos ya que la aplicacion deberia funcionar de por si, la aplicacion en cuestion es Free y OpenSource el problema se basa en quien halla agregado la DLL con funciones en cuestion ovbiamente no lo hiso desde el Source si no que por hooking ya que es ovbio al ver el codigo de la misma, el problema se basa en que la pagina web oficial del producto, en donde podian descargarse el Source y Aplicacion estan caidas desde aproximadamente 1 mes, por lo cual por otros lados han continuado el desarrollo, y hoy en dia me es un tanto complicado conseguir el source ya que el mismo asi como aplicacion pertenecian a un portal de desarrollo de China  :(  

 En fin, se que no es la mejor forma ni el mejor camino para solucionar el problema que tengo, pero si es la unica via disponible de la cual dispongo hoy en dia. Verdaderamente si bien comprendo sobre ASM (lo basico ya que estoy estudiando con e-books & e-learning) y tras varios intentos de conseguir el objetivo, me encuentro blockeado con esto tras ya varios intentos frustrados.

 Bueno Eternal Idol, espero puedas darme una mano orientandome con eso, se que probablemente no te paresca lo mejor, y creeme que para mi tampoco es el mejor camino pero me parece contrsuctivo no solo desde el punto de vista de que solucionaria mi problema, si no que tambien desde el lado de poder entender algo mas de todo esto.

Gracias nuevamente por tu tiempo y cualquier ayuda que puedas brindarme.
Single I Want To learn as much that Likes
Studying ASM, You can Help Me?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Consulta - Permiso De Escritura En Offset
« Respuesta #3 en: Lunes 3 de Septiembre de 2007, 19:25 »
0
¿Otra vez con los trucos para juegos?

Sinceramente diste muchas vueltas y poca informacion tangible, sino queres subir el ejecutable copia lo que devuelve el WinDbg usando lm, !dh sobre los modulos en cuestion y u sobre el entry point.

¿Funciona en algun lado el programa? Repito: No es lo logico tener que modificar el PE a mano para solucionar este problema. Y si realmente el problema es que una seccion del PE esta en read-only lo que no funciona es el "hook" ese, pero NUNCA funciono, cosa que puede ser ya que entre la direccion con el nombre de la DLL y la otra hay muy poca distancia ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.