Obtener datos de un proceso ("cheat")

Iniciado por ŞCØRPIØN-X3, 10 Julio 2011, 00:43 AM

0 Miembros y 1 Visitante están viendo este tema.

ŞCØRPIØN-X3

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

BlackZeroX

.
* 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!¡.
The Dark Shadow is my passion.

seba123neo

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.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

ŞCØRPIØN-X3

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...

AlxSpy

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

Código (vb) [Seleccionar]



'FindWindow: Busca una ventana por su classname o por su windowname(barra de titulo)


Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long


'parametros:

'lpClassName: nombre de la clase

'windowname: barra de titulo





'EnumChildWindows: Enumera las ventanas hijas (command, textbox,etc) de una ventana padre.


Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long


'parametros:

'hwndParent: hwnd ventana padre

'lpEnumFunc: direccion de la funcion que recibira los hwnd de las ventanas hijas, por cada ventana hija
           
            encontrada esta llamara a la funcion pasada




'SendMessage: Envia un mensaje a un hwnd (los mensajes son un monton)


Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long


'hwnd: hwnd donde se envia el mensaje

'wMsg: mensaje que se va enviar (en este caso WM_GETTEXT)

'wParam: creo que iria el tamaño de la cadena inicializada

'lParam: variable donde se guardara el texto obtenido



Form1:

Código (vb) [Seleccionar]

'agregar estos controles
'1 label con el caption "Titulo Ventana"
'1 textbox (text1) al lado derecho del label
'1 command (command1) debajo del textbox
'1 listbox (list1) al lado derecho del command1

Option Explicit


Private Sub Command1_Click()
   Dim hwnd As Long, Titulo As String
   Titulo = Text1.Text
   'busca la ventana pasandole la barra de titulo
   ' si lo encuentra devolvera el HWND de la ventana ,sino 0
   hwnd = FindWindow(vbNullString, Titulo)
   If hwnd <> 0 Then
       List1.Clear
       Contador = 0
       'enumera las ventanas hijas pasandole el HWND de la ventana padre y la direccion de la funcion
       'que va recibir los HWND de las ventanas hijas (AddressOf EnumChildProc)
       Call EnumChildWindows(hwnd, AddressOf EnumChildProc, ByVal 0&)
   Else
       MsgBox "No se encontro la ventana", vbCritical, ""
   End If
End Sub

Private Sub Form_Load()
   Command1.Caption = "Enumerar Ventanas Hijas"
   Label1.Caption = "Titulo ventana: "
End Sub


en un module bas: module1

Código (vb) [Seleccionar]

Option Explicit

Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long


Public Const WM_GETTEXT = &HD

Public Contador As Long

'funcion encargada de recibir cada HWND de las ventanas hijas

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
   Dim Texto As String, Pos As Long
   'crea un espacios de 1000 caracteres para que almacene ahi el texto obtenido
   Texto = Space(1000)
   'aki obtiene el texto del HWND de la ventana hija y lo almacena en variable "Texto"
   Call SendMessage(hwnd, WM_GETTEXT, 1000, ByVal Texto)
   'busca el caracter nulo (este indica el fin de la cadena)
   Pos = InStr(1, Texto, Chr(0))
   'si lo encuentra coge los caracteres excepto el nulo
   If Pos > 0 Then Texto = Left(Texto, Pos - 1)
   'contador para saber el orden de la ventana hija
   Contador = Contador + 1
   'agrega el HWND y el texto de la ventana hija recibida
   Form1.List1.AddItem Contador & "- hWnd Hija: " & hwnd & " / Texto: " & Texto
   EnumChildProc = 1
End Function




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.

BlackZeroX

.
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!¡.
The Dark Shadow is my passion.

ŞCØRPIØN-X3

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.

AlxSpy

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.

ŞCØRPIØN-X3

sabes si existe alguna manera de obtener el texto de un textbox en un juego online??

AlxSpy

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.