![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Hola qué tal?
Pues me supongo que ha muchos les sonara conocido el programa "Cheat Engine" y las multiples funciones que tiene y no solamente que se usan para crear Trainers ( aunque siendo sinceros es lo más típico ) de hecho tiene varias funciones que me han llamado la atención como por ejemplo la opción que sirve para acelerar un programa seleccionado a cierta velocidad... Pero realmente vengo a hacer la consulta por la busqueda de "String" ... En Cheat Engine se selecciona un programa y se puede buscar distintos tipos de variables, Floats, Double, Strings entre otros... Quisiera saber como hacer un programa similar que busque un String y que halle su address para posteriormente modificar su valor.. Espero no sea mucho pedir... Gracias |
#2
|
||||
|
||||
Ábrelo en modo binario, hay varios ejemplos por los foros.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
||||
|
||||
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#4
|
||||
|
||||
Buena memoria
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
||||
|
||||
Creo que a lo que se refiere deliriun es a buscar y reemplazar texto el la memoria de otro proceso.
Para ello deberás abrir el proceso y usar las AIPs ReadProcessMemory y WriteProcessMemory. Con la primera lees un bloque de memoria del proceso "atacado" en él debes buscar tu cadena, reemplazarla (en este caso el número de caracteres reemplazados no puede superar NUNCA a la cadena original) y luego escribir el bloque de nuevo en el proceso en cuestión con WriteProcessMemory. Para buscar y reemplazar el texto puedes usar el código que propone ecfisa o este. Saludos. Última edición por escafandra fecha: 27-08-2015 a las 01:26:56. |
#6
|
|||
|
|||
Aclaración
Cuando puse de ejemplo el programa Cheat Engine me refería cuando el programa este corriendo
abrirlo desde el proceso ( como lo hace el Cheat Engine ) y una vez ahí hacer una búsqueda en memoria pero solo de String.. Obtener el address y cambiar su valor... |
#7
|
||||
|
||||
Hola deliriun.
Cita:
Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#9
|
||||
|
||||
Caramba, ecfisa, ya nos hemos pisado
![]() Saludos. |
#10
|
|||
|
|||
![]() Alguien me podría dar un ejemplo de como emplear... No entiendo mucho las paginas de Microsoft
|
#11
|
||||
|
||||
No te lo tomes a mal, pero si dices eso es que quizás no estés preparado todavía para hacer algo así.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#12
|
||||
|
||||
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#13
|
||||
|
||||
Independientemente de que sea o no capaz de llegar a entender el uso de esas API y que les de un uno eficaz para su problema, yo quisiera saber cual es el interés particular de deliriun en alterar las cadenas de un proceso y cual es el proceso que quiere alterar.
Saludos. |
#14
|
||||
|
||||
Vamos a dar un empujoncito al tema. He escrito una función un poco a lo bruto para cambiar una cadena en un proceso. He de aclarar que está escrito en delphi7, que se compila para 32bits, esto quiere decir que no se pueden atacar de esta forma procesos de 64bits. Lo he probado en winXP y en Win10:
He de comentar lo siguiente: 1- Las cadenas de un proceso en memoria deben tratarse como UNICODE 2- He usado funciones "C" de la librería crtdll.dll que trae Windows como parte del S.O. para faciñitar la búsquede de cadenas a bajo nivel - wcslen devuelve el número de caracteres de una cadena tipo WCHAR - _wcsnicmp compara una cadena WCHAR con otra en una longitud máxima dada y sin ser sensible a mayúsculas/minúsculas 3- Un código para 32bits no puede leer la memoria de un proceso 64 bits sin más, se precisa un driver o trucos especiales, esto es debido a la incompatibilidad de los punteros que definen el rango de direcciones que son capaces de direccionar. 4- No se puede sustituir una cadena por otra de mayor longitud. Espero aclarar alguna duda a deliriun. Saludos. Última edición por escafandra fecha: 09-03-2020 a las 08:00:24. |
#15
|
|||
|
|||
Unicode y 64 Bits
El código me funciona muy bien en 32 Bits... sin embargo estoy seguro que todo programador quiere que sus programas corran en cualquier PC por eso pregunto si es posible convertirlo a 64 Bits.
Por otro lado me funciona con Unicode... pero si ese no es el caso... Cómo se debería emplear... Muchas Gracias de antemano por su ayuda... |
#16
|
||||
|
||||
deliriun, ReadProcessMemory y WriteProcessMemory funcionan para un código de 64biits atacando otro también de 64 bits o de 32 bits, las que no te van a funcionar si compilas mi código en 64 bits (lazarus, por ejemplo) son wcslen y _wcsnicmp puesto que la librería crtdll.dll es se Win32. Te he dado las pautas, aunque pueden complicarse un poco más incorporando VirtualQueryEx. Puedes empezar a trabajar y nos cuetas.
![]() Saludos. |
#17
|
|||
|
|||
Problema con String Unicode
Pues la verdad el código que me ha dado funciona bien... pero siendo sinceros no tengo experiencia programando con Delphi... Yo uso más vb.net por su sencillez pero admito que Delphi es mucho más potente y también hay mucho asesoramiento y ayuda como esta pagina por ejemplo así que hice la pregunta en este Foro y solo me gustaría ver como es posible hacer la búsqueda del String sin que sea UNICODE... ya que esa es mi dificultad... Y sé que este no es el sitio adecuado para preguntar pero si alguien conociera un Foro como este pero destinado a vb.net se lo agradecería mucho.
Gracias |
#18
|
||||
|
||||
Hola deliriun.
Cita:
En la búsqueda, aparecen varios mas:Pero como no conozco nada acerca de vb.net, no puedo evaluar el nivel de esos foros como para recomendarte alguno en especial. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#19
|
||||
|
||||
Cita:
Al escribir código a bajo nivel para 64bits hay que tener mucho cuidado con la aritmética de punteros y conversiones, ya que su tamaño es de 64bits y no de 32, como estamos acostumbrados. Aprovecho para mostrar una función, _StrCmpNIW, simple y más rápida que la API del mismo nombre. Es importante dotar de velocidad al barrido de memoria. Saludos. Última edición por Casimiro Notevi fecha: 30-08-2015 a las 20:01:21. |
#20
|
||||
|
||||
Nota de última hora:
Al ver el código, subí una versión en la que comenté una línea para hacer pruebas, se debe "descomentar" para ganar algo de velocidad. Esta es la parte del código:
Debe quedar así:
Saludos. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
programa residente en memoria | elcigarra | OOP | 5 | 28-04-2008 18:39:48 |
Buscando programa de cadetil | Novás | Varios | 1 | 01-11-2006 12:23:50 |
programa residente en memoria | Jorge Ramirez | Varios | 1 | 25-04-2004 06:10:49 |
Programa residente en memoria | naker | Varios | 2 | 10-11-2003 00:35:10 |
Programa de Consola en memoria.... | jcgarcia | Varios | 2 | 04-06-2003 02:05:51 |
![]() |
|