[Ayuda] Usando La api ReadProcessMemory

Iniciado por Flamer, 24 Junio 2014, 23:47 PM

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

Flamer

Hola amigos otra ves vengo con la duda que abrí en el sub-foro de ingeniería inversa

http://foro.elhacker.net/ingenieria_inversa/como_leer_posicion_de_memoria_con_vb6-t415165.0.html

Pero ahora con el código que tengo en vb6 es el siguiente:

Este es el form:

Código (vb) [Seleccionar]

Option Explicit
Private Sub Form_Load()
lbl_Nombre.Caption = Environ("ComputerName")
If AbrirProceso Then
   lbl_Password.Caption = Leer(&H14FC80)
End If
End Sub
Private Sub Label1_Click()
End
End Sub


Este es el modulo:

Código (vb) [Seleccionar]

Option Explicit
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
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 Const PROCESS_ALL_ACCESS = &H1F0FFF
Private P_HANDLE As Long
Private P_PID As Long

Public Function AbrirProceso() As Boolean
If FindWindow(vbNullString, "CrackShit") Then
   GetWindowThreadProcessId FindWindow(vbNullString, "CrackShit"), P_PID
   P_HANDLE = OpenProcess(PROCESS_ALL_ACCESS, False, P_PID)
End If
If P_PID = 0 Then
   MsgBox "El Crackme CrackShit No Esta en Ejecucion...", vbCritical, "Error De Ejecucion"
   AbrirProceso = False
   Exit Function
End If
If P_HANDLE = 0 Then
   MsgBox "El KeyGen No Pudo Abrir El Proceso CrackShit...", vbCritical, "Error Al Abrir El Proceso"
   AbrirProceso = False
   Exit Function
End If
AbrirProceso = True
End Function
Public Function Leer(Address As Long) As Byte
Dim Valor As Byte
Dim i As Long
For i = 0 To 12
  ReadProcessMemory P_HANDLE, Address + i, Valor, 1, 0&
  MsgBox Valor
Next i
Leer = Valor
End Function


Espero me ayuden ya que no lee nada

Nota: lo de el msgbox dentro del for son pruebas que asía yo para ver si leía algo y lo de retornar un byte también son pruebas con eso no hay problema eso déjenlo así si quieren yo después lo arreglo ya que me digan como a serle para leer

Saludos Flamer

MCKSys Argentina

Probaste depurar para ver que esta fallando?

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Flamer

Si te refieres poner un punto de interrupcion y presionar F8 en vb ya lo hice y la variable valor no pesca ningun valor solo 0

saludos Flamer

asesino-de-hackers

te edito una parte.

Código (vb) [Seleccionar]

Option Explicit
Private Sub Form_Load()
lbl_Nombre.Caption = Environ("ComputerName")
If AbrirProceso Then
  lbl_Password.Caption = Leer(&H14FC80)
End If
End Sub-alt
Public Sub Label1_Click()
End
End Sub


La tenes que dejar en Public en la liena label1

para realizar una llamada al string tenes que usar

Código (vb) [Seleccionar]
Public Declare Function GetWindowThreadProcessId Lib "user"

el modulo nunca te va a funcionar si lo pones en privada.

lo demas lo compones como se debe!!

Saludos!

Flamer

Hola asesino las apis todo el tiempo se declaran en privado si no te genera un error el cual orita no me acuerdo y no estamos  para ablar de eso.
Y con la api GetWindowTheadProcessId no estoy tratando de ablarle a ningun string si no al id del proceso que es un numero y por otro lado lo del label es un objeto que cierra el programa y como todos los objetos por default van en privado

Saludos Flamer

MCKSys Argentina

Cita de: Flamer en 25 Junio 2014, 01:33 AM
Si te refieres poner un punto de interrupcion y presionar F8 en vb ya lo hice y la variable valor no pesca ningun valor solo 0

saludos Flamer

OK, y los valores anteriores? FindWindow, GetWindowThreadProcessId y OpenProcess funcionan o dan error? Antes de usar las APIs así, guarda los valores de retorno y verifica si estan funcionando bien.

Como ultimo recurso, puedes compilar y ejecutar el exe con Olly. Le pones un BP en la API y verificas si los parametros los está pasando bien (muchas veces hay errores en la declaración de los parametros: byval ó byref).

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Flamer

#6
Hola fly si...... FindWindow entra al if si esta en ejecucion el crackme y GetWindowThreadProcessId si me de vuelbe el PID ya lo verifique en el administrador de tareas y OpenPrecess me de vuelbe un numero y no cero como antes o me falta algo?

Lo del olly lo boy a intentar.... luego te digo

---------------------Edito--------------
ya lee solo faltaba compilarlo y con el olly da igual que el vb solo 0 eso pienso es por que estaba siendo depurado... problema ahora es que no son los valores que esperaba

saludos Flamer