Tema destacado: Últimos eventos sobre seguridad/inseguridad
Autor
|
Tema: problemas al intentar reemplazar string en la memoria. (Leído 610 veces)
|
Destro-
Desconectado
Mensajes: 47
|
Holas  . Estoy intentando reemplazar un string de otra aplicacion en memoria pero no logre nada :\. Me podrian decir los orrores que tiene esto xd. int main() { char data[] = "asd"; DWORD pid; HANDLE process; HWND wnd = FindWindow(0, "ventana"); GetWindowThreadProcessId(wnd, &pid); process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if(process==NULL) printf("Error abriendo el proceso.\n"); else printf("Proceso abierto.\n");
if(WriteProcessMemory(process, (LPVOID)00405254, (LPVOID)&data, strlen(data), NULL) == 0) printf("Error escribiendo memoria.\n"); else printf("Memoria Escrita.\n");
CloseHandle(process);
system("PAUSE"); return 0; }
La direccion de memoria la saque con el ida. .rdata:00405254 00000018 C No hay nuevas verciones Trank  . @EDIT me olvidaba,el ultimo printf lo manda bien,pero en la otra aplicacion el msgbox sigue siendo el mismo "No hay nuevas verciones".
|
|
|
|
« Última modificación: 26 Noviembre 2011, 17:20 por Destro- »
|
En línea
|
|
|
|
naderST
Desconectado
Mensajes: 467
|
Un detalle la dirección que encontraste es decimal u octal? Porque cuando llamas a WriteProcessMemory le estas pasando una dirección en octal OJO, si es decimal quita todos los ceros a la izquierda que tengas. EDIT: Estoy casi seguro que tu problema es que estas poniendo la dirección en octal, y de igual manera escribirá en la memoria del proceso solo que en una dirección que no quieres escribir. WriteProcessMemory(process, (LPVOID)405254, (LPVOID)&data, strlen(data), NULL)
|
|
|
|
« Última modificación: 26 Noviembre 2011, 22:29 por naderST »
|
En línea
|
|
|
|
|
Eternal Idol
|
En PC las direcciones se anotan en hexadecimal casi siempre, 0x405254 en este caso.
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Destro-
Desconectado
Mensajes: 47
|
Ahora no escribe en la memoria :\. Error 998 El acceso a la dirección de memoria no es válido. Gracias  .
|
|
|
|
« Última modificación: 27 Noviembre 2011, 02:04 por Destro- »
|
En línea
|
|
|
|
Unbr0ken
Desconectado
Mensajes: 248
|
Copia la dirección que estás intentando escribir, busca algún debugger o programa para mostrar la memoria de un proceso y dirígete a esa parte, entonces mira las banderas de acceso y revisa si tiene datos esa dirección.
|
|
|
|
|
En línea
|
Discutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre. NO resuelvo dudas vía MP, para algo está el foro.
|
|
|
|
Eternal Idol
|
Tenes que llamar a VirtualProtectEx para darte permisos de escritura.
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Unbr0ken
Desconectado
Mensajes: 248
|
Tenes que llamar a VirtualProtectEx para darte permisos de escritura.
Que directo tío xDDDDDDDDDDDDDDDDD.
|
|
|
|
|
En línea
|
Discutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre. NO resuelvo dudas vía MP, para algo está el foro.
|
|
|
Destro-
Desconectado
Mensajes: 47
|
ok,en un rato pruebo y les cuento,gracias  .
|
|
|
|
|
En línea
|
|
|
|
Destro-
Desconectado
Mensajes: 47
|
we,no lo pudo hacer ;(. esto es lo ultim que probe (probe como 20 cosas mas u.u). int main() { char data[] = "asd"; DWORD pid; HANDLE process; HWND wnd = FindWindow(0, "ventana"); GetWindowThreadProcessId(wnd, &pid); process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if(process==NULL) printf("[-] Error abriendo proceso.\n"); else printf("[+] Proceso abierto.\n");
VirtualProtectEx(process, (LPVOID)0x405254, 18, 1|2, 0);
if(WriteProcessMemory(process, (LPVOID)0x405254, (LPVOID)&data, strlen(data), NULL) == 0) printf("[-] Error escribiendo memoria:%d\n", GetLastError()); else printf("[+] Memoria Escrita.\n");
CloseHandle(process);
system("PAUSE");
return 0; }
|
|
|
|
« Última modificación: 29 Noviembre 2011, 00:12 por Destro- »
|
En línea
|
|
|
|
|
Eternal Idol
|
¿Te fijaste que devuelve VirtualProtectEx? En la MSDN dice expresamente:
lpflOldProtect [out] A pointer to a variable that receives the previous access protection of the first page in the specified region of pages. If this parameter is NULL or does not point to a valid variable, the function fails.
¿1|2? ¿Que intentabas hacer con esa mascara? ¿PAGE_NOACCESS y PAGE_READONLY? Deberias pasarle PAGE_READWRITE.
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Destro-
Desconectado
Mensajes: 47
|
Ahora me fijo.Eso de 1|2 fue lo ultimo que probe xd,lo saque de un modulo de amxmodx que escribe/lee datos en la memoria del motor del juego. @EDIT Hay anda  ,gracias idolo  .
|
|
|
|
« Última modificación: 29 Noviembre 2011, 03:06 por Destro- »
|
En línea
|
|
|
|
|
Eternal Idol
|
De nadas 
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
|