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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Obtener datos de un proceso ("cheat")
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Obtener datos de un proceso ("cheat")  (Leído 13,503 veces)
ŞCØRPIØN-X3

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Obtener datos de un proceso ("cheat")
« en: 10 Julio 2011, 00:43 am »

Hola, vengo a pedirles que me orienten :P
Como puedo hacer para saber un valor de un elemento que tiene un programa. Porejemplo, dentro de un programa existe un textbox con un valor que aumenta cada 1 segundo, desde mi programa como puedo obtener el valor de ese textbox?. El programa "contador" no es mio y por lo tanto no tengo el codigo... y tampoco se que nombre tendra ese textbox :S. Bueno eso es lo que necesito saber, ojala me puedan ayudar :) Gracias de antemano


« Última modificación: 16 Julio 2011, 21:24 pm por ŞCØRPIØN-X3 » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Controlar programa externo
« Respuesta #1 en: 10 Julio 2011, 00:49 am »

.
* Inyecta una dll... y realizas una subclasificacion al control mediante memoria compartida, dicha dll deberia enviarte los datos a tu programa ( SendMessage() o postMessage() ), es algo complejo... creo que la dll deberias hacerla en C/C++ por que la verdad nunca he visto inyecciones con dll creadas con vb6... aun con el tutorial de elguille para crear dll Standart.

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Controlar programa externo
« Respuesta #2 en: 10 Julio 2011, 01:04 am »

podes hacer un simple EnumChildWindows de la ventana padre de ese textbox, o de toda la ventana del programa, y obtener los valores de los controles, en uno de ellos estara el valor de ese textbox, lo actualizas constantemente y listo.
En línea

ŞCØRPIØN-X3

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Controlar programa externo
« Respuesta #3 en: 10 Julio 2011, 20:15 pm »

muchas gracias a ambos por su respuesta :), la verdad es que se ve un poco complejo :S y con C++ no estoy muy familiarizado :(. Como es eso de EnumChildWindows?, con este se podria obtener el valor del textbox con el contador??. Muchas gracias...
En línea

AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
Re: Controlar programa externo
« Respuesta #4 en: 10 Julio 2011, 21:47 pm »

cuando no puedas resolver algo con el vb6 debes averiguar sobre las funciones de windows ( APIs de windows):

Código
  1.  
  2.  
  3. 'FindWindow: Busca una ventana por su classname o por su windowname(barra de titulo)
  4.  
  5.  
  6. Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7.  
  8.  
  9. 'parametros:
  10.  
  11. 'lpClassName: nombre de la clase
  12.  
  13. 'windowname: barra de titulo
  14.  
  15.  
  16.  
  17.  
  18.  
  19. 'EnumChildWindows: Enumera las ventanas hijas (command, textbox,etc) de una ventana padre.
  20.  
  21.  
  22. Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
  23.  
  24.  
  25. 'parametros:
  26.  
  27. 'hwndParent: hwnd ventana padre
  28.  
  29. 'lpEnumFunc: direccion de la funcion que recibira los hwnd de las ventanas hijas, por cada ventana hija
  30.  
  31.             encontrada esta llamara a la funcion pasada
  32.  
  33.  
  34.  
  35.  
  36. 'SendMessage: Envia un mensaje a un hwnd (los mensajes son un monton)
  37.  
  38.  
  39. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  40.  
  41.  
  42. 'hwnd: hwnd donde se envia el mensaje
  43.  
  44. 'wMsg: mensaje que se va enviar (en este caso WM_GETTEXT)
  45.  
  46. 'wParam: creo que iria el tamaño de la cadena inicializada
  47.  
  48. 'lParam: variable donde se guardara el texto obtenido


Form1:

Código
  1. 'agregar estos controles
  2. '1 label con el caption "Titulo Ventana"
  3. '1 textbox (text1) al lado derecho del label
  4. '1 command (command1) debajo del textbox
  5. '1 listbox (list1) al lado derecho del command1
  6.  
  7. Option Explicit
  8.  
  9.  
  10. Private Sub Command1_Click()
  11.    Dim hwnd As Long, Titulo As String
  12.    Titulo = Text1.Text
  13.    'busca la ventana pasandole la barra de titulo
  14.    ' si lo encuentra devolvera el HWND de la ventana ,sino 0
  15.    hwnd = FindWindow(vbNullString, Titulo)
  16.    If hwnd <> 0 Then
  17.        List1.Clear
  18.        Contador = 0
  19.        'enumera las ventanas hijas pasandole el HWND de la ventana padre y la direccion de la funcion
  20.        'que va recibir los HWND de las ventanas hijas (AddressOf EnumChildProc)
  21.        Call EnumChildWindows(hwnd, AddressOf EnumChildProc, ByVal 0&)
  22.    Else
  23.        MsgBox "No se encontro la ventana", vbCritical, ""
  24.    End If
  25. End Sub
  26.  
  27. Private Sub Form_Load()
  28.    Command1.Caption = "Enumerar Ventanas Hijas"
  29.    Label1.Caption = "Titulo ventana: "
  30. End Sub
  31.  

en un module bas: module1

Código
  1. Option Explicit
  2.  
  3. Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
  4.  
  5. Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  6.  
  7. Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  8.  
  9.  
  10. Public Const WM_GETTEXT = &HD
  11.  
  12. Public Contador As Long
  13.  
  14. 'funcion encargada de recibir cada HWND de las ventanas hijas
  15.  
  16. Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
  17.    Dim Texto As String, Pos As Long
  18.    'crea un espacios de 1000 caracteres para que almacene ahi el texto obtenido
  19.    Texto = Space(1000)
  20.    'aki obtiene el texto del HWND de la ventana hija y lo almacena en variable "Texto"
  21.    Call SendMessage(hwnd, WM_GETTEXT, 1000, ByVal Texto)
  22.    'busca el caracter nulo (este indica el fin de la cadena)
  23.    Pos = InStr(1, Texto, Chr(0))
  24.    'si lo encuentra coge los caracteres excepto el nulo
  25.    If Pos > 0 Then Texto = Left(Texto, Pos - 1)
  26.    'contador para saber el orden de la ventana hija
  27.    Contador = Contador + 1
  28.    'agrega el HWND y el texto de la ventana hija recibida
  29.    Form1.List1.AddItem Contador & "- hWnd Hija: " & hwnd & " / Texto: " & Texto
  30.    EnumChildProc = 1
  31. End Function
  32.  
  33.  


con este codigo sabras los HWND de las ventanas hijas y sabras el orden que tiene la ventana de la q kieres obtener el texto, con ese ejempo puedes hacer otro  codigo para que tome el dato que kieres de la ventana hijas que kieres.
 
para mas info busca info sobre las apis de windows en VB6.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Controlar programa externo
« Respuesta #5 en: 10 Julio 2011, 23:45 pm »

.
la opcion con EnumChildWindows vas a tener que estar Refreshcando con algun timer, con la que te mensione yo (Subclasificar+inyeccion) no harias esto, claro que la opcion de usar EnumChildWindows es menos complejo que la que te propongo y menos codigo claro... aunq ue depende para que quieras los datos externos... y el tiempo de actualizacion del control, si es VARIADO yo te recomendaria la subclasificacion de lo contrario si sigue un patron con algun timer...

@alxspy
Usa las variantes para String... Left$(),

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
ŞCØRPIØN-X3

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Controlar programa externo
« Respuesta #6 en: 11 Julio 2011, 23:52 pm »

muchas gracias :) me gusto tu code alxspy, pero lo probe con un jugo y no obtiene los valores de las ventanas hijas, en el caso de los juegos onlines como se podria obtenerlos?. Muchas gracias, me gusta mas la idea de hacerlo inyectando el juego con una dll como dice BlackZero pero no me veo capaz de hacerlo solo :S.
En línea

AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
Re: Controlar programa externo
« Respuesta #7 en: 12 Julio 2011, 01:38 am »

ese problemilla igual lo tenia yo al intentar obtener los HWND de las ventanas del GunBound, pues pasa que en los juegos esas no son ventanas sino solo son graficos.
En línea

ŞCØRPIØN-X3

Desconectado Desconectado

Mensajes: 119


Ver Perfil
Re: Controlar programa externo
« Respuesta #8 en: 12 Julio 2011, 02:56 am »

sabes si existe alguna manera de obtener el texto de un textbox en un juego online??
En línea

AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
Re: Controlar programa externo
« Respuesta #9 en: 12 Julio 2011, 16:03 pm »

uhmm tengo poco conocimiento sobre manejo de la memoria , lo que intentaria : usar el ReadProcessMemory para buscar el dato en el proceso (el juego), en el link hay un ejemplo de  como puedes buscar una cadena en un proceso :

http://foro.elhacker.net/analisis_y_diseno_de_malware/ocultar_proceso_en_taskmgr_sin_hooks_parte2-t99549.0.html

weno ese te puede servir de ejemplo para hacer un nuevo codigo que busque el dato en el proceso que kieras, asi obtendrias la direccion de memoria de ese dato que buscas, y pues luego con un timer lees a cada momento esa direccion de memoria en la que encontraste ese datoy y listo.

sino puedes revisar este post que trata de inyeccion de una dll en el que cambian el comportamiento del juego de windows  "buscaminas" (para mi esto es avansado):

http://foro.elhacker.net/asm/tutoinyeccion_dll_%E2%80%93_full_api-t282673.0.html

ultimo recurso busca el "cheat engine" que es un programa que busca datos en la memoria de un proceso.
En línea

Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Inyectar Proceso... "CHEAT"
Programación Visual Basic
Dunkancito2236 1 3,161 Último mensaje 28 Mayo 2010, 16:25 pm
por ssccaann43 ©
Ayuda como solucionar "ventana no responde" durante un proceso en Python
Scripting
Yeison.Eng 2 6,195 Último mensaje 20 Noviembre 2010, 21:49 pm
por Yeison.Eng
¿es posible hacer un proceso "duro de matar" ? VB 6.0
Programación Visual Basic
AlxSpy 5 3,347 Último mensaje 6 Junio 2011, 06:27 am
por AlxSpy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines