Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Lectura de variables

Saludos. Me gustaría saber si hay alguna manera de leer variables y zonas de memoria de otra aplicación con delphi, y si la hay, ¿Me podéis dar algo de información? Gracias a todos que siempre me ayudáis.
Responder Con Cita
  #2  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
en teoria, variables no, puesto que se sustituye su simbolo por una dirección de memoria al momento de compilarse (si se han dejado las debug options activadas, no se sustituyen) y ejecutarse (objetos si: primero encontrando la form con findwindow y luego usar FindComponent). Eso si, una dirección de memoria conocida si puede leerse, mediante una funcion Peek o equivalente.
Saludos
Responder Con Cita
  #3  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Ahora me gustaría saber lo siguiente: Como puedo saber la vida de un juego (por ejemplo). Mi teoría es:

1· Desensamblar y buscar la región de memoria y la línea que llama a esa región, ya que en algunos ordenadores puede cambiar. Y usar esa línea para localizar la región.

¿Eso está bien o hay alguna equivocación?
Responder Con Cita
  #4  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
ufff... eso es complicadillo... en principio tendrias que cargar un juego en un debugger o lector dinamico de memoria....luego, poner 'flags' a las zonas de memoria que cambian y, mirando en el momento que te maten una vida, cual es el byte (o integer etc) que se ha reducido. Otra manera es grabar una partida, cargarla y acto seguido matarte (sin que cambie nada mas), grabar, y comparar los dos archivos (inicio->ejecutar->fc.com /b archivo1 archivo2 >> comparacion.txt). Este sistema por eso funcionaba bien en los juegos antiguos, pero en los modernos, donde en un segundo te cambia hasta la paleta de colores o las texturas, te sera bastante dificil encontrar en que posicion de memoria se guardan las vidas . Prueba eso, graba con 5 vidas, busca el caracter nº5, graba con 4, buscar el nº4, etc... y si tienes suerte que se te modifica en alguna posición concreta, quiza sea aquella la posición.

PD: no estoy seguro, pero creo que ya habran programas concretos para estas cosas X/ ...
Responder Con Cita
  #5  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Tranquilo, hay un programa llamado cheatengine, que debuggea y encuentra las zonas de memoria que le has dicho. Si tengo 5 vidas busco 5, si tengo 4 vidas busco 4... El problema no es ese, es como usarlo en delphi. Sobre debuggear y desensamblar estoy hecho un hacha xD.
Responder Con Cita
  #6  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
pero...a ver...en delphi no tienes vidas a no ser que haya algo que aun no haya descubierto yo...como quieres usar el 'cheatengine' este en delphi?
Responder Con Cita
  #7  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Hay jaja no me refiero a eso. Si no usar cheat engine para LEER ZONAS DE MEMORIA DE UN JUEGO, no usar delphi como juego xD.
Responder Con Cita
  #8  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
ya ya pero q tiene que ver delphi en esto??... nada curiosidad namas
Responder Con Cita
  #9  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
No hay ninguna forma de leer una zona de memoria desde delphi. Por ejemplo:
Código Delphi [-]
 
Read(080000,byte,vidas);
Showmessage(IntToStr(vidas),etc...)

Y esto lee la zona de memoria 080000, tamaño byte (los dos primeros digitos hexadecimales), y los almacena en vidas (variable integer).

A eso me refiero...
Responder Con Cita
  #10  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si...lo que se llama un 'peek'...voy a buscar que a mi tambien me interesa... a ver si alguien del foro ya lo sabe
Responder Con Cita
  #11  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Si nos ayudamos los dos mejor, yo te digo que si vas ha hacer algo parecido, usa cheat engine. Agrégame a ezeali@msn.com y hablamos directamente, pero luego ponemos por aquí el resultado de lo que hemos conseguido para compartirlo con los demás.
Responder Con Cita
  #12  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
no, no, no por los juegos, solo q se que en c si existe peek y es sencillo tambien acceder a una dirección de memoria (integer *p = 0x0a000) solo que en delphi me esta dando errores X/ leyendola directamente de esta manera, y no encuentro la funcion Peek susodicha...
Responder Con Cita
  #13  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Voy a buscar to también alguna especie de traducción para peek en delphi.
Responder Con Cita
  #14  
Antiguo 13-07-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por coso Ver Mensaje
si...lo que se llama un 'peek'...voy a buscar que a mi tambien me interesa... a ver si alguien del foro ya lo sabe
Ah Peek an Poke. La base de la programación en Commodore 64!
Hicieron que se me piante un lagrimón.

Me voy a ver mi commodore 64 y vuelvo.

Saludos.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #15  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
quiza 'peek' esta obsoleto. Readmem o memread tampoco lo encuentro. no encuentro manera de leer una direccion de memoria directamente...

Código Delphi [-]
var
         p : PInteger;
begin
         p := PInteger($080000); // o p := Ptr($080000);
         showmessage(inttostr(p^)); // Access error read memory $080000
end;
Responder Con Cita
  #16  
Antiguo 13-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
¿Cómo? Pero la memoria que quiero leer es de un programa, ¿o la memoria es la misma para todos los programas?
Responder Con Cita
  #17  
Antiguo 13-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hombre, la memoria es la memoria entera del ordenador... cada programa va reservando trozos segun los necesite (el getmem...) no se bien bien el funcionamiento, pero creo que se va asociando cada trozo al programa con un identificador del programa, que debe ser lo que lee el cheat engine este..si la duda es si la direccion es dinamica y cambia cada vez, creo que si (?)
Responder Con Cita
  #18  
Antiguo 14-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
¿Entonces como puedo saber que memoria se le ha dado a una aplicación? Por ejemplo:

Imáginate que en mi ordenador la vida está alojada en 089765, yo creo que 9765 no cambia, solo cambia 08 que es la memoria que le ha dado el ordenador, ¿No? (CORREGIDME SI ME EQUIVOCO).

Entonces


Código Delphi [-]
//Handle es un integer con el handle de la ventana.
//LocMemo es otro integer, vacío.
//Vidas es Int vacío.
GetMemAddress(handle,LocMemo) //Equivalente a 08 en mi ordenador
Vidas := PInteger $(locmemo + 9765) //Localización de las vidas




Yo pienso que debería ser algo así. Corregidme si hay algo mal.
Responder Con Cita
  #19  
Antiguo 14-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
me gustaria ayudarte pero no se bien bien como va: se que la memoria esta paginada (00000:00000) de cierta manera, pero no se como el sistema operativo la va adjudicando a cada programa. A ver si alguien mas del foro lo sabe...
Responder Con Cita
  #20  
Antiguo 17-07-2008
rauros rauros is offline
Miembro
 
Registrado: feb 2008
Ubicación: Alicante - Sax / Sax - Alicante
Posts: 235
Poder: 17
rauros Va por buen camino
Vale, ahora lo tengo en un memo. ¿Como selecciono un texto de un memo?
Yo se que para copiar parte de un string a otro:

repeat
copiado:=copiado+texto[i];
i:=i+1;
until me_de_la_gana

Pero de un memo pff... Ni idea. Lo siento.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Lectura del USB por Interrupción cisco Varios 0 25-10-2007 18:13:29
Lectura de un FTP con idHTTP gluglu Internet 2 05-05-2007 00:35:50
Problema de lectura de un cd dragondetierra Varios 0 18-02-2007 18:58:52
Test de lectura Héctor Randolph Humor 9 26-10-2005 00:11:40
variables variables (manual php) salvica PHP 0 25-09-2005 16:44:52


La franja horaria es GMT +2. Ahora son las 17:44:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi