elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cambiar valor de un address de otro programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Cambiar valor de un address de otro programa  (Leído 5,254 veces)
Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Cambiar valor de un address de otro programa
« en: 22 Agosto 2013, 20:15 pm »

Hola buenas
He hecho este code, pero no funciona, será la suma? o que no he puesto bien el offset, lo del 0x00.. no se si se pone así o se quitan los 0s de la izquierda :-\:
Código
  1. void ChangeAddr(int toadd)
  2. {
  3.        system("cls");
  4. long offset = 0x00005578;
  5. long pointer = 0x00187F34;
  6. long finalAddr = offset + pointer/*, sumaHex = 0x18D4AC*/, Leer;
  7. WriteProcessMemory ( process, ( LPVOID )finalAddr, &toadd, sizeof ( toadd ), NULL );
  8. ReadProcessMemory ( process, ( LPVOID )finalAddr, &Leer, sizeof ( Leer ), NULL );
  9. printf("Valor: %d", Leer);
  10. }
  11.  

Gracias de antemano!


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cambiar valor de un address de otro programa
« Respuesta #1 en: 22 Agosto 2013, 20:58 pm »

Depuralo linea por linea y asi sabras que retornan WriteProcessMemory y ReadProcessMemory. Tambien podes depurar el otro programa, por ejemplo desde WinDbg podes hacer dd 0x18D4AC ... un cero a la izquierda es eso, irrelevante.


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
Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Cambiar valor de un address de otro programa
« Respuesta #2 en: 22 Agosto 2013, 21:16 pm »

El caso es que según el cheat engine está bien y WriteProcessMemory y ReadProcessMemory retornan true ambas :/

Lo de los 0s a la izquierda me refiero que no se si al poner 0x se quitan los 0 de la izq o se deja así:
      00187F34 -> 0x187F34
      00005578 -> 0x5778

Gracias
« Última modificación: 24 Agosto 2013, 15:04 pm por Stereo » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cambiar valor de un address de otro programa
« Respuesta #3 en: 22 Agosto 2013, 21:40 pm »

Los ceros a la izquierda son irrelevantes, 0x indica que la notacion es hexadecimal.

Sera sobreescrito el valor, fijate que pasa si depuras el otro programa y lo suspendes ...
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
Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Cambiar valor de un address de otro programa
« Respuesta #4 en: 22 Agosto 2013, 22:01 pm »

Ok ya resolví el problema:

Primero hay que leer el pointer, luego sumarle el offset de lo que hayas obtenido, y después escribir en esa dirección.

Lo siento si he hecho perder tiempo, soy newbie jiji

Gracias de todas formas
En línea

Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Cambiar valor de un address de otro programa
« Respuesta #5 en: 27 Agosto 2013, 21:35 pm »

Hola, tengo otro problema

Ésta vez quiero cambiar las instrucciones (no se si se llaman así) de un address:

Código:
0043579C - 01 50 50                   - add [eax+50],edx
->
Código:
0043579C - 81 40 50 50C30000          - add [eax+50],0C350

Y hasta ahora lo que hago es crear 2 variables: una para el nuevo código y otra para el default, pero se crashea el programa (es una inyección de DLL):

Código
  1. char Default[] = "\x01\x50\x50";                     // 3 bytes
  2. char New[] =     "\x81\x40\x50\xC3\x00\x00"; //Aqui el error, no se si la cadena esta mal o si son mas de 4 bytes...
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cambiar valor de un address de otro programa
« Respuesta #6 en: 27 Agosto 2013, 21:52 pm »

Son 7 bytes (te falta 1) pero no podes simplemente poner eso ahi, vas a sobreescribir lo que haya despues del Default ... tenes que hacer un salto y ejecutar codigo en alguna zona libre.
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
Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Cambiar valor de un address de otro programa
« Respuesta #7 en: 27 Agosto 2013, 22:21 pm »

Es lo que quiero ;D y lo de 7 bytes... seguro? O sea tal y como lo cambio está bien?:

Op code en debugger:
Código:
81 40 50 50C30000

El cambio a C++:
Código:
"\x81\x40\x50\xC3\x00\x00"
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Cambiar valor de un address de otro programa
« Respuesta #8 en: 27 Agosto 2013, 22:24 pm »

Te falta uno ahi, son 6, te falta otro byte con valor 0:

"\x81
\x40
\x50
\xC3
\x00
\x00"
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
Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Cambiar valor de un address de otro programa
« Respuesta #9 en: 27 Agosto 2013, 22:51 pm »

Me sigue crasheando el programa, ahora lo cambie por:
Código:
"\x81\x40\x50\xC3\x00\x00\x00"
Y puse 7 bytes, lo que dijiste no?

Alomejor es por lo que has dicho de lo de despues del default, yo pretendo sobreescribir el opcode que tiene el address
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines