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:
PUSH appz3.0068EF76 ; /FileName = "DbDatos.dll"
CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; \LoadLibraryA
MOV DWORD PTR DS:[68ED96],EAX ; Mueve la Carga de la DLL al Offset 68ED96
PUSH appz3.0068EF86 ; /ProcNameOrOrdinal = "msgbox"
PUSH EAX ; |hModule
CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; \GetProcAddress
MOV DWORD PTR DS:[68ED9A],EAX ; Mueve la Caraga del Proc al Offset 68ED9A
CALL EAX
JMP appz3.[B]005828E5 [/B] ; Con este JMP Regresamos al EP!
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.