Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: otroWeyMas.nasm en 23 Enero 2022, 04:09 am



Título: ¿Me pueden explicar unas dudas sobre ReadProcessMemory?
Publicado por: otroWeyMas.nasm en 23 Enero 2022, 04:09 am
Hola

Estoy haciendo una herramienta para reverse, bueno... un intento de reverse jeje, y leyendo en MSDN encontré que hay funciones que sirven para debugger.

Estoy usando "VirtualQueryEx" y "ReadProcessMemory", pero tengo 3 preguntas, espero me puedan explicar algunos detalles.

Muestro parte del código donde necesito ayuda.

Código:
while(iniAddr < (unsigned char*)sInfo.lpMaximumApplicationAddress){

if(VirtualQueryEx(procPath, iniAddr, &mbI, sizeof(mbI)) != 0){

ddump = (PBYTE)malloc(mbI.RegionSize);

if(mbI.Protect == PAGE_READWRITE && mbI.State == MEM_COMMIT){

ReadProcessMemory(procPath, mbI.BaseAddress, ddump, mbI.RegionSize, &ridbyts);

for(int b = 0; b < ridbyts; b++){

printf("%c", ddump[b]);
}

}

}

Cuando dejo solo while, no tarda nada en terminar la ejecución, ahorita entenderán porque lo menciono.

Al parecer el código funciona bien, me tarde en lograrlo, pero creo funciona, bien, si encuentran algo mal, espero puedan corregirme.

Primera pregunta.

¿ReadProcessMemory, esta bien formulado?, porque buscando información, encontré diferentes maneras de usarlo, por ejemplo, yo utilicé BaseAddress, pero he visto quien a utilizado el buffer de VirtualQueryEx que sería iniAddr.

Segunda pregunta.

En el For, yo utilicé ridbyts, que es readbytes de "ReadProcessMemory", pero he visto que otros utilizan RegionSize, que sería mbI.RegionSize... pero cual sería el indicado, ¿readbytes o RegionSize?.

Tercera pregunta.

Relacionado a la segunda pregunta, con cualquiera de los dos (readbytes o RegionSize), no parece tener fin cuando empieza a mostrar el dumpeo del proceso, al principio no sabía si funcionaba, utilice block de notas, pero lo que había escrito no lo encontré, solo me apareció "Edito de texto", y otras cosas como nombre del archivo y path, etc,.. pero después utilice notepad++ y me salio lo que había escrito en notepad junto con otra pestañas que tenía abierta, lo que significa que funciona el código.

Pero repito, no tiene fin. ¿Creen que lo que hace readprocessmemory es darme tooooodo lo que hay en memoria, o me esta dando toooodo lo que el proceso utiliza en memoria, o el For es tan grande que no solo estoy leyendo el proceso, sino que ademas estoy leyendo cosas que no tienen nada que ver?, o es normal.

Los ejemplos que encuentro casi son parecidos, todo te piden que les especifiques una dirección o en el bloc de notas una frase y cuando el código encuentra la frase se detiene y te dice la dirección en hexadecimal. Y es interesante, pero yo no quiero especificar algo, bueno talvez después, pero ahorita que todavía estoy tratando de entender, quiero ver como debe funcionar consiguiendo el analisis completo.

Espero me puedan ayudar con esas dudas.


Título: Re: ¿Me pueden explicar unas dudas sobre ReadProcessMemory?
Publicado por: Eternal Idol en 23 Enero 2022, 08:48 am
1) Lo mas correcto es usar lo retornado por VirtualQueryEx pero si arrancas con iniAddr siendo 0 y le vas sumando el tamaño de cada region retornada - ver punto 3 - deberian ir coincidiendo siempre.

2) En teoria deberian ser lo mismo pero por simple logica es mejor usar el valor que tu programa pudo leer.

3) ¿Que valor tiene iniAddr en cada iteracion del bucle si la inicializo a 0? 0, bucle infinito, no hay nada en tu codigo para ir alterando su valor en cada iteracion.

¿Y si VirtualQueryEx falla que hacemos? ¿Tambien entra en bucle infinito?

Llegados a este punto es imperativo que logres depurar tu programa linea por linea, y para mi gusto no hay mejor opcion que el WinDbg.


Título: Re: ¿Me pueden explicar unas dudas sobre ReadProcessMemory?
Publicado por: otroWeyMas.nasm en 23 Enero 2022, 17:56 pm
Ok gracias.

Al principio no entendí bien el punto 3, parecía adivinanza jeje, pero logré modificarlo y por si las dudas usé GetLastError en VirtualQueryEx, pero no pasó nada malo y ya funciona, o eso parece... el bucle ya se detiene y me muestra el resultado esperado.

Gracias de nuevo Eternal. 


Título: Re: ¿Me pueden explicar unas dudas sobre ReadProcessMemory?
Publicado por: Eternal Idol en 23 Enero 2022, 18:02 pm
De nadas  ::)