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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Source]Modificacion de procesos (libreria con utilidades)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Source]Modificacion de procesos (libreria con utilidades)  (Leído 5,007 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
[Source]Modificacion de procesos (libreria con utilidades)
« en: 16 Agosto 2010, 16:47 pm »

Buenas, tras conseguir la manera de obtener el PID sin necesidad de cojer la handle de la window, cree un code para poder modificar otros programas o procesos en ejecucion (que bien lo he pasado jeje), aqui primero el programa de ejemplo:

http://www.mediafire.com/?2mapqpuebn8kym1

Para encontrar el sector de memoria a modificar busquen por el numero que tienen almacenado en un momento determinado en la variable y cambien dicho sector de memoria en el codigo para injectar vuestro propio valor.

Esta basado en el tutorial de Vladek que lei hace tiempo, una variable que va acumulando valores de lo que recive sumandolos y mostrando su resultado.

Ahora nuestro programa, que en primer lugar obtiene el PID de un proceso a traves del nombre (Gracias Littlehorse), y lo modifica con WriteProcess, usando el handle obtenido con el PID:

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <tlhelp32.h>
  5. #include <tchar.h>
  6. #include <stdio.h>
  7. #include "PsControl.h"
  8.  
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13. HANDLE hPsLectura;
  14. DWORD pidPs;
  15. pidPs = getPsId("Proyecto1.exe");
  16. cout << pidPs << endl;
  17. hPsLectura = OpenProcess(PROCESS_ALL_ACCESS,false,pidPs);
  18. long Numero = 71827339;
  19. DWORD Bytes;
  20. /* La direcion de memoria que vamos a cambiar en el proceso con HANDLER hPsLectura es 0x0022FF44 y cambiaremos el valor Numero */
  21. WriteProcessMemory(hPsLectura,(LPVOID)0x0022FF44,&Numero,sizeof(Numero_Nuevo),&Bytes);
  22. system("pause");
  23. return 0;
  24. }

Se que me diran que el system("No es portable"); y tal pero es que pocas funciones aqui usadas lo son :)

Y ahora la libreria con el control de procesos:

Código
  1. #ifndef _PSCONTROL_H_
  2. #define _PSCONTROL_H_
  3. #include <Windows.h>
  4. #include <iostream>
  5. #include <cstdlib>
  6. #include <tlhelp32.h>
  7. #include <tchar.h>
  8. #include <stdio.h>
  9. using namespace std;
  10. int killProcess(DWORD pid)
  11. {
  12.    HANDLE proceso;
  13.    proceso=OpenProcess(PROCESS_TERMINATE,FALSE,pid);
  14.  
  15.  
  16. TerminateProcess(proceso,0);
  17.  
  18. CloseHandle(proceso);
  19. return 0;
  20.  
  21. }
  22. DWORD getPsId(const char* PsName)
  23. {
  24. DWORD ProcessID;    
  25. HANDLE Handle;
  26. PROCESSENTRY32 ProcI;
  27.  
  28. Handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  29. ProcI.dwSize=sizeof(PROCESSENTRY32);
  30.  
  31. while(Process32Next(Handle,&ProcI))
  32.     if(!strcmp(ProcI.szExeFile,PsName))
  33.        ProcessID=ProcI.th32ProcessID;
  34.  
  35.  
  36. CloseHandle(Handle);
  37.  
  38. return ProcessID;
  39. }
  40. #endif

Eso es todo, no es un programa final, pero puede que a muchos les solucione algunas dudas.

Un saludo


En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #1 en: 16 Agosto 2010, 18:25 pm »

Suena a Cheat Engine :P

Muy bueno!

Por cierto lo de system("pause") lo puedes cambiar por un getchar/

Saludos!


En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #2 en: 16 Agosto 2010, 18:36 pm »

Suena a Cheat Engine :P

Muy bueno!

Por cierto lo de system("pause") lo puedes cambiar por un getchar/

Saludos!
Mi idea es hacer algo asi, pero estatico, osea para un soft en concreto.

Saludos
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #3 en: 17 Agosto 2010, 03:02 am »

Hay que tener en cuenta que no siempre podes escribir en otro proceso, dependiendo de si es accesible la región, si tenes privilegios para hacerlo, etc. Igualmente para empezar esta bien, pero falta pulir todo lo que es el manejo de errores ya que en determinados casos puede colapsar.

En cuanto a system, no se trata solamente de la portabilidad, el rendimiento también influye. Cada llamada a system requiere recursos extra que no siempre son necesarios, por ejemplo reservar la memoria para la consola, llamarla, crear el proceso, etc. Indefectiblemente en algún momento hay que sacarse la mala costumbre, mas si estas usando la API directamente, ya que en ese caso tenes muchas opciones para hacer una pausa.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #4 en: 17 Agosto 2010, 10:18 am »

Hay que tener en cuenta que no siempre podes escribir en otro proceso, dependiendo de si es accesible la región, si tenes privilegios para hacerlo, etc. Igualmente para empezar esta bien, pero falta pulir todo lo que es el manejo de errores ya que en determinados casos puede colapsar.

En cuanto a system, no se trata solamente de la portabilidad, el rendimiento también influye. Cada llamada a system requiere recursos extra que no siempre son necesarios, por ejemplo reservar la memoria para la consola, llamarla, crear el proceso, etc. Indefectiblemente en algún momento hay que sacarse la mala costumbre, mas si estas usando la API directamente, ya que en ese caso tenes muchas opciones para hacer una pausa.

Saludos

El getch() que sugirio el compañero?

Saludos
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #5 en: 19 Agosto 2010, 02:29 am »

[D4N93R] no menciono getch, menciono getchar. Y si, getchar podría ser una opción, en el foro hay muchos ejemplos sobre las distintas formas para hacer una pausa.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #6 en: 19 Agosto 2010, 11:25 am »

[D4N93R] no menciono getch, menciono getchar. Y si, getchar podría ser una opción, en el foro hay muchos ejemplos sobre las distintas formas para hacer una pausa.

Saludos
Entiendo gracias por la aclaracion!

Saludos
En línea

16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #7 en: 20 Agosto 2010, 15:44 pm »

Hay que tener en cuenta que no siempre podes escribir en otro proceso, dependiendo de si es accesible la región, si tenes privilegios para hacerlo, etc. Igualmente para empezar esta bien, pero falta pulir todo lo que es el manejo de errores ya que en determinados casos puede colapsar.


Y me pregunto que es lo que hace que en los sistemas operativos modernos (y bueno, también linux) desde otro proceso nos permita el S.O. acceder a la memoria reservada para otro proceso. En Win98, (osea MS-DOS) esto era muy fácil, te hacías un bucle que se pasara al escribir en un array o un malloc en un bucle mal hecho y ya te has podido cargar algún proceso. Yo lo hice, y fue uno del S.O. ^^. Pero si teóricamente el S.O. de ahora no permite a un proceso acceder fuera de la memoria que le ha sido asignada, ¿como puede ver y modificar esas otras áreas ahora?
En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #8 en: 20 Agosto 2010, 23:25 pm »

En este caso, porque el programa esta siendo probado en una cuenta donde el proceso tiene los privilegios necesarios.

Como bien dijiste cada proceso tiene un contexto, un propio espacio de direcciones, ahora eso no implica que nunca puedas acceder a la memoria de otro proceso. En este caso funciona por lo antes mencionado, pero en la mayoría de los casos como mínimo necesitas obtener privilegios de depuración para que OpenProcess con PROCESS_ALL_ACCESS no falle.

Igualmente formas hay muchas, un ejemplo básico por ejemplo seria inyectar código para ejecutarte en el contexto del proceso que necesitas acceder. Lo primordial es tener en claro como funcionan los derechos de acceso y los atributos de seguridad de cada proceso.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: [Source]Modificacion de procesos (libreria con utilidades)
« Respuesta #9 en: 21 Agosto 2010, 05:05 am »

En este caso funciona por lo antes mencionado, pero en la mayoría de los casos como mínimo necesitas obtener privilegios de depuración para que OpenProcess con PROCESS_ALL_ACCESS no falle.

solo falla cuando no podes ejecutar tu programa como administrador o hay algún driver vigilando el tema (casos especiales), en general solo basta con tener el mismo nivel de acceso del programa al que querés obtener privilegios...

S2
« Última modificación: 21 Agosto 2010, 15:32 pm por Karman » 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