Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Miseryk

#41
Cuando leés una posición de memoria como por ejemplo:

Código (vb) [Seleccionar]

ReadProcessMemory(hprocess(0).Handle, Ipbaseaddress, value, 4, 0)


Bueno, el Ipbaseaddress lo tenés que saber de antemano, la variable "value" tiene que ser de X cantidad de bytes como el siguiente parámetro, en este caso 4.

Luego vas a obtener los 4 bytes desde esa posición de memoria, con lo cual luego podrías hacer:

Código (vb) [Seleccionar]

TextBox1.Text = value


y listo, verías el valor leído en el textbox, ésto es muy eficiente para leer ciertas regiones de memoria para saber si te modificaron algo o no, como por ejemplo GetTickCount() por un speedhack. (Si está hookeada usualmente hay un JMP o un MOV EAX seguido del JMP EAX)

Edit:
PD: Cada vez que se hace un OpenProcess hay que hacer un CloseHandle, otra cosa, con que abras una vez sóla el proceso ya es suficiente, dejá la variable como global y listo.
#42
Cita de: Zitox en 11 Marzo 2015, 00:15 AM
Mira use este code (VB 2010):
Public Class Form1
   Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hprocess As Integer, ByVal Address _
                                                                                          As Integer, ByRef Value As Integer, ByVal Size As Integer, ByRef BytesWritten As Integer) As Integer
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       Timer1.Enabled = True
   End Sub

   Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
       Try
           Dim name As String = "Tutorial-i386"
           Dim hprocess As Process() = Process.GetProcessesByName(name)
           Dim address As Integer = &H2A4D00
           Dim value As Integer = TextBox1.Text
           LblVida.Text = value
           WriteProcessMemory(hprocess(0).Handle, address, value, 4, 0)
       Catch ex As Exception
       End Try
   End Sub

   Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
       Try
           Dim name As String = "Tutorial-i386"
           Dim hprocess As Process() = Process.GetProcessesByName(name)
           Dim address As Integer = &H2A4D00
           Dim value As Integer = TextBox1.Text
           WriteProcessMemory(hprocess(0).Handle, address, value, 4, 0)
       Catch ex As Exception
           MsgBox("Engine for Game")
       End Try
   End Sub
End Class


Y puse en el form, un label de name "LblVida" y un texbox1
Pero lo que hace en el textox1 es modificar el dato donde dice "Health: ***" el *** modifica instantáneamente por que es un timer de intervalo 10



Ahora, yo quiero que en ves de dar/modificar el valor que seria el que yo le coloque al textbox1.text que seria 999, revisa el valor del "Health: ****" se entiende?

Entiendo que la solucion seria simple Write es Escribir, y read, es leer, pero no encuentro el mismo code para declararlo de Read

Muchisimas Gracias!
Zitox!

No sé como funciona .NET, pero el address es siempre de 4 bytes (long), lo mismo con el valor, integer = 2 bytes, long = 4 bytes

PD: intentá leerlo 1ro.
#43
Acá tenés el doble click.

Código (vb) [Seleccionar]

Option Explicit
 
' función SendMessage
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
   ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   ByVal lParam As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Const WM_LBUTTONDBLCLK As Long = &H203
 
Private Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long
MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function
 
Public Sub SimDobleClick(ByVal hwnd As Long, ByVal PosX As Integer, ByVal PosY As Integer)
Call SendMessage(hwnd, WM_LBUTTONDBLCLK, 0, MakeDWord(PosX, PosY))
End Sub
 
Private Sub Command1_Click()
Call SimDobleClick(FindWindow(vbNullString, "CLICKME"), 100, 100)
End Sub
#44
Cita de: Flamer en  9 Marzo 2015, 21:13 PM
Hola amigos estoy intentando simular un click con el mause, ya lo intente con un script pero no se puede ya que es muy limitado y ahora lo intento desde vb6 este es el codigo que tengo:
Código (vb) [Seleccionar]

Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 

Private P_HANDLE As Long
Private P_PID As Long
Private Const PROCESS_ALL_ACCESS = &H1F0FFF
' constantes para SendMessage
Private Const WM_LBUTTONDBLCLK As Long = &H203 ' izquierdo doble click
Private Sub Command1_Click()
If FindWindow(vbNullString, "BlueStacks App Player for Windows (beta-1)") Then
  GetWindowThreadProcessId FindWindow(vbNullString, "BlueStacks App Player for Windows (beta-1)"), P_PID
  P_HANDLE = OpenProcess(PROCESS_ALL_ACCESS, False, P_PID)
End If
Timer1.Interval = 500
End Sub
Private Sub Form_Unload(Cancel As Integer)
CloseHandle P_HANDLE
End Sub

Private Sub Timer1_Timer()
   Call SendMessage(P_HANDLE, WM_LBUTTONDBLCLK, 1, ByVal 0&)
End Sub


saludos flamer y haber quien me hecha una mano

Por ahora encontré como enviar MOUSEDOWN y MOUSEUP y funcionan, no logré el click común pero ésto sería casi lo mismo, y el doble click tendría que verlo.

Código (vb) [Seleccionar]

Option Explicit

Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202
Private Const MK_LBUTTON As Long = &H1&

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

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

Private Sub SimClick(ByVal windowHwnd As Long, ByVal PosX As Integer, ByVal PosY As Integer)
SendMessage windowHwnd, WM_LBUTTONDOWN, MK_LBUTTON, MakeDWord(PosX, PosY)
SendMessage windowHwnd, WM_LBUTTONUP, 0, MakeDWord(PosX, PosY)
End Sub

Private Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long
MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function

Private Sub Command1_Click()
Dim hwnd As Long

hwnd = FindWindow(vbNullString, "CLICKME")

Call SimClick(hwnd, CInt(50), CInt(50))
End Sub
#45
Cita de: TheJucas21 en  6 Marzo 2015, 19:53 PM
Buenas, estuve haciando un cambia caption.
Cambiar la caption de una ventana poniendo yo los datos que quiero etc.

El cambia caption lo hice asi:
(Generen el codigo en su vb para entender mejor)

Y me funciono bien, pero lo que quiero hacer ahora es mejorarlo, de manera que pueda ver los caption es un listbox y cambiandolo dandole click a la caption en la lista y poniendo en un textbox el nombre y dandole al commandbutton bueno, para que ejecute la acción de cambiar la caption.

Lo mas que pude acercarme a eso fue este codigo:
(generenlo en vb para entenderlo mejor)

Pero me muestra los procesos, no las caption de los .exe abiertos. Y ahi me quede.

Espero que ustedes me puedan ayudar a terminar el proyecto, por que me quede estancado.

Saludos!

Código (vb) [Seleccionar]

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long



Código (vb) [Seleccionar]

Private Sub Command1_Click()
List1.Clear

'This code submitted by Sarun101.
Dim DeskTophWnd As Long, WindowhWnd As Long
Dim Buff As String * 255, WindowsCaption() As String
Dim WindowsHandle() As Long
ReDim WindowsCaption(0)
ReDim WindowsHandle(0)
DeskTophWnd = GetDesktopWindow
WindowhWnd = GetWindow(DeskTophWnd, 5)
Do While (WindowhWnd <> 0)
    GetWindowText WindowhWnd, Buff, 255
    If (Trim(Buff) <> "") And (IsWindowVisible(WindowhWnd) > False) Then
        'ShowWindowAsync WindowhWnd, 0
        ReDim Preserve WindowsCaption(UBound(WindowsCaption) + 1)
        ReDim Preserve WindowsHandle(UBound(WindowsHandle) + 1)
        WindowsCaption(UBound(WindowsCaption)) = Buff
        WindowsHandle(UBound(WindowsHandle)) = WindowhWnd
       
        List1.AddItem Buff
    End If
    WindowhWnd = GetWindow(WindowhWnd, 2)
    'Debug.Print WindowhWnd
Loop
'The caption of window is in WindowsCaption()
'The handle of window is in WindowsHandle()
End Sub


Ahí estás listando todos los Captions de los programas (aunque muchos no aparecen, pero supongo que son todos)
#46
Cita de: Zitox en  8 Marzo 2015, 20:36 PM
Buenas me acabo de registrar en este foro por que lo veo bueno y activo, soy Zitox

Vengo con una duda, eh visto en varios post de varios foros, sobre una funcion que se llama "ReadProcessMemory" Que seria para leer la memoria de un X programa.
Lo que quiero hacer creo que es eso.

Por ejemplo aca dejo una imagen:
http://fotos.subefotos.com/1409def66bcaf6efd48b1d2bdce10e3fo.jpg

Queria que detectara si el primer numero "400" esta sobre bajo del "400" y si pasa eso lo que haria seria ejecutar "x" accion.
Busque en todos lados sinceramente, pero no entrontre eso.
Encontre GetPixel de todo que tiene que ver con el tema pero no el mismo.

Espero que me puedan ayudar.

Saludos!

Así es, ReadProcessMemory lee desde una posición de memoria tantos bytes, por lo que mostrás, puede leer desde 2 bytes a 4 bytes, si es un juego como leer la vida me imagino que son 4 bytes.

Código (cpp) [Seleccionar]

BOOL WINAPI ReadProcessMemory(
 _In_   HANDLE hProcess,
 _In_   LPCVOID lpBaseAddress,
 _Out_  LPVOID lpBuffer,
 _In_   SIZE_T nSize,
 _Out_  SIZE_T *lpNumberOfBytesRead
);


handle del proceso, (se le hace un OpenProcess 1ro)
posición Address, (ej: 0x004561A0)
salida, (variable tuya)
bytes a leer, (cantidad, ej: 2&, 4&)
0 (vá casi siempre en cero, es para otra cosa)

PD: ReadProcessMemory es indetectable.
#47
Cita de: TheJucas21 en  5 Marzo 2015, 06:14 AM
Buenas esta es una duda que antes de postear esto eh, investigado en internet, google, y este mismo foro con temas parecidos.

Lo que quiero hacer basicamente es enviar un packet hacia una app que tengo abierta.
Segun lo que tengo entendido se hace atreves de winshock  etc
por que me vi este th http://foro.elhacker.net/programacion_vb/ayuda_programa_que_envie_1_paquete_a_x_servidor-t247752.0.html

Pero no me ayudo a mi caso.
Mas claramente lo que quiero hacer es como lo que hace WpePro, que envia paquetes a un .exe que tengamos abierto para "repetir nuestra acción" por asi decirlo.
Y quiero que se active con el mouse (Esto ya lo se, el tema es para enviar el packet a ese .exe que seria lo importante del proyecto que tengo el mente).

Saludos!
TheJucas21!

El WpePro se hookea en el proceso especificado, éso necesitás, lo podés hacer en cualquier lenguaje, por lo menos en C++ y VB6 se puede hacer seguro.
#48
Va a funcionar, a menos que se muera 32 bits, y aún así, siendo 32 se puede hacer un re-make del compiler de VB6 y que lo pase a instrucciones de 64, en pocas palabras, necesitás las cosas que necesita un exe para que funcione, todos los programas llegan a las mismas instrucciones del procesador, asi que poné las dependencias y listo.
#49
Cita de: darky666 en 24 Febrero 2015, 19:48 PM
yo en lo personal creo que es un lenguaje muy viejo y prefiero .net pero aun creo que es un lenguaje muy bueno ya que no ocupa de algun framework adicional para funcionar

tu que opinas de vb6 para programar?


Depende para lo que uno necesite, lo que sí al estar todo encerrado en clases (.NET) utiliza más código y ni idea lo que hace internamente, yo por éso busco algo menos "K", cosa que te permita hacer cosas sin controlarte. Además solamente necesita algunas dependencias básicas y no un framework, por otro lado la VM de .NET es un asco, además con el reflector y otros más te pueden sacar el código fuente, horrible en todos sus aspectos, pero que al tenerlo todo en clases es más fácil llamar a las funciones y las tenés enumeradas en la misma, VB6 es más de hacer cosas desde cero y no predeterminado y supongo que tiene menos seguridad VB6, con lo cual podés hookear cosas a un nivel que con la VM de .NET no podrías (no sé si se podrá en shitsharp (c#), pero en VB .NET sé que no.
#50
Podés guardar un archivo en el mismo dir que el exe o podés usar:

Código (vb) [Seleccionar]

SaveSetting(...)
GetAllSettings(...)


que lo guarda en el registro, el tema es que si lo movés a otra pc, perderías los datos ya que se encuentran en el equipo donde se guardó.