Autor
|
Tema: Cambiar valor de un address de otro programa (Leído 5,785 veces)
|
Stereo
Desconectado
Mensajes: 25
|
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 : void ChangeAddr(int toadd) { system("cls"); long offset = 0x00005578; long pointer = 0x00187F34; long finalAddr = offset + pointer/*, sumaHex = 0x18D4AC*/, Leer; WriteProcessMemory ( process, ( LPVOID )finalAddr, &toadd, sizeof ( toadd ), NULL ); ReadProcessMemory ( process, ( LPVOID )finalAddr, &Leer, sizeof ( Leer ), NULL ); printf("Valor: %d", Leer); }
Gracias de antemano!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.947
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 25
|
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
Mensajes: 5.947
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 25
|
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
Mensajes: 25
|
Hola, tengo otro problema Ésta vez quiero cambiar las instrucciones (no se si se llaman así) de un address: 0043579C - 01 50 50 - add [eax+50],edx -> 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): char Default[] = "\x01\x50\x50"; // 3 bytes 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
Mensajes: 5.947
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 25
|
Es lo que quiero y lo de 7 bytes... seguro? O sea tal y como lo cambio está bien?: Op code en debugger: 81 40 50 50C30000 El cambio a C++: "\x81\x40\x50\xC3\x00\x00"
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.947
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 25
|
Me sigue crasheando el programa, ahora lo cambie por: "\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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Leer el valor de los campos de otro programa
Programación Visual Basic
|
K1ll1ng M4ch1n3
|
5
|
3,534
|
1 Agosto 2009, 12:50 pm
por Dessa
|
|
|
como cambiar valor de otro objeto?
Java
|
greenselves
|
1
|
4,133
|
22 Marzo 2011, 19:00 pm
por Debci
|
|
|
Como Obtener valor de un textbox, desde un valor, hasta otro valor [VB6]
Programación Visual Basic
|
revenge1252
|
4
|
6,722
|
17 Julio 2012, 09:38 am
por BlackZeroX
|
|
|
Plasmar el valor de un programa en otro
Dudas Generales
|
daniel7885
|
0
|
1,900
|
8 Junio 2015, 13:54 pm
por daniel7885
|
|
|
Duda: Programa devolviendo valor a otro programa
Programación C/C++
|
erest0r
|
6
|
3,858
|
3 Julio 2015, 01:38 am
por erest0r
|
|