Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Flamer en 24 Junio 2014, 23:47 pm



Título: [Ayuda] Usando La api ReadProcessMemory
Publicado por: Flamer en 24 Junio 2014, 23:47 pm
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
 (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
  1. Option Explicit
  2. Private Sub Form_Load()
  3. lbl_Nombre.Caption = Environ("ComputerName")
  4. If AbrirProceso Then
  5.   lbl_Password.Caption = Leer(&H14FC80)
  6. End If
  7. End Sub
  8. Private Sub Label1_Click()
  9. End
  10. End Sub
  11.  

Este es el modulo:

Código
  1. Option Explicit
  2. 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
  3. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  4. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  5. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
  6.  
  7. Private Const PROCESS_ALL_ACCESS = &H1F0FFF
  8. Private P_HANDLE As Long
  9. Private P_PID As Long
  10.  
  11. Public Function AbrirProceso() As Boolean
  12. If FindWindow(vbNullString, "CrackShit") Then
  13.   GetWindowThreadProcessId FindWindow(vbNullString, "CrackShit"), P_PID
  14.   P_HANDLE = OpenProcess(PROCESS_ALL_ACCESS, False, P_PID)
  15. End If
  16. If P_PID = 0 Then
  17.   MsgBox "El Crackme CrackShit No Esta en Ejecucion...", vbCritical, "Error De Ejecucion"
  18.   AbrirProceso = False
  19.   Exit Function
  20. End If
  21. If P_HANDLE = 0 Then
  22.   MsgBox "El KeyGen No Pudo Abrir El Proceso CrackShit...", vbCritical, "Error Al Abrir El Proceso"
  23.   AbrirProceso = False
  24.   Exit Function
  25. End If
  26. AbrirProceso = True
  27. End Function
  28. Public Function Leer(Address As Long) As Byte
  29. Dim Valor As Byte
  30. Dim i As Long
  31. For i = 0 To 12
  32.  ReadProcessMemory P_HANDLE, Address + i, Valor, 1, 0&
  33.  MsgBox Valor
  34. Next i
  35. Leer = Valor
  36. End Function
  37.  

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


Título: Re: [Ayuda] Usando La api ReadProcessMemory
Publicado por: MCKSys Argentina en 25 Junio 2014, 00:01 am
Probaste depurar para ver que esta fallando?

Saludos!


Título: Re: [Ayuda] Usando La api ReadProcessMemory
Publicado por: 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


Título: Re: [Ayuda] Usando La api ReadProcessMemory
Publicado por: asesino-de-hackers en 26 Junio 2014, 09:26 am
te edito una parte.

Código
  1. Option Explicit
  2. Private Sub Form_Load()
  3. lbl_Nombre.Caption = Environ("ComputerName")
  4. If AbrirProceso Then
  5.  lbl_Password.Caption = Leer(&H14FC80)
  6. End If
  7. End Sub-alt
  8. Public Sub Label1_Click()
  9. End
  10. End Sub

La tenes que dejar en Public en la liena label1

para realizar una llamada al string tenes que usar

Código
  1. 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!


Título: Re: [Ayuda] Usando La api ReadProcessMemory
Publicado por: Flamer en 26 Junio 2014, 17:04 pm
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


Título: Re: [Ayuda] Usando La api ReadProcessMemory
Publicado por: MCKSys Argentina en 26 Junio 2014, 17:51 pm
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!


Título: Re: [Ayuda] Usando La api ReadProcessMemory
Publicado por: Flamer en 26 Junio 2014, 18:19 pm
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