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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  Windows (Moderador: Randomize)
| | |-+  Escaners de memoria; ¿Donde miran?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Escaners de memoria; ¿Donde miran?  (Leído 5,314 veces)
astinx

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Escaners de memoria; ¿Donde miran?
« en: 3 Noviembre 2011, 21:52 pm »

Hola, hace un tiempito que tengo una duda acerca de los escaners de memoria como el Cheat Engine entre otros, pese a que he indagado no he encontrado ninguno que sea open source para poder mirar su código, mi duda es la siguiente; Por mis conocimientos de sistemas operativos, el sistema operativo siempre implementa alguna política de protección de memoria para evitar que otros procesos accedan a las posiciones de memoria de otros procesos del usuario, a menos de que estén en modo kernel, ¿Entonces como pueden los escaners de memoria, como el cheat engine, mirar en las posiciones de memoria de otros procesos y cambiar su contenido?.

PD: No soy muy conocedor de Windows, aclaro.  :silbar:

Desde a gracias por detenerse a leer.


En línea

La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando
isidora

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Escaners de memoria; ¿Donde miran?
« Respuesta #1 en: 29 Noviembre 2011, 22:48 pm »

Si no me equivoco lo hace al igual que en los trainer con las instrucciones VirtualAlloc y WriteProcessMemor.

CheatEngine en su versión 6.1 utiliza los siguientes métodos:

-   VEH Depurador
-   Ventana del Depurador
-   Kernelmode Depurador (el mejor pero solo funciona con procesadores Intel)

Espero que te sirva, si necesitas más ayuda me dices.


En línea

Randomize
Moderador
***
Desconectado Desconectado

Mensajes: 20.599


Beautiful Day


Ver Perfil
Re: Escaners de memoria; ¿Donde miran?
« Respuesta #2 en: 29 Noviembre 2011, 22:56 pm »

Estoy que lo flipo  :o :o :o

Personas mayores en el foro  :o :o :o


Eso de las posiciones de memoria suelen estar bloqueadas hasta la consecución de la llamada siguiente ¿no?


En línea

Unbr0ken

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Escaners de memoria; ¿Donde miran?
« Respuesta #3 en: 4 Diciembre 2011, 04:46 am »

No se si seas programador o no, pero... escáneres de memoria como el CE simplemente hacen el llamado a APIs nativas del sistema para leer datos en un proceso externo.

En el caso del CE, en modo usuario sí se puede lograr, y no solo desde el CE, sino de cualquier aplicación hecha en un lenguaje de programación que tenga acceso a la API de Windows, desde C++ hasta VB6, etc... algunos lenguajes son más eficientes que otros para este tema, aquí gana la batalla C/C++.

Y... por otro lado, el Cheat Engine sí es open source, Dark Byte (Creador del CE) acostumbra a publicar el código del CE cada cierto tiempo, se ha tardado un poco con el código fuente del CE 6.1 (Que raro... :o) pero códigos fuente de versiones anteriores están publicados en su página web oficial.

Ahora, para ser un poco más específicos, lo que el CE hace para poder "acceder" a la memoria de otros procesos, es simplemente un llamado a la API de Windows llamada: ReadProcessMemory (Muy intuitivo su nombre), la cual según definición:

Código:
BOOL WINAPI ReadProcessMemory(
  __in   HANDLE hProcess,
  __in   LPCVOID lpBaseAddress,
  __out  LPVOID lpBuffer,
  __in   SIZE_T nSize,
  __out  SIZE_T *lpNumberOfBytesRead
);

Dónde sus parámetros serían:

Cita de: Parámetros de RPM
hProcess [Entrante]: Un handle (manejador) del proceso al cual será leída su memoria, éste debe poseer el acceso "PROCESS_VM_READ" para poder ser leído, tal acceso se otorga con otra API de la que luego hablaremos.

lpBaseAddress [Entrante]: Un puntero o dirección dirección en memoria del proceso a ser leído. Antes de la transferencia de datos, el sistema verifica que todos los datos en la dirección de memoria o puntero con el tamaño indicado, sean accesibles para su lectura, en caso contrario, la función fallaría.

lpBuffer [Saliente]: Un puntero a una variable temporal de datos (buffer) que recibirá el contenido del tamaño de memoria leído en la dirección especificada del proceso.

nSize [Entrante]: El número de bytes a ser leídos en el proceso especificado.

lpNumberOfBytesRead [Saliente]: Un puntero a una variable que recibe el número de bytes transferidos dentro del buffer especificado. Si su valor es NULL, éste parámetro es ignorado.

Cita de: Valor de retorno
Si la función tiene éxito, el valor de retorno es TRUE, o no-cero.

Si la función falla, el valor de retorno es FALSE, o cero. (Para obtener una información extendida del error, haz una llamada a GetLastError.)

La función falla si la operación solicitada de lectura cruza a un área de memoria del proceso que es inaccesible.

Cita de: Resumen
ReadProcessMemory API: Copia los datos leídos de un rango especificado de direcciones desde el espacio de direcciones del proceso especificado a la variable temporal (buffer) del proceso actual. Cualquier proceso que posea el manejador (handle) con el tipo de acceso PROCESS_VM_READ puede llamar la función con éxito.

Toda el área a ser leída debe ser accesible, en caso contrario la función falla.

Partiendo de ésto, podemos suponer (y comprobar revisando su código fuente) que el CE simplemente da acceso al handle (manejador) del proceso a leer datos en memoria y procede a iniciar un bucle desde la dirección 0x00000000 hasta 0xFFFFFFFF (o en el rango que el usuario establezca) leyendo cada una de estas direcciones en el tamaño especificado según el tipo de dato elegido por el usuario, en el caso de un entero el bucle tendría que leer 4 bytes de cada dirección, hacer una conversión y comprobar si el resultado concuerda con el valor introducido por el usuario, en caso contrario, ignorar esa dirección y seguir a la próxima.

Lógicamente, éste bucle debe hacer comprobaciones para cada área de memoria, si es inaccesible, entonces saltarse a la próxima, etc. Son simples trucos para agilizar el tiempo de escaneo, que la mente de cada programador brille aquí.

Cabe destacar que la API usada para establecer el tipo de acceso a un handle (manejador) es: OpenProcess, la cual puedes buscar su definición en google junto a sus parámetros y valor de retorno.

Saliéndonos un poco del tema, actualmente estoy desarrollando una aplicación similar al CE (No tan poderosa, pero indetectable), es un escáner de memoria pero aún no lo he terminado, es demasiado grande para terminarse en tan poco tiempo :xD...

Volviéndo al tema: Esto que he dicho, no es más que una introducción a lo que hace el CE en sí, en ello se basa, pero... se debe tener mucho más cuidado, ya que existen hooks a modo usuario y modo kernel que te pueden o no prohibir el acceso a la memoria de un proceso específico. Por supuesto, el CE 6.1 a parte de tener su propio controlador, el cual se encarga de brindarle al CE acceso a la mayoría de procesos protegidos y no protegidos está compilado actualmente en Lazarus, las versiones 5.X y anteriores fueron compiladas en Delphi donde luego, a partir de la versión 6 mudaron a Lazarus. Por tal, si quieres revisar el código fuente del CE 5.1 (Creo que es el último publicado) para aprender como funciona, deberás usar Delphi para analizarle a fondo.

Como notas, es un tema con mucha tela para cortar, demasiados temas abundan en el manejo de memoria de Windows, es para tomárselo con calma :)... si tienes alguna duda, publicala aquí mismo, si en mi corto conocimiento está, te daré una mano, que si no... otros usuarios pueden ayudar.

Salud.

P.D.: Disculpas por revivir un tema de hace un mes de inactividad, pero... no había visto esta pregunta, y como el tema me gusta y me desenvuelvo un tanto bien en él, decidí aportar algo.
« Última modificación: 4 Diciembre 2011, 04:54 am por Unbr0ken » En línea

Cita de: Snowcrash
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.
astinx

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Re: Escaners de memoria; ¿Donde miran?
« Respuesta #4 en: 14 Diciembre 2011, 19:15 pm »

Es genial, muchisimas gracias, me fue de mucha utilidad tu explicación.
En línea

La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando
Unbr0ken

Desconectado Desconectado

Mensajes: 248



Ver Perfil
Re: Escaners de memoria; ¿Donde miran?
« Respuesta #5 en: 14 Diciembre 2011, 19:20 pm »

De nada, para eso estamos ::).
En línea

Cita de: Snowcrash
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.
isidora

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Escaners de memoria; ¿Donde miran?
« Respuesta #6 en: 15 Febrero 2012, 12:32 pm »

Unbr0ken me gusto mucho tu respuesta, me preguntaba si aun continuas con el desarrollo de tu aplicación, me interesa en demasiado el tema del gamehacking y tengo experiencia con los trainer, si deseas podemos compartir ideas.

Un Saludo.   
En línea

isidora

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Escaners de memoria; ¿Donde miran?
« Respuesta #7 en: 15 Febrero 2012, 17:03 pm »

Mil disculpas.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
dónde está la memoria de mi PC? « 1 2 »
Hardware
34danis 10 8,110 Último mensaje 21 Septiembre 2010, 23:31 pm
por MasterPunk
[RESUELTO]codigos de las instrucciones en memoria ¿donde conseguirlas?
Análisis y Diseño de Malware
AlxSpy 3 3,768 Último mensaje 31 Agosto 2011, 05:56 am
por AlxSpy
Los ciberdelicuentes miran a la nube
Noticias
wolfbcn 0 1,151 Último mensaje 1 Enero 2017, 14:45 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines