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.