Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: ŞCØRPIØN-X3 en 10 Julio 2011, 00:43 am



Título: Obtener datos de un proceso ("cheat")
Publicado por: ŞCØRPIØN-X3 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


Título: Re: Controlar programa externo
Publicado por: BlackZeroX 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!¡.


Título: Re: Controlar programa externo
Publicado por: seba123neo 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.


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 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...


Título: Re: Controlar programa externo
Publicado por: AlxSpy 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.


Título: Re: Controlar programa externo
Publicado por: BlackZeroX 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!¡.


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 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.


Título: Re: Controlar programa externo
Publicado por: AlxSpy 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.


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 12 Julio 2011, 02:56 am
sabes si existe alguna manera de obtener el texto de un textbox en un juego online??


Título: Re: Controlar programa externo
Publicado por: AlxSpy 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.


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 12 Julio 2011, 19:31 pm
Gracias, lo voy a probar aver que tal me va xD, el cheat engine ya es obsoleto en los juegos online... me parecia tambien buena idea lograr crear un programa similar al cheat engine en vb6.0 asi de esta manera poder hacerlo indetectable pero todavia no lo logro xD


Título: Re: Controlar programa externo
Publicado por: .:UND3R:. en 12 Julio 2011, 20:24 pm
SCORPION que quieres hacer?


Título: Re: Controlar programa externo
Publicado por: seba123neo en 13 Julio 2011, 01:35 am
por lo que entiendo, cambiar una variable en memoria de un juego en el navegador, asi como hace el cheat engine con los juegos en flash.


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 13 Julio 2011, 06:47 am
Wenas... no seria cambiar un dato solo leer un dato, miren es asi: como la mayoria de los juego online existe una barra que es la vida del personaje, yo lo que necesito es captar ese valor. Otro dato similar que necesito captar es cuando una ventana dentro del juego esta abierta y cuando no. Eso es lo que necesitaria... Aclaro que el juego no es de navegador. Muchas gracias por su tiempo :)


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 14 Julio 2011, 03:58 am
no me pueden ayudar?


Título: Re: Controlar programa externo
Publicado por: raul338 en 14 Julio 2011, 04:23 am
Deberias usar el Cheat Engine y de ahi hacer el codigo :)


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 14 Julio 2011, 04:46 am
es que en estos juego no se puede usar el cheat engine, ya es demasiado viejo par los juegos online xD


Título: Re: Controlar programa externo
Publicado por: raul338 en 14 Julio 2011, 04:49 am
Si lo pones asi seria muy dificil, es web? Usa un control para navegar por ahi. Es flash o Exe? usa cheat engine (a menos que tenga alguna proteccion) :P

La mas dificil, complicada y a veces innecesaria: OCR :P


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 14 Julio 2011, 05:08 am
em si es exe, y tiene proteccion themida :S, bueno y el cheat engine no funciona en estos juegos.. :( poreso yo lo que intentaba hacer es buscar en memoria los datos del juego para asi obtener el dato que necesito, y aclaro no necesito modificarlos... Muchas gracias. espero que me puedan ayudar


Título: Re: Controlar programa externo
Publicado por: AlxSpy en 14 Julio 2011, 19:36 pm
holas de nuevo, pero que juego es?
por que dices que no funciona el cheat engine? lo detecta como hack o simplemente no encuentra los datos que buscas?


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 14 Julio 2011, 21:42 pm
Hola, en ningun juego online EXE se puede usar el cheat engine, si tienes abirto el cheat engine el juego no abre, y si abres el cheat engine con el juego abierto, el juego se cierra...

Se me ocurrio una forma de hacerlo "Poco profesional" xD
 Estuve tratando de obtener un dato del juego atraves de los colores en ciertas coordenadas, es decir en la coordenada X=168 e Y=68 si existe el color rojo es porque todavia tiene XX de vida, bueno realice el programa, pero lo que sucedio es que una ves que abro el juego la API GetPixel o GetWindowsDC parece dejar de funcionar y deja de captar los colores :S. La verdad que nose que proteccion tendra el juego que desactiva algunas apis, al igual que sendkey tampoco funciona.. :S, si alguien tiene alguna idea me ayuda...


Título: Re: Controlar programa externo
Publicado por: raul338 en 15 Julio 2011, 01:52 am
Podes probar con alternativas al Cheat Engine :P


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 15 Julio 2011, 03:15 am
a que te referis con alternativas al cheat engine? a programas similares como el moonlignt?, porque es dificil que alla uno que no sea detectado ya que a estos juegos lo actualizan periodicamente para hacer detectados los nuevos "hack" que salgan...


Título: Re: Controlar programa externo
Publicado por: BlackZeroX en 15 Julio 2011, 03:35 am
Ingenieria inversa... antes de programar deberas aplicar esto para ver como calcular la dirrecion de la sección que deseas leer.

Prueba con un editor Hexadecimal; Hoy en dia cualquier editor hexadecimal desente te permite leer la memoria de un proceso X... y bueno abria que ver si el bloque a leer es estatica o dinamica, si es lo segundo vas a tener que analizar mas a detalle, si es lo primero lo tendras muy facil.

Edito:

Cuando regrese reviso mi disco duro para ver si aun tengo la version Modificada del Cheat Engine ( No lo detecta ningun juego xP ).
*Intenta cambiarle el Title a la ventana del cheat Engine... seguro los juegos usan FindWindow para ver si esta abierto este programa...

Dulces Lunas!¡.


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 15 Julio 2011, 03:50 am
Hola!, muy buena idea xD no se me habia ocurrido lo del titulo de la ventana, ahora lo probare :P, y con respecto a lo hexadecimal, el 10 editor tiene esta opcion de leer la memoria de un proceso?, es un muy buen editor asi que supongo que lo debe tener xD

EDITO:
¿porque puede ser que dejen de funcionar las API's GetPixel y/o GetWindowsDC? Mientras no entro al juego funciona perfectamente mi programa pero en cuanto abro el juego dejan de funcionar... u.u. No me imagino que puede ser :S


Título: Re: Controlar programa externo
Publicado por: raul338 en 15 Julio 2011, 04:52 am
EDITO:
¿porque puede ser que dejen de funcionar las API's GetPixel y/o GetWindowsDC? Mientras no entro al juego funciona perfectamente mi programa pero en cuanto abro el juego dejan de funcionar... u.u. No me imagino que puede ser :S
Hay algunas protecciones de software que "impiden" el uso de esas funciones :P


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 15 Julio 2011, 18:19 pm
Intente cambiando el titulo del cheat engine y cambiando los datos del fabricante y la version pero no consegui nada :S igual lo sigue detectando u.u. Hay algun code por hay de un programa estilo cheat engine en vb6?? porque ya no se me ocurre nada para hacer indetectable el cheat engine.


Título: Re: Controlar programa externo
Publicado por: AlxSpy en 15 Julio 2011, 18:47 pm
Citar
holas de nuevo, pero que juego es?

el link que te puse de ejemplo en que resulto? (readprocessmemory), leia algo de datos o te devolvia nulo o nada?

hay 2 codigos fuentes del cheat engine pero esta en delphi, ahi podrias ver como funciona.

edit:
tambien intente cambiando el titulo, nombre del programa pero nada.

y si cambias el titulo de este post por otro que lleve la palabra "cheat", aqui hay usuarios que saben eso de buscar en la memoria y hacer cheat y podrian darte una ayuda con eso, y kizas de paso hacen un tutorial sobre eso y aprendemos xD.


Título: Re: Controlar programa externo
Publicado por: BlackZeroX en 15 Julio 2011, 22:26 pm
DumpMemory.... creo que lo hizo MadAntraX... revisa en recopilacion de enlaces interesantes ( Los temas pegados ) hay debera estar.

Dulces Lunas!¡.


Título: Re: Controlar programa externo
Publicado por: ŞCØRPIØN-X3 en 16 Julio 2011, 21:22 pm
tambien intente cambiando el titulo, nombre del programa pero nada.

y si cambias el titulo de este post por otro que lleve la palabra "cheat", aqui hay usuarios que saben eso de buscar en la memoria y hacer cheat y podrian darte una ayuda con eso, y kizas de paso hacen un tutorial sobre eso y aprendemos xD.

xD jaja no me referia al titulo del post :P, me referia al texto de la barra de titulo del cheat engine xD, me dijieron que pruebe con eso para ver si con otro titulo el juego aun me lo detectaba :P.

y con respecto a los links, no son lo que yo buscaba, uno de ellos lo que hace es que el proceso del programa no figure en el administrador de tareas... y en el segundo link se hace uso de un debugger (ollydbg) el cual no se puede ejecutar mientras este el juego abierto :S, el juego no permite la ejecucion de ningun debugger :S
..Investigare un poco mas sobre esa API

-----------------------------------------------------------

BlackZeroX ahora me pondre a ver lo que me dijiste ;)

-----------------------------------------------------------


Título: Re: Obtener datos de un proceso ("cheat")
Publicado por: ŞCØRPIØN-X3 en 16 Julio 2011, 23:27 pm
Acabo de hacer varias pruebas con el proceso del juego y tuve malos resultados :S, al leer la memoria del proceso que supuestamente es del juego, me da 0 Bytes, es decir que no encuentra nada en memoria :S. El juego crea dos procesos:

- XTrap : Proceso del sistema de seguridad
. AikaEN : Supuestamente el proceso del juego xD

Probe leer la memoria del proceso AikaEN usando el DuMper de MadAntrax pero no encuentra datos en la memoria, tambien probe con 2 editores hexadecimales, abriendo el proceso pero tambien me devuelven 0 bytes :S
ya nose que puede ser me da a pensar que el proceso tiene alguna "seguridad" contra lectura :S. El proceso tiene un uso de memoria de 881.928 KB


Título: Re: Obtener datos de un proceso ("cheat")
Publicado por: extreme69 en 20 Julio 2011, 12:04 pm
EDIT: Useless, ya ví que no te sirve cheat engine :P


Título: Re: Obtener datos de un proceso ("cheat")
Publicado por: ŞCØRPIØN-X3 en 25 Julio 2011, 02:14 am
mmm ninguna idea de como hacerlo?